Назад | Перейти на главную страницу

Почему мне не потребовался резкий NAT с моей настройкой DD-WRT?

Мой старый маршрутизатор 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