Довольно классическая ситуация: снаружи сайт работает, а из локальной сети по публичному IP или домену не открывается. Пингуется, но HTTPS не отвечает. Или вообще таймаут. Виновник часто один - Hairpin NAT (он же NAT loopback).
▪️ В чем проблема
Допустим:
• Сервер внутри сети:
192.168.1.10• Публичный IP роутера:
203.x.x.x• На роутере настроен проброс
443 → 192.168.1.10Снаружи все ок. Но когда клиент внутри сети обращается к 203.x.x.x, пакет:
1. Уходит на роутер
2. Роутер должен отправить его обратно внутрь
3. Сервер отвечает напрямую клиенту
И тут соединение ломается, потому что NAT не переписывает обратный трафик корректно. В итоге асимметрия маршрута и разрыв сессии.
▪️ Что такое Hairpin NAT
Это механизм, при котором роутер позволяет внутренним клиентам обращаться к внутренним сервисам через внешний IP, корректно делая двойной NAT.
Если функция отключена, то доступ изнутри по внешнему адресу работать не будет.
▪️ Где это встречается
• Домашние роутеры
• MikroTik
• Kubernetes NodePort
• Docker с опубликованными портами
• Облачные VPC
▪️ Как чинить
1️⃣ Включить NAT loopback
Во многих роутерах есть отдельная опция: NAT Loopback / Hairpin NAT / Reflection
2️⃣ Добавить правило SNAT (пример для iptables)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.10 -j MASQUERADE
Это заставляет сервер отвечать обратно через роутер.
3️⃣ Split DNS (самый правильный способ). Во внутреннем DNS сделать:
site.networkadmin.ru → 192.168.1.10
А наружу оставить публичный IP. Это избавляет от NAT-костылей и работает стабильнее.
#network #nat
🧑💻 NetworkAdmin