У нас есть nat с предварительной маршрутизацией, например: iptables -t nat -I PREROUTING -p tcp -d mysite.com --dport 37777 -j DNAT --to-destination 192.168.1.2:37777
Если я попытаюсь подключиться из другой сети, служба будет работать нормально. К сожалению, когда я пытаюсь подключиться изнутри сети, соединение прерывается. Я что-то забыл? Заранее спасибо.
Вариант, который вы ищете: Закрепление NAT.
Когда клиент изнутри сети пытается получить доступ к общедоступному IP-адресу маршрутизатора, место назначения соединения изменяется на 192.168.1.2:37777. Сервер получает начало рукопожатия и отвечает на исходный адрес (все еще клиент) ответом на рукопожатие. Поскольку клиент помнит только разговор с IP-адресом маршрутизатора, а не с IP-адресом сервера, клиент считает это соединение недействительным.
При закреплении, когда место назначения изменяется, источник также изменяется на IP-адрес маршрутизатора, если клиент находится в локальной сети. Это означает, что сервер передает его обратно маршрутизатору, а маршрутизатор ретранслирует пакеты клиенту. С точки зрения клиентов это выглядит так, как будто он разговаривает с маршрутизатором.
Изменить: Что касается iptables, вы хотите добавить что-то вроде
iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.2 -s 192.168.1.0/24 --dport 37777 -j SNAT --to-source 192.168.1.1