mikrotik-wiki.ru
Главная
Загрузка...

NAT и проброс портов на MikroTik

RouterOS 7.xIP11 мин930 мар. 2026 г.
TelegramVK

NAT и проброс портов на MikroTik RouterOS 7.x

NAT (Network Address Translation) — механизм, без которого не работает ни одна домашняя или офисная сеть за роутером. Именно NAT позволяет десяткам устройств в локальной сети выходить в интернет через один публичный IP-адрес, а также открывать доступ к внутренним серверам извне. В этом руководстве разберём все аспекты NAT на MikroTik: от базовой настройки до hairpin NAT и типичных ошибок.

Что такое NAT и зачем он нужен

NAT подменяет адреса в заголовках IP-пакетов при прохождении через маршрутизатор. Есть два основных направления:

  • Source NAT (srcnat) — подмена адреса отправителя. Когда пакет из LAN (192.168.88.0/24) уходит в интернет, роутер заменяет приватный IP на свой публичный. Ответный пакет проходит обратную трансляцию автоматически.
  • Destination NAT (dstnat) — подмена адреса назначения. Когда пакет из интернета приходит на публичный IP роутера с определённым портом, роутер перенаправляет его на внутренний сервер.

В RouterOS обе функции живут в /ip/firewall/nat. Каждое правило принадлежит цепочке: srcnat или dstnat.

Source NAT: masquerade vs src-nat

RouterOS предлагает два действия для исходящего NAT. Выбор между ними зависит от типа вашего подключения к провайдеру.

masquerade — для динамических IP

Masquerade автоматически использует адрес исходящего интерфейса. Если провайдер меняет IP (DHCP, PPPoE), правило продолжает работать без изменений.

[admin@MikroTik] >
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade \
  comment="NAT for LAN"

Особенность masquerade: при смене IP на интерфейсе все текущие трансляции сбрасываются. Для стабильных соединений (VPN-туннели, длинные TCP-сессии) это может быть проблемой.

src-nat — для статических IP

Если провайдер выдал фиксированный IP, лучше использовать action=src-nat с явным указанием адреса. Трансляции не сбрасываются при перезагрузке интерфейса.

[admin@MikroTik] >
/ip/firewall/nat add chain=srcnat out-interface=ether1 \
  action=src-nat to-addresses=203.0.113.5 \
  comment="SNAT static IP"

Когда что использовать

СценарийДействиеПричина
DHCP от провайдераmasqueradeIP меняется
PPPoE подключениеmasqueradeIP назначается динамически
Статический IPsrc-natСтабильнее, не сбрасывает трансляции
Два провайдера (failover)masquerade на каждомIP может меняться при переключении

NAT для конкретной подсети

Если у вас несколько VLAN или подсетей, можно указать src-address:

[admin@MikroTik] >
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for main LAN"

/ip/firewall/nat add chain=srcnat src-address=192.168.99.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for guest VLAN"

Destination NAT — проброс портов пошагово

Проброс портов позволяет направить входящий трафик с определённого порта на внутренний сервер. Алгоритм всегда одинаковый:

  1. Определить протокол (TCP, UDP или оба)
  2. Определить внешний порт (на публичном IP роутера)
  3. Определить внутренний IP-адрес и порт сервера
  4. Создать правило dstnat
  5. Убедиться, что firewall filter разрешает этот трафик в chain=forward

Базовый синтаксис

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=tcp \
  dst-port=<внешний_порт> in-interface=<wan-интерфейс> \
  action=dst-nat to-addresses=<внутренний_IP> to-ports=<внутренний_порт> \
  comment="описание"

Параметр to-ports можно не указывать, если внешний и внутренний порт совпадают.

Практические примеры проброса портов

Веб-сервер (порты 80 и 443)

Проброс HTTP и HTTPS на внутренний сервер 192.168.88.10:

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTP to web server"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=443 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTPS to web server"

Разрешение в firewall:

[admin@MikroTik] >
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80,443 \
  action=accept comment="Allow HTTP/HTTPS to web server" \
  place-before=0

Важно: правило filter нужно разместить до правила drop в chain=forward. Используйте place-before или переместите правило вручную.

IP-камеры (RTSP, HTTP)

Камеры обычно используют порт 554 (RTSP) и HTTP-интерфейс. Если камер несколько, назначайте разные внешние порты:

[admin@MikroTik] >
# Камера 1 — 192.168.88.201
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8001 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=80 \
  comment="Camera 1 HTTP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=5541 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=554 \
  comment="Camera 1 RTSP"

# Камера 2 — 192.168.88.202
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8002 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.202 to-ports=80 \
  comment="Camera 2 HTTP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=5542 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.202 to-ports=554 \
  comment="Camera 2 RTSP"

Разрешение в firewall для всех камер разом:

[admin@MikroTik] >
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.201-192.168.88.210 dst-port=80,554 \
  action=accept comment="Allow cameras" place-before=0

RDP — удалённый рабочий стол (порт 3389)

Проброс RDP на рабочую станцию 192.168.88.50. Рекомендуется использовать нестандартный внешний порт для снижения количества сканирований:

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP non-standard port"

Разрешение с ограничением по источнику (рекомендуется):

[admin@MikroTik] >
/ip/firewall/filter add chain=forward protocol=tcp \
  src-address=198.51.100.0/24 dst-address=192.168.88.50 dst-port=3389 \
  action=accept comment="Allow RDP from trusted network" place-before=0

SSH-сервер (порт 22)

Проброс SSH на Linux-сервер 192.168.88.20 через нестандартный внешний порт:

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=2222 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.20 to-ports=22 \
  comment="SSH to Linux server"

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.20 dst-port=22 \
  action=accept comment="Allow SSH to Linux server" place-before=0

Проброс диапазона портов

Для приложений, требующих диапазон портов (например, SIP/VoIP):

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=udp dst-port=10000-20000 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.30 \
  comment="RTP range for PBX"

Hairpin NAT — доступ к серверу по внешнему IP из LAN

Типичная проблема: вы пробросили порт 80 на внутренний веб-сервер 192.168.88.10. Из интернета сайт открывается, а из локальной сети по внешнему IP — нет. Это происходит потому, что пакет от клиента (192.168.88.100) приходит на сервер (192.168.88.10) с подменённым dst-адресом, но src-адрес остаётся локальным. Сервер отвечает напрямую клиенту, минуя роутер, и клиент отбрасывает ответ — он ждал его от внешнего IP.

Решение — hairpin NAT (он же NAT loopback или NAT reflection). Нужно два дополнительных правила:

[admin@MikroTik] >
# 1. DSTNAT для трафика из LAN на внешний IP роутера
/ip/firewall/nat add chain=dstnat dst-address=203.0.113.5 \
  protocol=tcp dst-port=80 src-address=192.168.88.0/24 \
  action=dst-nat to-addresses=192.168.88.10 \
  comment="Hairpin DSTNAT for web server"

# 2. SRCNAT для того же трафика — подмена src на адрес роутера
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.10 protocol=tcp dst-port=80 \
  action=src-nat to-addresses=192.168.88.1 \
  comment="Hairpin SRCNAT for web server"

Логика работы hairpin NAT:

  1. Клиент 192.168.88.100 отправляет пакет на 203.0.113.5:80
  2. Роутер по правилу dstnat меняет dst на 192.168.88.10
  3. Роутер по правилу srcnat меняет src на 192.168.88.1 (адрес роутера в LAN)
  4. Сервер 192.168.88.10 получает пакет от 192.168.88.1 и отвечает на 192.168.88.1
  5. Роутер выполняет обратную трансляцию и отправляет ответ клиенту

Hairpin-правило dstnat должно стоять выше основного правила проброса, так как оно более специфичное (содержит src-address).

Универсальный hairpin NAT через masquerade

Если серверов много, можно использовать одно обобщённое правило вместо отдельных srcnat для каждого:

[admin@MikroTik] >
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.0/24 action=masquerade \
  comment="Hairpin masquerade for all LAN servers"

Это правило сработает для любого проброшенного порта, когда трафик идёт из LAN в LAN. Минус — все соединения на сервере будут приходить от адреса роутера, реальный IP клиента будет скрыт.

Netmap — трансляция подсетей

Action netmap транслирует адреса 1:1, сохраняя хостовую часть. Полезно при объединении сетей с одинаковой адресацией или при миграции.

[admin@MikroTik] >
# Трансляция всей подсети 10.0.0.0/24 -> 192.168.88.0/24
/ip/firewall/nat add chain=dstnat dst-address=10.0.0.0/24 \
  action=netmap to-addresses=192.168.88.0/24 \
  comment="Netmap 10.0.0.0/24 to 192.168.88.0/24"

Пакет на адрес 10.0.0.15 будет перенаправлен на 192.168.88.15 — хостовая часть (.15) сохраняется. Netmap часто используется в site-to-site VPN, когда обе стороны имеют пересекающиеся адресные пространства.

Проверка работы NAT

Просмотр правил NAT

[admin@MikroTik] >
/ip/firewall/nat print

Подробный вывод с счётчиками пакетов и байтов:

[admin@MikroTik] >
/ip/firewall/nat print stats

Если счётчик у правила растёт — трафик проходит через правило. Если счётчик нулевой — правило не срабатывает, и нужно проверять условия.

Просмотр активных трансляций

[admin@MikroTik] >
/ip/firewall/connection print where nat

Эта команда покажет все текущие соединения, прошедшие через NAT. Полезно для диагностики — видно src-address, dst-address, reply-src и reply-dst.

Проверка извне

Самый надёжный способ — проверить подключение с внешнего устройства. Для веб-сервера:

[admin@MikroTik] >
# С другого MikroTik или Linux-машины:
/tool/fetch url="http://203.0.113.5" mode=http

Для произвольного порта можно использовать /tool/torch на wan-интерфейсе:

[admin@MikroTik] >
/tool/torch interface=ether1 src-address=0.0.0.0/0 dst-address=0.0.0.0/0 \
  protocol=tcp dst-port=80

Torch покажет трафик в реальном времени — полезно для отладки, когда непонятно, доходят ли пакеты до роутера.

Логирование NAT-правил

Добавьте log-правило перед основным, чтобы увидеть каждый пакет:

[admin@MikroTik] >
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=log log-prefix="NAT-DEBUG" \
  comment="Debug: log port 80 incoming"

Просмотр логов:

[admin@MikroTik] >
/log print where message~"NAT-DEBUG"

Не забудьте удалить или отключить log-правило после отладки — логирование каждого пакета создаёт нагрузку.

Порядок правил NAT

Правила NAT обрабатываются сверху вниз, первое совпавшее правило применяется. Рекомендуемый порядок:

  1. Hairpin dstnat — специфичные правила для LAN-трафика (содержат src-address)
  2. Dstnat — проброс портов извне
  3. Srcnat / masquerade — исходящий NAT

Для изменения порядка:

[admin@MikroTik] >
# Переместить правило номер 5 на первое место
/ip/firewall/nat move 5 destination=0

Безопасность: что НЕ пробрасывать

ВНИМАНИЕ: Никогда не пробрасывайте порты управления MikroTik в интернет!

Следующие порты категорически нельзя открывать на WAN-интерфейс:

ПортСервисРиск
8291WinboxПолный доступ к роутеру
8728APIПрограммное управление роутером
8729API-SSLТо же, через SSL
22 (на роутере)SSHКонсоль управления
23TelnetНезашифрованный доступ
80 (на роутере)WebFigВеб-интерфейс управления
443 (на роутере)WebFig SSLТо же, через SSL

Если нужен удалённый доступ к роутеру — используйте VPN (WireGuard, IPsec, L2TP). Подключаетесь к VPN, попадаете в LAN и работаете через Winbox по внутреннему адресу.

Дополнительные меры безопасности для проброшенных портов

Ограничивайте доступ по IP источника, когда это возможно:

[admin@MikroTik] >
# Проброс RDP только с IP офиса
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 src-address=198.51.100.10 \
  action=dst-nat to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP from office only"

Используйте address-list для группировки доверенных адресов:

[admin@MikroTik] >
/ip/firewall/address-list add list=trusted-rdp address=198.51.100.10 \
  comment="Office IP"
/ip/firewall/address-list add list=trusted-rdp address=203.0.113.20 \
  comment="Admin home IP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 src-address-list=trusted-rdp \
  action=dst-nat to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP from trusted IPs"

Типичные ошибки при настройке NAT

1. Не указан in-interface в dstnat

[admin@MikroTik] >
# НЕПРАВИЛЬНО — сработает для трафика из LAN тоже
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  action=dst-nat to-addresses=192.168.88.10

# ПРАВИЛЬНО — только из интернета
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10

Без in-interface правило перехватывает весь трафик на порт 80, включая локальный. Это может сломать доступ к WebFig роутера или вызвать петли маршрутизации.

2. Firewall блокирует проброшенный трафик

Проброс настроен, но трафик не доходит до сервера. Причина — правила filter в chain=forward отбрасывают пакеты. NAT выполняется до filter, поэтому в правилах filter нужно указывать внутренний адрес назначения (после трансляции).

[admin@MikroTik] >
# В filter проверяем уже транслированный адрес
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80 \
  action=accept place-before=0

3. Masquerade на всех интерфейсах

[admin@MikroTik] >
# НЕПРАВИЛЬНО — NAT будет применяться к трафику между VLAN
/ip/firewall/nat add chain=srcnat action=masquerade

# ПРАВИЛЬНО — только на WAN
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade

Без указания out-interface masquerade сработает для трафика между локальными интерфейсами, что приведёт к потере реальных IP-адресов в логах серверов и проблемам с маршрутизацией.

4. Неправильный порядок правил

Hairpin-правило стоит ниже основного dstnat. В результате пакеты из LAN совпадают с основным правилом (без srcnat), и hairpin не работает.

[admin@MikroTik] >
# Проверьте порядок
/ip/firewall/nat print

# Переместите hairpin-правило выше
/ip/firewall/nat move [find comment~"Hairpin"] destination=0

5. Проброс порта, занятого роутером

Если на роутере запущен DNS (порт 53), SSH (порт 22) или другой сервис, проброс этого порта не сработает — пакет будет обработан сервисом роутера до NAT. Решения:

  • Переназначить сервис роутера на другой порт: /ip/service set ssh port=2222
  • Использовать другой внешний порт для проброса
  • Отключить ненужный сервис на роутере

6. Забытый dst-port в dstnat

[admin@MikroTik] >
# НЕПРАВИЛЬНО — перенаправит ВЕСЬ TCP-трафик на сервер
/ip/firewall/nat add chain=dstnat protocol=tcp \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10

# ПРАВИЛЬНО — только порт 80
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10

Полная конфигурация NAT для типового офиса

Соберём всё вместе. Допустим: WAN на ether1 (DHCP), LAN на bridge (192.168.88.0/24), веб-сервер на .10, IP-камера на .201, Linux-сервер с SSH на .20.

[admin@MikroTik] >
# === Source NAT ===
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade \
  comment="Main NAT for LAN"

# === Hairpin masquerade ===
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.0/24 action=masquerade \
  comment="Hairpin masquerade"

# === Destination NAT ===
# Веб-сервер
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTP to web server"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=443 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTPS to web server"

# IP-камера (нестандартные внешние порты)
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8001 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=80 \
  comment="Camera HTTP"

# SSH на Linux-сервер (нестандартный порт)
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=2222 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.20 to-ports=22 \
  comment="SSH to Linux server"

# === Firewall filter — разрешение проброшенного трафика ===
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80,443 \
  action=accept comment="Allow web server" place-before=0

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.201 dst-port=80 \
  action=accept comment="Allow camera" place-before=0

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.20 dst-port=22 \
  action=accept comment="Allow SSH to Linux" place-before=0

Итоги

  • Используйте masquerade для динамических IP, src-nat для статических
  • Всегда указывайте in-interface в правилах dstnat
  • Не забывайте разрешать проброшенный трафик в firewall filter (chain=forward)
  • Настройте hairpin NAT, если к серверу нужен доступ из LAN по внешнему IP
  • Используйте нестандартные внешние порты для RDP, SSH, камер — это снижает количество автоматических сканирований
  • Никогда не пробрасывайте порты управления роутером (8291, 8728, 8729) — для удалённого доступа используйте VPN
  • Проверяйте работу через print stats и connection print перед тем, как закончить настройку
[admin@MikroTik] >
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade \
  comment="NAT for LAN"
/ip/firewall/nat add chain=srcnat out-interface=ether1 \
  action=src-nat to-addresses=203.0.113.5 \
  comment="SNAT static IP"
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for main LAN"

/ip/firewall/nat add chain=srcnat src-address=192.168.99.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for guest VLAN"
/ip/firewall/nat add chain=dstnat protocol=tcp \
  dst-port=<внешний_порт> in-interface=<wan-интерфейс> \
  action=dst-nat to-addresses=<внутренний_IP> to-ports=<внутренний_порт> \
  comment="описание"
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTP to web server"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=443 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTPS to web server"
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80,443 \
  action=accept comment="Allow HTTP/HTTPS to web server" \
  place-before=0
# Камера 1 — 192.168.88.201
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8001 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=80 \
  comment="Camera 1 HTTP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=5541 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=554 \
  comment="Camera 1 RTSP"

# Камера 2 — 192.168.88.202
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8002 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.202 to-ports=80 \
  comment="Camera 2 HTTP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=5542 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.202 to-ports=554 \
  comment="Camera 2 RTSP"
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.201-192.168.88.210 dst-port=80,554 \
  action=accept comment="Allow cameras" place-before=0
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP non-standard port"
/ip/firewall/filter add chain=forward protocol=tcp \
  src-address=198.51.100.0/24 dst-address=192.168.88.50 dst-port=3389 \
  action=accept comment="Allow RDP from trusted network" place-before=0
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=2222 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.20 to-ports=22 \
  comment="SSH to Linux server"

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.20 dst-port=22 \
  action=accept comment="Allow SSH to Linux server" place-before=0
/ip/firewall/nat add chain=dstnat protocol=udp dst-port=10000-20000 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.30 \
  comment="RTP range for PBX"
# 1. DSTNAT для трафика из LAN на внешний IP роутера
/ip/firewall/nat add chain=dstnat dst-address=203.0.113.5 \
  protocol=tcp dst-port=80 src-address=192.168.88.0/24 \
  action=dst-nat to-addresses=192.168.88.10 \
  comment="Hairpin DSTNAT for web server"

# 2. SRCNAT для того же трафика — подмена src на адрес роутера
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.10 protocol=tcp dst-port=80 \
  action=src-nat to-addresses=192.168.88.1 \
  comment="Hairpin SRCNAT for web server"
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.0/24 action=masquerade \
  comment="Hairpin masquerade for all LAN servers"
# Трансляция всей подсети 10.0.0.0/24 -> 192.168.88.0/24
/ip/firewall/nat add chain=dstnat dst-address=10.0.0.0/24 \
  action=netmap to-addresses=192.168.88.0/24 \
  comment="Netmap 10.0.0.0/24 to 192.168.88.0/24"
/ip/firewall/nat print
/ip/firewall/nat print stats
/ip/firewall/connection print where nat
# С другого MikroTik или Linux-машины:
/tool/fetch url="http://203.0.113.5" mode=http
/tool/torch interface=ether1 src-address=0.0.0.0/0 dst-address=0.0.0.0/0 \
  protocol=tcp dst-port=80
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=log log-prefix="NAT-DEBUG" \
  comment="Debug: log port 80 incoming"
/log print where message~"NAT-DEBUG"
# Переместить правило номер 5 на первое место
/ip/firewall/nat move 5 destination=0
# Проброс RDP только с IP офиса
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 src-address=198.51.100.10 \
  action=dst-nat to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP from office only"
/ip/firewall/address-list add list=trusted-rdp address=198.51.100.10 \
  comment="Office IP"
/ip/firewall/address-list add list=trusted-rdp address=203.0.113.20 \
  comment="Admin home IP"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=13389 \
  in-interface=ether1 src-address-list=trusted-rdp \
  action=dst-nat to-addresses=192.168.88.50 to-ports=3389 \
  comment="RDP from trusted IPs"
# НЕПРАВИЛЬНО — сработает для трафика из LAN тоже
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  action=dst-nat to-addresses=192.168.88.10

# ПРАВИЛЬНО — только из интернета
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10
# В filter проверяем уже транслированный адрес
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80 \
  action=accept place-before=0
# НЕПРАВИЛЬНО — NAT будет применяться к трафику между VLAN
/ip/firewall/nat add chain=srcnat action=masquerade

# ПРАВИЛЬНО — только на WAN
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade
# Проверьте порядок
/ip/firewall/nat print

# Переместите hairpin-правило выше
/ip/firewall/nat move [find comment~"Hairpin"] destination=0
# НЕПРАВИЛЬНО — перенаправит ВЕСЬ TCP-трафик на сервер
/ip/firewall/nat add chain=dstnat protocol=tcp \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10

# ПРАВИЛЬНО — только порт 80
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10
# === Source NAT ===
/ip/firewall/nat add chain=srcnat out-interface=ether1 action=masquerade \
  comment="Main NAT for LAN"

# === Hairpin masquerade ===
/ip/firewall/nat add chain=srcnat src-address=192.168.88.0/24 \
  dst-address=192.168.88.0/24 action=masquerade \
  comment="Hairpin masquerade"

# === Destination NAT ===
# Веб-сервер
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=80 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTP to web server"

/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=443 \
  in-interface=ether1 action=dst-nat to-addresses=192.168.88.10 \
  comment="HTTPS to web server"

# IP-камера (нестандартные внешние порты)
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=8001 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.201 to-ports=80 \
  comment="Camera HTTP"

# SSH на Linux-сервер (нестандартный порт)
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=2222 \
  in-interface=ether1 action=dst-nat \
  to-addresses=192.168.88.20 to-ports=22 \
  comment="SSH to Linux server"

# === Firewall filter — разрешение проброшенного трафика ===
/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.10 dst-port=80,443 \
  action=accept comment="Allow web server" place-before=0

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.201 dst-port=80 \
  action=accept comment="Allow camera" place-before=0

/ip/firewall/filter add chain=forward protocol=tcp \
  dst-address=192.168.88.20 dst-port=22 \
  action=accept comment="Allow SSH to Linux" place-before=0
IP / NAT и проброс портов на MikroTik