.
Хочу рассказать вам про то как имея в интернете свой VPS-сервер можно поднять туннель в домашнюю сеть. И не платить при этом за статический IP провайдеру, и даже находясь за NAT, все равно сделать доступными в интернете свои домашние сервисы.
Первым делом установим и настроим OpenVPN сервер на нашем VPS:
Отредактируем файл конфигурации:
Здесь 10.9.8.x будет наша VPN-сеть, в которой адрес 10.9.8.1 мы назначем VPN-серверу, а адрес 10.9.8.2 VPN-клиенту.
Последняя строчка являет ссобой статисческий маршрут, который нужен для того, что бы наш VPS знал что путь в нашу домашнюю сеть лежит через роутер
Еще нам нужно сгенерировать ключ с которым будет подключаться к серверу наш роутер:
И можно запускать демона:
Теперь установим OpenVPN на наш роутер с которого мы будем инициализировать VPN-соединение:
Скопируем ключ на наш рутер, исполюзуя scp:
Отредактируем конфигурацию интерфейса:
как сказал alexdob:
И проверим, все ли у нас заработает:
Если все ок, то запустим и добавим OpenVPN демона в автозапуск:
Теперь настроим маршрутизацию.
Что бы наш роутер пропускал наш сервер в домашнюю сеть, а машины из домашней сети пропускал к серверу, нужно добавить следующие правила на роутер.
Создадим файлик и запишем в него эти правила:
Cделаем его исполняемым:
И добавим его в /etc/rc.local для автозапуска:
Добавлять нужно перед exit 0
В принципе все готово.
Наши сети соединены, все машины прекрасно друг-друга видят и обмениваются пакетами.
Теперь, при желании, можно настроить проброс портов с внешнего на внутренний адрес.
Вот так, к примеру, выглядит проброс ssh порта на одну из машин у меня в домашней сети:
Где XX.XX.XX.XXX — внешний IP сервера, 192.168.1.200 — IP моей машины внутри домашней сети, 666 — порт при обращении к которому я попадаю на эту машину
PS: Если у вас что-то не получается убедитесь что на вашем VPS есть и подключены все необходимые для этого модули ядра
При написании статьи, я использовал информацию из следующих источников:

Хочу рассказать вам про то как имея в интернете свой VPS-сервер можно поднять туннель в домашнюю сеть. И не платить при этом за статический IP провайдеру, и даже находясь за NAT, все равно сделать доступными в интернете свои домашние сервисы.
Исходные данные
- VPS сервер на debian со статическим реальным IP
- роутер с прошивкой OpenWRT, который находится за провайдерским NAT
- домашняя сеть с компьютерами и виртуальными машинами в 192.168.1.0/24
Настройка туннеля
Первым делом установим и настроим OpenVPN сервер на нашем VPS:
apt-get update
apt-get install openvpn
Отредактируем файл конфигурации:
vi /etc/openvpn/tun0.conf
dev tun0
ifconfig 10.9.8.1 10.9.8.2
secret /etc/openvpn/static.key
route 192.168.1.0 255.255.255.0
Здесь 10.9.8.x будет наша VPN-сеть, в которой адрес 10.9.8.1 мы назначем VPN-серверу, а адрес 10.9.8.2 VPN-клиенту.
Последняя строчка являет ссобой статисческий маршрут, который нужен для того, что бы наш VPS знал что путь в нашу домашнюю сеть лежит через роутер
Еще нам нужно сгенерировать ключ с которым будет подключаться к серверу наш роутер:
openvpn --genkey --secret static.key
И можно запускать демона:
service openvpn start
Теперь установим OpenVPN на наш роутер с которого мы будем инициализировать VPN-соединение:
opkg update
opkg install openvpn
Скопируем ключ на наш рутер, исполюзуя scp:
scp root@your-server.org:/etc/openvpn/static.key /etc/openvpn/static.key
Отредактируем конфигурацию интерфейса:
vi /etc/openvpn/tun0.conf
remote your-server.org
dev tun0
ifconfig 10.9.8.2 10.9.8.1
secret /etc/openvpn/static.key
keepalive 60 120
как сказал alexdob:
keepalive 60 180
Означает следующее: каждые 60 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
И проверим, все ли у нас заработает:
openvpn --config /etc/openvpn/tun0.conf
Если все ок, то запустим и добавим OpenVPN демона в автозапуск:
/etc/init.d/openvpn start
/etc/init.d/openvpn enable
Маршрутизация
Теперь настроим маршрутизацию.
Что бы наш роутер пропускал наш сервер в домашнюю сеть, а машины из домашней сети пропускал к серверу, нужно добавить следующие правила на роутер.
Создадим файлик и запишем в него эти правила:
vi /etc/iptables.up.rules
#!/bin/sh
#Allow forwarding via tunnel
iptables -I INPUT -i tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -j ACCEPT
iptables -I OUTPUT -o tun0 -j ACCEPT
iptables -I FORWARD -o tun0 -j ACCEPT
Cделаем его исполняемым:
chmod +x /etc/iptables.up.rules
И добавим его в /etc/rc.local для автозапуска:
/etc/iptables.up.rules
Добавлять нужно перед exit 0
В принципе все готово.
Наши сети соединены, все машины прекрасно друг-друга видят и обмениваются пакетами.
Теперь, при желании, можно настроить проброс портов с внешнего на внутренний адрес.
Вот так, к примеру, выглядит проброс ssh порта на одну из машин у меня в домашней сети:
# Forward SSH port to server
iptables -t nat -A PREROUTING -d XX.XX.XX.XXX -p tcp --dport 666 -j DNAT --to-dest 192.168.1.200:22
iptables -t nat -A POSTROUTING -d 192.168.1.200 -p tcp --dport 22 -j SNAT --to-source 10.9.8.1
Где XX.XX.XX.XXX — внешний IP сервера, 192.168.1.200 — IP моей машины внутри домашней сети, 666 — порт при обращении к которому я попадаю на эту машину
PS: Если у вас что-то не получается убедитесь что на вашем VPS есть и подключены все необходимые для этого модули ядра
Источники
При написании статьи, я использовал информацию из следующих источников: