Как настроить доступ к IP-камере или серверу по внешнему IP-адресу из локальной сети на роутере Mikrotik?

Системный администратор IT и автоматизация бизнеса
← На главную

При стандартном пробросе портов на маршрутизаторах Mikrotik администраторы часто сталкиваются с ситуацией: из внешней сети интернет доступ к IP-камере, веб-серверу или базе данных работает исправно, но при попытке подключиться к тому же внешнему белому IP-адресу из локальной сети соединение сбрасывается или открывается только панель управления роутера. Разберем, почему возникает эта проблема и как правильно настроить механизм Hairpin NAT (NAT Loopback) в RouterOS.

Выясним причину проблемы (петля NAT и асимметричная маршрутизация)

Проанализируем путь сетевого пакета, когда клиент из внутренней сети пытается обратиться к локальному серверу по внешнему адресу:

  1. Компьютер клиента с адресом 192.168.0.100 отправляет TCP-запрос на внешний белый IP-адрес роутера (например, 1.2.3.4:50).
  2. Маршрутизатор применяет правило dstnat и транслирует адрес получателя в локальный IP-адрес камеры 192.168.0.50:80. При этом адрес отправителя остается прежним — 192.168.0.100.
  3. Камера получает пакет и видит, что отправитель находится в той же локальной подсети 192.168.0.0/24. В соответствии с таблицей маршрутизации камера отправляет ответ клиенту напрямую через локальный коммутатор/бридж, минуя маршрутизатор.
  4. Клиент получает ответный пакет напрямую от 192.168.0.50, но сбрасывает его, так как ожидал ответ от внешнего адреса 1.2.3.4. Сессия разрывается.

Чтобы соединение состоялось, роутер должен подменить не только адрес назначения (Destination IP), но и адрес источника (Source IP) на собственный адрес шлюза. Тогда камера вернет ответ роутеру, а роутер корректно перенаправит его клиенту.

Вариант 1. Пошаговая настройка правил для конкретного устройства

Рассмотрим классический способ настройки трех правил Firewall NAT под конкретный сервис (например, IP-камеру), который помог автору темы. Перейдем в раздел IP -> Firewall -> NAT и добавим следующие правила:

  1. Проброс входящих пакетов из интернета (Внешний Dst-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
    
  2. Перенаправление запросов из локальной сети на камеру (Внутренний Dst-NAT):
    
    /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
    
  3. Подмена адреса источника для локальных запросов (Hairpin Src-NAT):
    
    /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 — локальный адрес маршрутизатора.

Вариант 2. Универсальная схема Hairpin NAT для всех устройств сети

Если в сети находится несколько серверов, видеорегистраторов или сервисов, прописывать индивидуальные правила src-nat под каждый порт неудобно. Рассмотрим универсальную конфигурацию, состоящую всего из двух правил:

  1. Единое универсальное правило Hairpin NAT (Masquerade):

    Создадим общее правило для исходящего локального трафика, идущего обратно в локальную сеть:

    
    /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"
    
  2. Универсальный Dst-NAT (без привязки к входящему интерфейсу):

    В правиле проброса порта вместо жесткой фиксации 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.

  3. Разрешение в Firewall Filter (при наличии строгих правил forward):
    
    /ip firewall filter
    add chain=forward action=accept connection-nat-state=dstnat comment="Allow NAT Traversal"
    

Возможные проблемы с авторизацией на IP-камерах и их решение

Иногда после включения Hairpin NAT веб-интерфейс устройства открывается, но авторизация не проходит или видеопоток не загружается. Проанализируем возможные причины:

  1. Нехватка проброшенных портов: IP-камеры и видеорегистраторы часто используют раздельные порты: веб-интерфейс (порт 80 или 443), медиапоток RTSP (порт 554) и служебный порт управления (например, 8000, 37777). Если проброшен только порт 80, веб-страница загрузится, но модули авторизации и видео не смогут подключиться. Необходимо пробросить все сопутствующие порты.
  2. Ограничение на множественные подключения с одного IP: из-за действия masquerade все клиенты локальной сети обращаются к камере от имени роутера (например, 192.168.0.1). Некоторые прошивки камер сбрасывают сессии при одновременной работе с одного IP-адреса.

Альтернативное решение: Split-DNS

Чтобы избежать двойной нагрузки на процессор маршрутизатора при постоянном транслировании локального трафика, рассмотрим альтернативный подход — Split-DNS:

  1. Привяжем внешний белый IP к доменному имени (например, cam.mydomain.ru).
  2. В настройках локального DNS на Mikrotik (IP -> DNS -> Static) создадим статическую запись, указывающую то же доменное имя на локальный IP-адрес камеры:
    
    /ip dns static
    add name=cam.mydomain.ru address=192.168.0.50
    

В результате клиенты внутри офиса будут обращаться к камере напрямую по локальной сети, минуя преобразования NAT, а внешние клиенты — через интернет по белому адресу.

← На главную