У меня есть маршрутизатор (на базе OpenWRT) с правилом переадресации портов (DNAT), которое перенаправляет входящие HTTP-запросы на выделенный сервер в моей локальной сети. Вот соответствующие биты конфигурации.
Адреса:
# ip -4 addr show br-lan
5: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 10.196.254.1/24 brd 10.196.254.255 scope global br-lan
valid_lft forever preferred_lft forever
# ip -4 addr show eth0.2
7: eth0.2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 95.84.164.43/22 brd 95.84.167.255 scope global eth0.2
valid_lft forever preferred_lft forever
Правила DNAT (отредактировано для краткости, OpenWRT использует пользовательские цепочки):
# iptables -S -t nat | grep http@stratofortress
-A POSTROUTING -o br-lan -s 10.196.254.0/24 -d 10.196.254.2/32 -p tcp -m tcp --dport 80 -m comment --comment "!fw3: http@stratofortress (reflection)" -j SNAT --to-source 10.196.254.1
-A PREROUTING -i br-lan -s 10.196.254.0/24 -d 95.84.164.43/32 -p tcp -m tcp --dport 80 -m comment --comment "!fw3: http@stratofortress (reflection)" -j DNAT --to-destination 10.196.254.2:80
-A PREROUTING -i eth0.2 -p tcp -m tcp --dport 80 -m comment --comment "!fw3: http@stratofortress" -j DNAT --to-destination 10.196.254.2:80
Эти правила одинаково хорошо работают как для запросов, исходящих из Интернета, так и из локальной сети (благодаря автоматической поддержке «NAT-отражения» OpenWRT).
Однако эти правила не работают, если я попытаюсь сделать запрос от самого маршрутизатора на его адрес WAN:
# nslookup intelfx.name
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: intelfx.name
Address 1: 95.84.164.43
# curl https://intelfx.name
curl: (7) Failed to connect to intelfx.name port 443: Connection refused
Как я могу перехватить пакеты, приходящие от маршрутизатора на WAN-адрес маршрутизатора (95.84.164.43), и DNAT их на машину внутри LAN (10.196.254.2)?
Цепочка nat OUTPUT используется для локально сгенерированных пакетов:
-A OUTPUT -d 95.84.164.43/32 -p tcp -m tcp --dport 80 -m comment --comment "!fw3: http@stratofortress (reflection)" -j DNAT --to-destination 10.196.254.2:80