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

9071
FitzRoy

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

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

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

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

Второй вопрос: если маршрутизатор поддерживает «Loopback NAT», что означает, что эта функция изменяется в маршрутизации, чтобы вы могли использовать публичный IP?

4

1 ответ на вопрос

5
Etienne Dechamps

Вот пример. Некоторые маршрутизаторы, такие как 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».

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

Спасибо за быстрый ответ. Ваш ответ прекрасно описывает проблему. Как вы упомянули, «... маршрутизатор по какой-то причине отбросит пакет, просто потому, что не знает, как обрабатывать пакет, направленный на его адрес WAN на своем порту LAN». Что-то, что я хотел бы понять, это «по какой-то причине». Почему маршрутизатор не знает, как обрабатывать пакет, связанный с самим собой. Технически, что на самом деле происходит в этом событии? FitzRoy 14 лет назад 0
Извините, я понятия не имею, почему он отбрасывает пакет. Я думаю, что ответ будет зависеть от модели маршрутизатора и, точнее, его операционной системы. Etienne Dechamps 14 лет назад 0

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