При стандартном пробросе портов на маршрутизаторах Mikrotik администраторы часто сталкиваются с ситуацией: из внешней сети интернет доступ к IP-камере, веб-серверу или базе данных работает исправно, но при попытке подключиться к тому же внешнему белому IP-адресу из локальной сети соединение сбрасывается или открывается только панель управления роутера. Разберем, почему возникает эта проблема и как правильно настроить механизм Hairpin NAT (NAT Loopback) в RouterOS.
Проанализируем путь сетевого пакета, когда клиент из внутренней сети пытается обратиться к локальному серверу по внешнему адресу:
192.168.0.100 отправляет TCP-запрос на внешний белый IP-адрес роутера (например, 1.2.3.4:50).dstnat и транслирует адрес получателя в локальный IP-адрес камеры 192.168.0.50:80. При этом адрес отправителя остается прежним — 192.168.0.100.192.168.0.0/24. В соответствии с таблицей маршрутизации камера отправляет ответ клиенту напрямую через локальный коммутатор/бридж, минуя маршрутизатор.192.168.0.50, но сбрасывает его, так как ожидал ответ от внешнего адреса 1.2.3.4. Сессия разрывается.Чтобы соединение состоялось, роутер должен подменить не только адрес назначения (Destination IP), но и адрес источника (Source IP) на собственный адрес шлюза. Тогда камера вернет ответ роутеру, а роутер корректно перенаправит его клиенту.
Рассмотрим классический способ настройки трех правил Firewall NAT под конкретный сервис (например, IP-камеру), который помог автору темы. Перейдем в раздел IP -> Firewall -> NAT и добавим следующие правила:
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.0.50 to-ports=80 protocol=tcp in-interface=ether1-gateway dst-port=50
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.0.50 to-ports=80 protocol=tcp dst-address=1.2.3.4 src-address=192.168.0.0/24 dst-port=50
/ip firewall nat
add chain=srcnat action=src-nat to-addresses=192.168.0.1 protocol=tcp src-address=192.168.0.0/24 dst-address=192.168.0.50 dst-port=80
В параметрах 1.2.3.4 укажем реальный внешний адрес, а в 192.168.0.1 — локальный адрес маршрутизатора.
Если в сети находится несколько серверов, видеорегистраторов или сервисов, прописывать индивидуальные правила src-nat под каждый порт неудобно. Рассмотрим универсальную конфигурацию, состоящую всего из двух правил:
Создадим общее правило для исходящего локального трафика, идущего обратно в локальную сеть:
/ip firewall nat
add chain=srcnat action=masquerade src-address=192.168.0.0/24 dst-address=192.168.0.0/24 comment="Hairpin NAT Universal"
В правиле проброса порта вместо жесткой фиксации in-interface=ether1 укажем внешний IP-адрес в поле dst-address. Это позволит правилу срабатывать как на внешние, так и на внутрисетевые запросы:
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.0.50 to-ports=80 protocol=tcp dst-address=1.2.3.4 dst-port=50 comment="Port Forward Camera"
Если внешний адрес динамический, создадим список адресов /ip firewall address-list через MikroTik Cloud DNS и укажем имя списка в параметре dst-address-list.
/ip firewall filter
add chain=forward action=accept connection-nat-state=dstnat comment="Allow NAT Traversal"
Иногда после включения Hairpin NAT веб-интерфейс устройства открывается, но авторизация не проходит или видеопоток не загружается. Проанализируем возможные причины:
80 или 443), медиапоток RTSP (порт 554) и служебный порт управления (например, 8000, 37777). Если проброшен только порт 80, веб-страница загрузится, но модули авторизации и видео не смогут подключиться. Необходимо пробросить все сопутствующие порты.masquerade все клиенты локальной сети обращаются к камере от имени роутера (например, 192.168.0.1). Некоторые прошивки камер сбрасывают сессии при одновременной работе с одного IP-адреса.Чтобы избежать двойной нагрузки на процессор маршрутизатора при постоянном транслировании локального трафика, рассмотрим альтернативный подход — Split-DNS:
cam.mydomain.ru).
/ip dns static
add name=cam.mydomain.ru address=192.168.0.50
В результате клиенты внутри офиса будут обращаться к камере напрямую по локальной сети, минуя преобразования NAT, а внешние клиенты — через интернет по белому адресу.