Доступ к веб-сайту через IP общественности веб-серверов от ПК в той же LAN

Если две машины находятся на той же LAN (ПК и веб-сервер), почему необходимо позволить ‘обратной петле NAT’ на маршрутизаторе для ПК получить доступ к веб-сайту, размещенному на веб-сервере с помощью IP общественности маршрутизаторов (который порт вперед на порте 80 к веб-серверу)? Эта статья о Динамическом DNS иллюстрирует установку отлично http://www.dyndns.com/support/kb/loopback_connections.html

(В примере они пытаются получить доступ к веб-серверу с помощью URL www.example.com, в целях моего вопроса, это не релевантно, я просто интересуюсь доступом к веб-серверу через общедоступный IP, никакой включенный URL),

Последнее предложение вышеупомянутых чтений статьи: “Если они попытаются получить доступ к компьютеру через имя хоста www.example.com, то маршрутизатор NAT попытается направить это его интерфейс глобальной сети и затем обратно в. В большинстве случаев это или приведет к сбою или возвратит веб-интерфейс для самого маршрутизатора, потому что маршрутизатор не понимает то, что пользователь пытается сделать”.

Кто-либо может предложить техническое объяснение относительно того, почему маршрутизатор запутывается? Что на самом деле происходит с пакетами, после того как они достигают маршрутизатора в этой ситуации, чтобы перепутать его?

Второй вопрос, если маршрутизатор поддерживает ‘Обратную петлю NAT’, что эта функция изменяет в маршрутизации, чтобы позволить Вам использовать общедоступный IP?

4
задан 08.09.2009, 02:20

1 ответ

Вот пример. Некоторые маршрутизаторы, как Neufbox4 (маршрутизатор, обеспеченный французским ISP), запускают 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

Это означает "для каждого пакета, который входит через интерфейс глобальной сети, направленный на порт TCP 80, отправьте его в 192.168.0.2". Который является точно, что Вы хотите. Все в порядке... на данный момент.

Необходимо понять, что IP-адресом, связанным с интерфейсом глобальной сети маршрутизатора, является общедоступный Интернет-адрес. Например, если Ваш интернет-IP 1.2.3.4, то "бледный" интерфейс на маршрутизаторе имеет IP-адрес 1.2.3.4.

Теперь предположите, что Вы пытаетесь получить доступ к своему веб-серверу от Вашей LAN, сказать от Вашего персонального компьютера в адресе 192.168.0.3, с помощью собственного Интернет-адреса. Так, например, Вы вводите "http://1.2.3.4/" в своем браузере.

То, что происходит, - то, что Ваш компьютер отправит пакет, направленный к 1.2.3.4, порт TCP 80, на LAN. Маршрутизатор получит этот пакет. Но это не перенаправит его к 192.168.0.2. Почему? Поскольку iptables управляют только выше соглашений с пакетами, входящими в интерфейсе глобальной сети, не от LAN!

Таким образом, что произойдет затем? Ну, это зависит от других сетевых правил о маршрутизаторе. Вообще говоря, одна из двух вещей произойдет:

  • Любой маршрутизатор будет видеть пакет, направленный на себя (помнят, 1.2.3.4, является одним из IP-адресов маршрутизатора, таким образом, это совершенно нормально). На большинстве маршрутизаторов существует веб-сервер, слушающий на порте 80 для интерфейса администрирования. Следовательно, этот веб-сервер обработает пакет, не веб-сервер на Вашей LAN, и Вы получаете интерфейс администрирования вместо своего веб-сайта.

  • Или маршрутизатор отбросит пакет по некоторым причинам, просто потому что он не знает, как обработать пакет, направленный на его адрес 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".

Однако большинство производителей маршрутизатора, очевидно, не знает о проблеме и не помещало это правило (или эквивалент в маршрутизаторе собственная система) в их продукт...

6
ответ дан 07.12.2019, 20:11

Теги

Похожие вопросы