Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Проблемы с конфигурацией NAT Hairpin

    Проблемы с конфигурацией NAT Hairpin

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Проблемы с конфигурацией NAT Hairpin, RouterOS
     
    OctarineGlow
    Guest
    #1
    0
    17.01.2024 22:31:00
    На прошлой неделе я решил заняться хобби — настроить собственный сайт на selfhosted. Документация по настройке DNAT сработала идеально, и адрес сайта отлично разрешается вне моей локальной сети, но вот с пониманием hairpin NAT возникли сложности. В документации пример такой:

    /ip firewall nat add chain=dstnat action=dst-nat dst-address=172.16.16.1 dst-port=443 to-addresses=10.0.0.3 to-ports=443 protocol=tcp  
    /ip firewall nat add action=masquerade chain=srcnat dst-address=10.0.0.3 out-interface=LAN protocol=tcp src-address=10.0.0.0/24

    Здесь 10.0.0.3/24 — это сервер, а 172.16.16.1/24 — публичный IP роутера. Первая часть у меня уже работает, но что такое 10.0.0.0/24? Насколько я понимаю, суть hairpin в том, чтобы скрыть источник возвращающихся пакетов с сервера под тот же IP, с которого пришел исходный запрос. Однако я толком этого не понимаю. Когда я добавляю правило hairpin на роутере, что должно быть в src-address: 10.0.0.0, 192.168.88.0 или что-то другое? И почему именно так, если не сложно объяснить.

    Роутер — новый hAP ac3 с заводским RouterOS. Есть стандартное правило masquerade и проброшенный порт.
     
     
     
    lmagyar
    Guest
    #2
    0
    20.10.2024 09:20:00
    Спасибо за этот пост, я несколько часов боролся с этой проблемой hairpinning, и ничто не работало. Совет для тех, кто столкнется с этим позже: если вы изначально настроили проброс портов через QuickSet, то нужно ДОБАВИТЬ правило маскарадинга, которое видно выше, после правила маскарадинга defconf (оно обрабатывает возвращающиеся пакеты, а defconf — исходящие). Также нужно ИЗМЕНИТЬ правило dst-nat, созданное QuickSet, содержащее in-interface-list=WAN, на правило dst-nat, которое указано выше (это позволит форвардить порт не только с WAN, но и внутри LAN).
     
     
     
    anav
    Guest
    #3
    0
    20.10.2024 16:40:00
    Верно, hairpin NAT обычно применяется, когда пользователи находятся в той же подсети, что и сервер, но пытаются обратиться к серверу через DYNDNS-адрес роутера (то есть по WANIP роутера, так же, как это делают внешние пользователи), вместо того чтобы просто использовать LANIP сервера. В лучшем случае, если нельзя использовать LANIP, просто переведите пользователей или сервер в другую подсеть или VLAN — и hairpin NAT больше не понадобится.

    Другой вариант — использовать Wireguard VPN, тогда входящие пользователи смогут безопасно подключаться к LAN-серверу, и открывать порты не потребуется. Ещё один вариант — Zerotier.

    Если по какой-то причине это невозможно, убедитесь, что выполняется одно из следующих условий:

    A. Правила цепочки forward для перенаправления портов изменены с дефолтных:

    add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

    TO

    add action=accept chain=forward comment="internet access" in-interface-list=LAN out-interface-list=WAN

    add action=accept chain=forward comment="port forwarding" connection-nat-state=dstnat

    add action=drop chain=forward comment="Drop all else"

    Мы включаем перенаправление портов с отдельным, чётко определённым правилом, которое позволяет трафик перенаправления портов и из LAN, и из WAN. Это заменяет подход «принимать всё, сбрасывать что-то» на более безопасный — разрешать интернет, порт-форвардинг, а всё остальное сбрасывать.

    B. Убедитесь, что у вас есть правило source NAT, которое гарантирует, что исходный запрос возвращается по тому же пути, по которому пришёл, а не напрямую с сервера пользователю:

    add action=masquerade chain=srcnat src-address=serverSubnet dst-address=serverSubnet

    Эти диаграммы отлично это иллюстрируют: https://gregsowell.com/?p=4242

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++­++++++++++++++++++++++

    Другие сложности возникают, если WANIP — динамический публичный IP, а не статический, но это не тема данной ветки.

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++­++++++++++++++++++++++

    Ещё один вариант, как отметил Tangent: «Hairpinning — штука сложная. Лично я его избегаю. На одном из роутеров MT настраиваю локальный DNS-сервер для LAN и даю внутренним хостам внутренние имена». Это позволяет решить задачу для внутреннего трафика (и тогда правило hairpin NAT с srcnat не потребуется) с помощью DNS (благодаря rextended и Zerobyte).

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

    a. сначала статические записи,  
    b. потом статические с использованием regexp,  
    c. потом остальные...

    /ip dns static add address=192.168.88.68 regexp="(^|www\.)myserver\.net$" ttl=5m

    Это правило говорит роутеру, что для любого DNS-запроса на домен www.myserver.net не нужно обращаться к динамическим, кэшированным или внешним DNS-серверам — запрос сразу направляется на LAN IP нашего сервера.

    (i) Убедитесь, что в /IP DNS включена опция «allow remote request»,  
    (ii) Проверьте, чтобы не было других статических записей с более высоким приоритетом,  
    (iii) И подтвердите, что весь входящий трафик (или хотя бы из WAN) сбрасывается — DNS запросы с WAN никогда не должны быть разрешены.
     
     
     
    anav
    Guest
    #4
    0
    20.10.2024 17:05:00
    Octarine, важно понимать ограничения вашего подхода.  
    /ip nat add chain=dstnat action=dst-nat to-addresses=<192.168.88.XX - server-lanip> protocol=tcp dst-address=!192.168.88.1 dst-address-type=local dst-port=80  
    add chain=srcnat action=masquerade src-address=192.168.88.0/24 dst-address=192.168.88.0/24  

    По сути, вы говорите роутеру делать destination NAT на локальный интерфейс для локальных пользователей, но при этом запрещаете роутеру использовать интерфейс локальной подсети (192.168.88.1). Остаётся только один другой локальный интерфейс — WAN.  

    ОГРАНИЧЕНИЕ Очевидное: роутер может видеть только локальный WAN-интерфейс, потому что вы запретили единственный интерфейс локальной подсети. Теперь это не сработает, если у вас две подсети или больше, потому что роутер тогда выберет другую подсеть. В этом случае придётся создавать dst-address-list для двух и более подсетей.  
    Возможно, можно составить список локальных шлюзов подсетей, чтобы обойти эту проблему…  

    Скрытое ОГРАНИЧЕНИЕ: если у вас несколько WAN-интерфейсов, тогда неизвестно, как будут влиять другие правила — манглинг, специальные таблицы, аварийное переключение и прочее.
     
     
     
    wbarnard81
    Guest
    #5
    0
    02.05.2025 06:54:00
    Всем доброе утро. Извиняюсь, что пишу в старой ветке, но именно тут мне лучше всего объяснили hairpin NAT, а всё равно у меня не получается это настроить. Я читал и другие темы, но всё равно не получается разобраться. Мой роутер настроен через Quick Set. Есть несколько статических DHCP-записей, но кроме этого и изменений в /ip firewall — всё должно быть стандартно.

    Все правила NAT:  
    /ip firewall nat  
    add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN  
    add action=dst-nat chain=dstnat comment="HTTP to NPM" dst-address=!192.168.1.1 dst-address-type=local dst-port=80 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.20 to-ports=80  
    add action=dst-nat chain=dstnat comment="HTTPS to NPM" dst-address=!192.168.1.1 dst-address-type=local dst-port=443 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.20 to-ports=443  
    add action=masquerade chain=srcnat dst-address=192.168.1.0/24 src-address=192.168.1.0/24

    Все правила фильтрации:  
    /ip firewall filter  
    add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked  
    add action=accept chain=forward comment="port forwarding" connection-nat-state=dstnat  
    add action=accept chain=forward in-interface=bridge out-interface=ether1  
    add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid  
    add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp  
    add action=accept chain=input comment="defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1  
    add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN  
    add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec  
    add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec  
    add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related hw-offload=yes  
    add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked  
    add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid  
    add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

    Так как я уже перепробовал кучу вариантов, возможно, что-то здесь не так. Но, пожалуйста, подскажите, что я делаю не так.

    P.S. Извиняюсь, не понимаю, почему второй блок кода отображается некорректно. Для удобства я заменил его на цитату.
     
     
     
    jaclaz
    Guest
    #6
    0
    02.05.2025 08:28:00
    На будущее: иногда блок кода отображается некорректно, если он слишком «близко» к предыдущему. В таких случаях просто добавь один-два переноса строки после предыдущего блока кода. Чтобы сохранить всю информацию как можно более связной, ветка с очень полезными данными и пост от Sob, на который я изначально ссылался, всё ещё доступна через Wayback Machine: https://web.archive.org/web/20240105203616/https://forum.mikrotik.com/viewtopic.php?t=179343 https://web.archive.org/web/20240105203616/https://forum.mikrotik.com/viewtopic.php?t=179343#p892135 Пока, надеюсь, кто-то из экспертов по правилам hairpin скоро проверит твою конфигурацию, можешь сам с ней ознакомиться.
     
     
     
    wbarnard81
    Guest
    #7
    0
    02.05.2025 10:18:00
    @jaclaz Спасибо, с форматированием всё получилось. Я сейчас изучаю эти две ссылки. Если я снова ничего не выложу, значит, я всё ещё не разобрался и буду ждать, пока другие ГУРУ посмотрят.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры