Мой старый маршрутизатор DD-WRT умирал, поэтому я схватил UniFi EdgeRouter, который стилистически больше похож на «настоящий маршрутизатор». У меня есть различные общедоступные IP-адреса, для которых настроен NAT 1-к-1, т.е. внутренняя система имеет IP-адрес 192.168.123.134, и любые внешние запросы к 173.13.139.236 переводятся на внутренний IP-адрес и обратно.
В новом маршрутизаторе мне пришлось дополнительно настроить правила NAT, чтобы внутренние системы могли достичь 173.13.139.236, переводя их запросы на внутренний IP-адрес, но с источник IP на маршрутизаторе (т.е. замаскированный NAT).
(Конкретная проблема, насколько я понимаю, заключается в том, что если вы просто NAT пакет, который из внутренний адрес, так что его место назначения также к внутренний адрес, тогда ответ просто возвращается непосредственно запрашивающей стороне, но запрашивающая сторона отправила свой пакет маршрутизатор, поэтому, когда он видит, что ответ пришел от не-маршрутизатора, он отбрасывает пакет как недействительный.)
С моим маршрутизатором DD-WRT мне не нужно было применять правило шпильки NAT, и я не понимаю, почему.
В частности, вся конфигурация для этого IP в моей системе DD-WRT, насколько мне известно !, была:
iptables -t nat -I PREROUTING -d 173.13.139.236 -j DNAT --to 192.168.123.134
iptables -t nat -I POSTROUTING -s 192.168.123.134 -j SNAT --to 173.13.139.236
iptables -I FORWARD -d 192.168.123.134 -j ACCEPT
Это действительно сработало. Действительно, это работало годами. Зачем?
Вполне возможно, что в настройке DD-WRT есть какая-то другая конфигурация, которая справляется с этим, но если она есть, я не знаю, где она будет; Я просмотрел весь config, когда я сменил маршрутизатор, и я не увидел ничего, связанного с этими IP-адресами.
Я думаю, что интерфейс DD-WRT использовал термин «Перенаправление NAT в Интернете» для исправления проблем с жестким NAT, который был активен по умолчанию, и поскольку он, вероятно, «просто работал, как ожидалось», вы просто не знали о его существовании.
Вместо конкретных IP-адресов (и номеров портов), что, вероятно, было выполнено в / с iptables с общим и не очень очевидным правилом для трафика к WAN интерфейс (не обязательно указывается по IP-адресу), исходящий из ваших сетей / интерфейсов LAN или с аналогичным эффектом, для трафика, НЕ исходящего из WAN.
Подумайте о
insmod ipt_mark
insmod xt_mark
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE
Источник: https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=545301
Следуя некоторым потокам, заложенным в ответе HBruijn, и некоторым сбросам iptables с самого маршрутизатора, я думаю, что нашел его. Я бы не смог туда добраться без ответа HBruijn, но он был не на том уровне детализации, который мне нужен, поэтому я решил поделиться.
https://svn.dd-wrt.com/ticket/1868 - это отчет об ошибке, связанный с нарушением обратной связи, и в нем приводится пример простой команды:
iptables -t nat -I POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE
В ряде мест упоминался конкретный вариант, например https://forum.dd-wrt.com/phpBB2/viewtopic.php?t=82919&postdays=0&postorder=dsc&start=0 :
В вашем веб-интерфейсе в разделе Безопасность> Брандмауэр
Убедитесь, что флажок «Фильтр перенаправления WAN NAT» не установлен?
Что привело меня к https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=643132 , который показывает конкретные изменения, вызываемые этой опцией, которые я смог подтвердить непосредственно на собственном маршрутизаторе.
При снятом флажке «Фильтр перенаправления WAN NAT»:
root@Basement Router:~# iptables -L -v -n -t nat
Chain PREROUTING (policy ACCEPT 2438 packets, 173K bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.237 to:192.168.123.133
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.236 to:192.168.123.134
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.235 to:192.168.123.132
0 0 DNAT icmp -- * * 0.0.0.0/0 173.13.139.233 to:192.168.123.254
0 0 TRIGGER 0 -- * * 0.0.0.0/0 173.13.139.233 TRIGGER type:dnat match:0 relate:0
Chain POSTROUTING (policy ACCEPT 3 packets, 174 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT 0 -- * * 192.168.123.133 0.0.0.0/0 to:173.13.139.237
0 0 SNAT 0 -- * * 192.168.123.134 0.0.0.0/0 to:173.13.139.236
0 0 SNAT 0 -- * * 192.168.123.132 0.0.0.0/0 to:173.13.139.235
2444 140K SNAT 0 -- * vlan1 0.0.0.0/0 0.0.0.0/0 to:173.13.139.233
0 0 RETURN 0 -- * br0 0.0.0.0/0 0.0.0.0/0 PKTTYPE = broadcast
1 339 MASQUERADE 0 -- * br0 192.168.123.0/24 192.168.123.0/24
Chain OUTPUT (policy ACCEPT 847 packets, 55575 bytes)
pkts bytes target prot opt in out source destination
Если установлен флажок «Фильтр WAN NAT Redirection»:
root@Basement Router:~# iptables -L -v -n -t nat
Chain PREROUTING (policy ACCEPT 957 packets, 64933 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.237 to:192.168.123.133
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.236 to:192.168.123.134
0 0 DNAT 0 -- * * 0.0.0.0/0 173.13.139.235 to:192.168.123.132
0 0 DNAT icmp -- * * 0.0.0.0/0 173.13.139.233 to:192.168.123.254
0 0 TRIGGER 0 -- * * 0.0.0.0/0 173.13.139.233 TRIGGER type:dnat match:0 relate:0
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT 0 -- * * 192.168.123.133 0.0.0.0/0 to:173.13.139.237
0 0 SNAT 0 -- * * 192.168.123.134 0.0.0.0/0 to:173.13.139.236
0 0 SNAT 0 -- * * 192.168.123.132 0.0.0.0/0 to:173.13.139.235
1025 57947 SNAT 0 -- * vlan1 0.0.0.0/0 0.0.0.0/0 to:173.13.139.233
0 0 DROP 0 -- * br0 192.168.123.0/24 192.168.123.0/24
Chain OUTPUT (policy ACCEPT 348 packets, 22743 bytes)
pkts bytes target prot opt in out source destination
Разница в том, что если он не отмечен, он имеет:
Chain POSTROUTING (policy ACCEPT 3 packets, 174 bytes)
pkts bytes target prot opt in out source destination
1 339 MASQUERADE 0 -- * br0 192.168.123.0/24 192.168.123.0/24
, и если он проверен, это становится правилом DROP.
Итак, если я правильно понимаю, что здесь происходит, с не отмеченным флажком "Filter WAN NAT Redirection" (который, похоже, ничего не делает), то, что на самом деле происходит, как вы все сказали, является поведением по умолчанию маскировки маршрутизатора каждый подключение к локальной сети, поступающее с любого порта, отличного от WAN.
Таким образом, соединение со случайным DHCP-адресом, в моем случае, скажем, 192.168.123.10, с одним из моих статических IP-адресов, скажем, 173.13.139.236, будет следующим:
192.168.123.10 -> 173.13.139.236
After PREROUTING: 192.168.123.10 -> 192.168.123.134
After POSTROUTING: 192.168.123.254 [that's the router] on some high port -> 192.168.123.134
А потом ответный пакет:
192.168.123.134 -> 192.168.123.254/high-port
After ... whatever un-does MASQUERADE: 192.168.123.134 -> 192.168.123.10
After PREROUTING: 173.13.139.236 -> 192.168.123.10