Проброс портов на внутренний сервер для внешних и внутренних клиентов через IpTables

Материал из AlexNook
Перейти к навигацииПерейти к поиску

Пробросить для внешних клиентов, идущих из интернета на интерфейс с адресом 77.37.158.109 на порт 5555 все запросы на внутренний сервер с IP 192.168.0.23 который тоже слушает порт 5555

iptables -t nat -A PREROUTING -p tcp -d 77.37.158.109 --dport 5555 -j DNAT --to-destination 192.168.0.23


Если клиент из внутренней сети 192.168.0.0/24 будет обращаться на ресурс 192.168.0.23 на порт 5555, то всё будет отлично, но если вдруг он решит зайти на него из вне, типа как внешний юзер, допустим по некому доменному имени типа donik.org, то у него ничего не выйдет. Это будет вызвано тем, что внутренний сервер 192.168.0.23 будет видеть, что к нему обращается клиент из внутренней подсети. И поэтому этот сервер 192.168.0.23 будет отвечать этому клиенту минуя внешний шлюз 77.37.158.109 (адрес, на котором в итоге висит домен и где ходят внешние юзеры). Клиент такого ответа не ждёт, т.к. он находясь внутри локалки, решил вдруг обратиться к внутреннему ресурсу через внешний адрес. Чтобы такое разрешить, нужно все запросы, идущие на внутренний адрес сервера 192.168.0.23 по порту 5555 помечать, что они якобы идут с адреса 77.37.158.109 (стандартная схема работы NAT'а)

iptables -t nat -A POSTROUTING -d 192.168.0.23 -p tcp --dport 5555 -j SNAT --to-source 77.37.158.109


Ссылки

  • Статья, которая легла в основу статьи