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

Невозможно пропинговать статический IP-адрес из внутренней сети, только извне

Я запускаю ubuntu, и у меня запущен apache, однако я не могу пинговать свой статический IP-адрес или просматривать http://207.40.XXX.XX веб-сервер, использующий мой статический IP. Я могу только пинговать / просматривать localhost, 127.0.0.1, and 192.168.0.120 ИЛИ 207.40.XXX.XX только из внешнего мира.

# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       my-server.myhost.com my-server

# hostname
my-server

# netstat -tapn
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                  
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:29754         0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN 

Есть идеи, почему это не работает?

Ваш NAT-шлюз не позволяет это делать. Вот как это, вероятно, работает:

пинг

  1. Вы отправляете эхо-запрос ICMP с 192.168.0.5 на 207.40.123.45
  2. Это маршрутизируется через ваш маршрутизатор.
  3. Ваш шлюз NAT внутри вашего маршрутизатора перезаписывает запрос с адреса 207.40.123.45 (это статический IP-адрес)
  4. Ваш маршрутизатор отвечает на запрос ICMP Echo
  5. Поскольку ваш маршрутизатор не поддерживает состояние ICMP, он никогда не передает вам ответ ECHO.

HTTP

  1. Вы отправляете запрос на соединение TCP / 80 с 192.168.0.5 на 207.40.123.45
  2. Это проходит через ваш маршрутизатор
  3. Ваш шлюз NAT перезаписывает пакет как приходящий из 207.40.123.45:41345 к 207.40.123.45:80
  4. Ваш шлюз NAT отмечает, что есть порт, поэтому перенаправляет пакет на 192.168.0.120:80
  5. Сервер по адресу 192.168.0.120 отвечает на попытку подключения от 207.40.123.45:41345
  6. Ваш шлюз NAT видит ответ и переписывает адрес To: в ответе на 192.168.0.5:36311, но оставляет поле From: нетронутым (192.168.0.120:80)
  7. Ваш компьютер с адресом 192.168.0.5 получает пакет от 192.168.0.120, который он никогда не запрашивал, и бросает его на пол.
  8. Ваша связь ослабевает и никогда не открывается ».

Обратите внимание: возможно, причина сбоя ping связана с той же причиной сбоя HTTP. Это называется «NAT Hairpinning».

Вам нужен шлюз NAT, достаточно умный, чтобы на шаге 6 он также перезаписывал источник адрес.

Хотя ответ 1138 правильный, я просто хотел подробно рассказать о том, что такое «шпилька NAT», как она работает и почему она необходима в данном случае. Если вас не интересуют мельчайшие подробности IP, NAT и маршрутизации, не стесняйтесь игнорировать остальную часть моего (довольно длинного) ответа.

Вот что происходит во время попытки HTTP-подключения от клиента локальной сети (192.168.0.5) к веб-серверу через внешний IP-адрес (207.40.123.45), без зацикливания:

  1. 192.168.0.5 отправляет свой SYN-пакет на 207.40.123.45, порт 80. Поскольку 207.40.123.45 не находится в локальной сети, этот пакет отправляется на шлюз по умолчанию (т. Е. На маршрутизатор).

  2. Маршрутизатор, настроенный для пересылки 207.40.123.45:80 на 192.168.0.120:80, перезаписывает адрес назначения пакета на 192.168.0.120, а затем доставляет пакет на веб-сервер.

  3. Веб-сервер получает SYN-пакет и отправляет ответный SYN-ACK-пакет обратно на адрес отправителя, который 192.168.0.5. Поскольку 192.168.0.5 находится в той же сети, веб-сервер доставляет пакет напрямую на 192.168.0.5.

  4. Пакет SYN-ACK от 192.168.0.120 прибывает на 192.168.0.5, но хост там не ожидал SYN-ACK от 192.168.0.120, и поэтому он отбрасывается / отклоняется. Хост с адресом 192.168.0.5 продолжает ждать ответа SYN-ACK от 207.40.123.45, но, конечно, этот пакет никогда не будет доставлен. Попытка подключения в конечном итоге истечет по таймауту, возможно, после нескольких попыток, и в конечном итоге клиент и веб-сервер не смогут установить соединение.

Эта проблема может быть решена маршрутизатором на шаге 2, применяя «шпильку NAT». Короче говоря, решение состоит в том, чтобы обмануть клиента и веб-сервер, чтобы они отправляли их общий трафик через маршрутизатор. Это умно достигается путем применения второй этап NAT на шаге 2 в дополнение к одной фазе, обычно применяемой для перенаправления портов. Вот снова последовательность, на этот раз с добавленным NAT с закреплением волос:

  1. Как и раньше, 192.168.0.5 отправляет свой SYN-пакет, предназначенный для 207.40.123.45, порт 80, на маршрутизатор.

  2. Как и раньше, маршрутизатор получает SYN-пакет и в соответствии с настроенным правилом переадресации портов перезаписывает адрес назначения на 192.168.0.120. На этот раз, однако, маршрутизатор замечает, что он собирается «закрепить» пакет обратно в той же сети, из которой он был получен, поэтому он также перезаписывает пакет. адрес источника на собственный LAN-адрес маршрутизатора (скажем: 192.168.0.1). Затем маршрутизатор доставляет пакет на веб-сервер по адресу 192.168.0.120.

  3. Веб-сервер получает SYN-пакет и отправляет свой ответный SYN-ACK-пакет обратно на адрес отправителя, который на этот раз является 192.168.0.1. Таким образом, ответ возвращается маршрутизатору.

  4. Маршрутизатор получает SYN-ACK от веб-сервера и распознает, что это ответ на пакет, который он недавно обработал NAT (дважды). Таким образом, маршрутизатор послушно меняет оба NAT, и ответный пакет теперь имеет адрес источника 207.40.123.45 и адрес назначения 192.168.0.5. Следовательно, ответ доставляется на адрес 192.168.0.5, подтверждение соединения TCP продолжается, и клиент и веб-сервер могут успешно взаимодействовать.

Таким образом, с поддержкой закрепления в маршрутизаторе хост 192.168.0.5 думает, что он обращается к веб-серверу по адресу 207.40.123.45, а веб-сервер по адресу 192.168.0.120 думает, что он разговаривает с клиентом на самом маршрутизаторе (192.168.0.1). При закреплении весь трафик между двумя хостами проходит через маршрутизатор, даже если оба хоста фактически находятся в одной сети. Очевидно, что это неоптимальное использование сетевых ресурсов, и это основная причина, по которой установка разделенного DNS обычно предпочтительнее, чем полагаться на закрепление.

Какой брандмауэр вы используете? Похоже, что NAT не включен.