PostHeaderIcon

Пример реализации обратного NAT

Для реализации удаленного доступа к локальным ресурсам домашней сети(ПК, система видеонаблюдения, консоль управления "умного дома" и т.д.) при отсутствии реального IP-адреса можно применить следующую схему:reverse nat example

Описание:

1. Роутер  D-Link DIR-300. Родная прошивка не поддерживает работы в качестве pptp-клиента, по этому установлена прошивка dd-wrt, с поддержкой донного функционала. Выход в Интернет осуществляется через местного горе-провайдера, который не может предоставить реальный статический IP-адрес и предоставляет выход в сеть для всех клиентов через единственный реальный IP-адрес.

2. windows ПК(или  IP-камера) к которым необходим доступ, IP 192.168.10.111

3. Арендованный сервер с ОС FreeBSD с реальным статическим IP x.x.x.x. На сервере установлен MPD в качестве pptp-сервера, к стандартным настройкам добавлено автоматическое прописывание маршрута при поднятии pptp-туннеля:

route add 192.168.10.0/24 -iface ng0
для этого в конфиг MPD добавляется строка:
set iface up-script /usr/local/etc/mpd5/route-add.sh
и в файл route-add.sh помещается команда добавления моршрута.
Этот маршрут необходим для заворота траффика в локальную сеть через туннель .
4. На стороне сервера туннель имеет интерфейс ng0, адрес 10.0.10.1, а на стророне клиента - 10.0.10.254
5. Роутер имеет внутренний адрес 192.168.10.1 и адрес 172.16.1.2. получаемый от провайдера.
6. На стороне сервера, в настройки PF(фаервол) добавляем строки:
nat on ng0 from any to {10.0.10.0/24, 192.168.10.0/24} -> (ng0)
Весь траффик, адресуемый сетям 10.0.10.0/24 и 192.168.10.0/24 будет подвергнут обратному НАТу и отправлен в туннель как траффик туннельного интерфейса сервера(ng0) - 10.0.10.1
rdr pass on $ext_if proto tcp from any to x.x.x.x port 8081 -> 192.168.10.111 port 80 # ip-camera web interface
rdr pass on $ext_if proto tcp from any to x.x.x.x port 8080 -> 10.0.10.254 port 80 # router web interface
Эти 2 строки переадресуют трафик, пришедший на внешний адрес сервера на IP адрес камеры(или другого устройства) и роутера, во второй строке можно указать не туннельный адрес роутера, а локальный, тут это было сделано ради эксперимента и большого значения не имеет.
pass in quick on igb0 proto tcp from any to x.x.x.x port 1723 keep state
pass in quick on igb0 proto tcp from any to x.x.x.x port 8080 keep state
pass in quick on igb0 proto tcp from any to x.x.x.x port 8081 keep state
Тут разрешаем доступ со стороны Интернет к необходимым портам, где igb0 - сетевой интерфейс сервера,
x.x.x.x - его IP-адрес, 1723 - порт, необходимый для работы pptp-туннеля, порты 8080 и 8081 - по которым будут доступны наши локальные ресурсы.
pass in quick on ng0 proto {tcp,udp,icmp} from any to any keep state
pass out quick on ng0 proto {tcp,udp,icmp} from any to any keep state
Разрешаем прохождение tcp,udp,icmp пакетов через туннель в обоих направлениях.
Важно не забыть добавить в /etc/rc.conf сервера строку:
gateway_enable="yes"
7. Разъездной ноутбук(или смартфон) с IP--адресом y.y.y.y с которого необходим удаленный доступ к устройствам в локальной сети.
8. Логика работы схемы:
для доступа к ip-камере(windows ПК) в браузере ноутбука набирается адрес x.x.x.x:8081
пришедший на сервер пакет пропускается разрешающим правилом фаервола и попадает в обратный NAT,
где происходит подмена адреса отправителя y.y.y.y(IP ноутбука, с которым он вышел в Интернет) на IP-адрес серверного конца pptp-туннеля, после чего траффик заворачивается в туннель и попадает на роутер.
Роутер отправляет пакеты через локальный интерфейс на конечное устройство(ip-камеру).
Ответные пакеты от камеры будут отправлены на роутер, как default gateway для камеры, но из-за того, что они были отправлены из pptp-туннеля,  роутер вернет их в туннель, а не отправит в default gateway провайдера.
Далее этот трафик от камеры вылетает из туннеля и преобразуется обратным НАТом, в следствии чего происходит обратная замены адреса назначения с 10.0.10.1 на y.y.y.y.
Единственной ложкой дегтя в данной схеме будет увеличение времени доступа до локальных ресурсов сети, т.к. путь к ним(и от них) будет проходить через туннельный сервер. Если ноутбук, сервер и роутер будут находится в разных городах(или странах) то время может удвоится и даже утроится.