вторник, 19 сентября 2017 г.

Проброс порта для доступа к локальным ресурсам по внешнему адресу.

Допустим, в сети имеется шлюз, и внутри сети, за шлюзом находится ресурс имеющий внутренний адрес напр. 192.168.1.7. Доступ из Интернет к 192.168.1.7 организован с помощью проброса портов с шлюза имеющего внешний адрес напр. 1.2.3.4. Также из Интернета доступ к серверу возможен по имени name.ru.
Но что будет если мы обратимся из внутренней сети с ip 192.168.1.9 к серверу по имени name.ru? Нашим хостом будет проигнорирован ответ с name.ru, т.к. он придет с адреса 192.168.1.7, а не 1.2.3.4. Для того чтобы хосты понимали друг-друга нужно правило на шлюзе заменяющее адрес хоста-клиента (192.168.1.9) на внутренний адрес шлюза напр. 192.168.1.1, в таком случае пакеты от 192.168.1.7 пойдут через шлюз и на 192.168.1.9 придут с адреса 1.2.3.4.

iptables -t nat -A POSTROUTING --dst 192.168.1.7 -p tcp -m tcp --dport 443 -j SNAT --to-source 192.168.1.1

Для того чтобы получить доступ к name.ru с сервера, который являетя шлюзом необходимо следующее правило:

iptables -t nat -A OUTPUT --dst 1.2.3.4 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.7

Если мы используем прокси-сервер на 192.168.1.1 то достаточно добавить name.ru в исключения прокси.