NAT Loopback · Hairpin NAT · Split DNS · DDNS
Почему сайт, NAS или камера открываются снаружи, но не из домашней сети
Типичная ситуация: по мобильному интернету DDNS, NAS, Home Assistant, камера или reverse proxy открываются нормально, а дома по Wi‑Fi тот же внешний адрес не работает. Частая причина — отсутствие или неправильная настройка NAT loopback, также называемого hairpin NAT или NAT reflection. В некоторых сетях правильнее вообще не использовать hairpin NAT, а решить задачу через split DNS.
Как выглядит проблема
Запрос действительно приходит на WAN роутера снаружи и попадает под port forwarding.
Клиент находится внутри LAN, но пытается обратиться к внешнему адресу собственного роутера.
Если по локальному IP сервис открывается, а по внешнему доменному имени внутри дома нет, это очень характерный сценарий для проверки NAT loopback и DNS.
Что такое NAT loopback / hairpin NAT
Hairpin NAT позволяет внутреннему клиенту обратиться к другому внутреннему устройству через внешний IP-адрес или внешнее NAT-отображение роутера.
RFC 4787 прямо описывает hairpinning как ситуацию, когда внутренний узел отправляет трафик на внешнее отображение другого внутреннего узла, а NAT должен корректно вернуть этот трафик обратно внутрь сети.
Почему без hairpin NAT соединение может не работать
Проблема обычно возникает из-за асимметрии пути. Клиент отправляет запрос на публичный IP через роутер. Роутер перенаправляет пакет на локальный сервер, но сервер может попытаться ответить клиенту напрямую по его локальному IP.
Без правильной трансляции состояния соединения TCP-сессия может не установиться.
Для рабочего hairpin NAT обычно нужен не только DNAT/port forwarding, но и корректная source NAT-логика, чтобы ответ сервера вернулся через роутер и прошёл обратную трансляцию.
Split DNS: часто более чистое решение
Вместо того чтобы заставлять локальный трафик ходить к собственному внешнему IP, можно сделать так, чтобы один и тот же домен внутри и снаружи разрешался по-разному.
Доступ идёт через WAN и reverse proxy/port forwarding.
Клиент идёт напрямую к локальному сервису.
Это и есть split DNS или split-horizon DNS. Он особенно удобен, если в сети уже есть локальный DNS-сервер, AdGuard Home, Pi-hole, Unbound или DNS-функции роутера.
Hairpin NAT или split DNS: что лучше
Hairpin NAT
Удобен, когда хочется, чтобы внешний адрес работал одинаково везде без отдельной DNS-зоны.
Split DNS
Убирает лишний NAT для локального трафика и обычно даёт более предсказуемую архитектуру.
VPN
Лучше для сервисов, которые вообще не нужно публиковать в интернет.
Reverse proxy
Удобен для HTTPS-сервисов с единым доменным именем, но всё равно требует правильного DNS/NAT-пути.
Hairpin NAT полезен, когда split DNS недоступен или нужно сохранить единый внешний маршрут.
Как DDNS связан с NAT loopback
DDNS просто связывает доменное имя с текущим внешним IP. Он не решает автоматически, как локальный клиент должен добраться до этого адреса.
Поэтому сообщение «DDNS работает с телефона, но не работает дома» не означает, что сам DDNS неисправен.
CGNAT: отдельная проблема, которую часто путают с hairpin NAT
Если провайдер использует Carrier-Grade NAT, у роутера может не быть собственного публичного IPv4-адреса. В таком случае обычный входящий port forwarding из интернета может вообще не работать.
Внешний сервис уже доступен извне, но локальный клиент не может использовать внешний адрес.
Роутер не получает полноценный публичный IPv4 для входящих соединений.
Если сервис уже открывается через мобильный интернет по публичному IPv4/DDNS, CGNAT как причина именно этого симптома маловероятен.
Reverse proxy и hairpin NAT
Часто внешний 443 порт проброшен не напрямую на NAS или Home Assistant, а на reverse proxy. Тогда hairpin-соединение должно корректно дойти именно до proxy.
Если внутри сети домен разрешается напрямую в backend, а снаружи идёт через proxy, поведение заголовков, сертификатов и авторизации может отличаться. Поэтому split DNS нужно проектировать с учётом того, куда именно должен указывать локальный домен.
HTTPS: почему нельзя просто перейти на локальный IP
Если сертификат выпущен на nas.example.ru, браузер ожидает именно это имя. Переход на https://192.168.1.100 может вызвать ошибку сертификата.
Домен остаётся тем же, сертификат совпадает с именем, но внутри сети DNS возвращает локальный IP.
NAS, Home Assistant и домашние серверы
Для NAS и Home Assistant удобно использовать одно постоянное доменное имя и снаружи, и внутри.
Домен всегда указывает на внешний IP.
Внутри домен указывает на локальный proxy или сервер.
Публичного сервиса вообще нет, домен доступен только после подключения VPN.
Для административных интерфейсов NAS и Home Assistant третий вариант часто безопаснее прямой публикации портов.
IP-камеры и NVR: лучше не решать всё hairpin NAT
Технически можно пробросить порт камеры и использовать NAT loopback, но открывать веб-интерфейс, RTSP или ONVIF каждой камеры в интернет обычно плохая архитектура.
- не публикуйте RTSP каждой камеры без необходимости;
- не открывайте ONVIF наружу;
- для удалённого доступа используйте VPN или защищённый центральный сервис;
- размещайте камеры в отдельной VLAN;
- ограничивайте доступ к их web-интерфейсам.
Когда VPN лучше hairpin NAT и port forwarding
Если сервис нужен только владельцу дома или нескольким доверенным устройствам, нет смысла обязательно делать его публичным.
Нужно защищать сам опубликованный сервис.
После подключения клиент использует локальные адреса или локальный DNS.
WireGuard, Tailscale и другие VPN-схемы часто позволяют полностью убрать необходимость в hairpin NAT для административных сервисов.
Пошаговая диагностика
- Проверьте сервис по локальному IP. Например,
192.168.1.100:443. - Проверьте внешний домен с мобильного интернета.
- Посмотрите, во что домен разрешается внутри LAN.
- Сравните внешний IP домена и WAN-адрес роутера.
- Проверьте port forwarding.
- Проверьте поддержку NAT loopback в роутере.
- Если hairpin включён, проверьте source NAT/masquerade для локального сценария.
- Попробуйте split DNS. Временно направьте домен на локальный IP.
- Проверьте HTTPS-сертификат и reverse proxy.
- После исправления повторите тест из LAN и мобильной сети.
Как понять проблему по результату DNS
Или нужно перейти на split DNS.
Проверяем сам локальный сервис, firewall и HTTPS.
NAT здесь ещё не участвует.
Типичные ошибки
Считать DDNS причиной
DDNS может корректно отдавать внешний IP, а проблема находится в локальном NAT.
Делать только DNAT
Без корректного обратного пути сервер может ответить клиенту напрямую.
Открывать камеры наружу
Hairpin NAT не делает опубликованный сервис безопаснее.
Использовать локальный IP вместо домена
HTTPS-сертификат может перестать совпадать.
Забывать про IPv6
Клиент может предпочесть AAAA-запись и вообще пойти другим путём без IPv4 NAT.
Не учитывать reverse proxy
Split DNS должен указывать туда, где реально завершается HTTPS и маршрутизируется запрос.
Что с IPv6
При нормальной end-to-end IPv6-связности классический NAT loopback обычно не нужен, потому что сервер может иметь собственный глобальный IPv6-адрес. Но firewall всё равно остаётся обязательным, а DNS может содержать одновременно A и AAAA-записи.
Поэтому странная ситуация «на одном устройстве домен работает, на другом нет» иногда объясняется тем, что один клиент использует IPv6, а другой IPv4.
Частые вопросы
Что такое NAT loopback?
Это возможность клиента внутри LAN обратиться к внутреннему серверу через внешний IP/порт собственного NAT-роутера.
Hairpin NAT и NAT reflection — это одно и то же?
В бытовом и администраторском контексте эти термины обычно используют для одного сценария: возврата локального трафика внутрь через внешнее NAT-отображение.
Почему внешний IP работает с телефона, но не по Wi‑Fi?
Если Wi‑Fi находится в той же LAN, роутер может не поддерживать или неправильно обрабатывать NAT loopback. Также возможна проблема локального DNS.
Что лучше: hairpin NAT или split DNS?
Для собственных внутренних сервисов split DNS часто проще и эффективнее, потому что локальный трафик идёт напрямую. Hairpin NAT полезен, если нужно использовать внешнее отображение и нет подходящего DNS-решения.
Нужно ли открывать порт, если используется split DNS?
Для доступа снаружи — да, если вы не используете VPN или другой туннель. Split DNS решает только выбор адреса внутри сети.
Работает ли NAT loopback при CGNAT?
Локальная реализация hairpin NAT на вашем роутере теоретически отдельна от CGNAT, но обычный внешний входящий доступ через публичный IPv4 при CGNAT обычно невозможен без дополнительных решений.
Можно ли решить проблему через VPN?
Да. Для частных административных сервисов VPN часто лучше публикации портов и полностью снимает необходимость обращаться к ним через публичный NAT.
Вывод
Если сайт, NAS, Home Assistant или reverse proxy открываются по внешнему адресу через мобильный интернет, но не работают из домашней сети, сначала проверяйте DNS и NAT loopback.
Hairpin NAT позволяет локальному клиенту использовать внешний IP и затем вернуться через тот же роутер к внутреннему серверу. Но для собственных сервисов часто проще и чище split DNS: внутри домен сразу указывает на локальный адрес, снаружи — на публичный. А для административных сервисов, камер и NAS ещё безопаснее рассмотреть VPN и вообще не публиковать лишние порты.


