У нас есть нат с предварительной маршрутизацией вроде этого: iptables -t nat -I PREROUTING -p tcp -d mysite.com --dport 37777 -j DNAT --to-destination 192.168.1.2:37777
Если я пытаюсь подключиться из другой сети, служба работает нормально. К сожалению, когда я пытаюсь подключиться изнутри сети, соединение прерывается. Я что-то забыл? Заранее спасибо.
Вам нужен вариант NAT Hairpinning .
Когда клиент изнутри сети пытается получить доступ к общедоступному IP-адресу маршрутизатора, пункт назначения соединение изменится на 192.168.1.2:37777 . Сервер получает начало рукопожатия и отвечает на исходный адрес (все еще клиент) ответом на рукопожатие. Поскольку клиент запоминает только разговор с 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