Я нахожусь в домашней сети с поддержкой NAT (10.0.0.0/8) с моим кабельным модемом, имеющим общедоступный IP 1.1.1.2, и веб-сервером "www" во внутренней сети 10.1.10.2, имеющим порт 80, перенаправленный кабельным модемом.

Теперь я использую настольный клиент (10.1.10.3) для доступа к www из браузера; DNS переводит это в общедоступный IP-адрес веб-сервера 1.1.1.2, и браузер зависает. Это происходит на различных внутренних машинах в моей сети, но отлично работает для клиентов за пределами моей локальной сети.

Кроме того, внутренние клиенты могут войти в 10.1.10.2 в своем браузере и получить доступ к веб-серверу просто отлично.

Вопрос: Есть идеи, почему публичный IP вызывает сбой?

Примечание: я исправил эту проблему, запустив свой собственный DNS (через dnsmasq) и установив "www" в 10.1.10.2, при этом перенаправляя все остальные имена на внешний сервер имен.

1 ответ1

3

Чтобы это работало, ваш маршрутизатор должен поддерживать функцию, называемую шпилькой NAT. По сути, он должен выполнять трансляцию NAT, даже если пакет не передается по интерфейсу WAN (который является интерфейсом, к которому обычно применяется NAT). Некоторые маршрутизаторы поддерживают это, некоторые нет. Linux, к примеру, нет, и многие домашние маршрутизаторы созданы на основе Linux. Вы должны иметь один из тех, кто этого не делает.

Имейте в виду, что даже если работает шпилька NAT, весь трафик в этом сценарии будет проходить через маршрутизатор, тогда как если вы напрямую общаетесь с внутренним IP-адресом веб-сервера, трафик может идти непосредственно на веб-сервер на уровне 2. По этой причине ваше решение dnsmasq лучше. Такое решение не всегда возможно (например, если некоторые хосты за NAT статически настроены на использование сервера имен, отличного от сервера DHCP), но если он работает для вас, вы должны пойти с ним.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .