Вот пример. Некоторые маршрутизаторы, такие как Neufbox4 (маршрутизатор, предоставляемый французским интернет-провайдером) работают под управлением Linux. На этих маршрутизаторах программа "iptables" используется для настройки поведения NAT (iptables - это своего рода нож швейцарской армии для сетей Linux).
Предположим, у вас есть веб-сервер (порт TCP 80) за маршрутизатором, который прослушивает адрес локальной сети 192.168.0.2, и вы добавили для него сопоставление портов (перенаправление). Это означает что-то вроде этого в терминах iptables:
iptables -t nat -A PREROUTING -i wan -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2
Это означает, что «для каждого пакета, который поступает через интерфейс WAN, направленный на TCP-порт 80, отправьте его на 192.168.0.2». Что именно то, что вы хотите. Все хорошо ... пока.
Вы должны понимать, что IP-адрес, связанный с интерфейсом WAN маршрутизатора, является вашим общедоступным интернет-адресом. Например, если ваш IP-адрес в Интернете - 1.2.3.4, то интерфейс WAN на маршрутизаторе имеет IP-адрес 1.2.3.4.
Теперь предположим, что вы пытаетесь получить доступ к своему веб-серверу из локальной сети, например, с вашего персонального компьютера по адресу 192.168.0.3, используя свой собственный интернет-адрес. Например, вы набираете « http://1.2.3.4/ » в своем браузере.
Что происходит, так это то, что ваш компьютер отправит пакет, направленный на 1.2.3.4, TCP-порт 80, по локальной сети. Маршрутизатор получит этот пакет. Но он не будет перенаправлять его на 192.168.0.2. Зачем? Потому что вышеприведенное правило iptables имеет дело только с пакетами, поступающими по интерфейсу WAN, а не из локальной сети!
Так что же будет потом? Ну, это зависит от других сетевых правил на маршрутизаторе. Вообще говоря, произойдет одно из двух:
Либо маршрутизатор увидит пакет, направленный на себя (помните, 1.2.3.4 является одним из IP-адресов маршрутизатора, так что это совершенно нормально). На большинстве маршрутизаторов имеется веб-сервер, прослушивающий порт 80 для интерфейса администрирования. Следовательно, этот веб-сервер будет обрабатывать пакет, а не веб-сервер в вашей локальной сети, и вместо вашего веб-сайта вы получите интерфейс администрирования.
Или маршрутизатор по какой-то причине отбросит пакет, просто потому, что не знает, как обрабатывать пакет, направленный на его адрес WAN на своем порту LAN.
Технически решение очень простое, оно состоит в правиле iptables вида:
iptables -t nat -A PREROUTING -i lan -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2
Это означает, что «для каждого пакета, который поступает через интерфейс LAN, направленный на TCP-порт 80, И с адресом назначения 1.2.3.4, отправьте его на 192.168.0.2». Это то, что вы бы назвали "NAT loopback".
Однако большинство производителей маршрутизаторов, очевидно, не знают об этой проблеме и не включили это правило (или эквивалент в проприетарную систему маршрутизатора) в свой продукт ...