NAT и проброс портов на MikroTik
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 от провайдера | masquerade | IP меняется |
| PPPoE подключение | masquerade | IP назначается динамически |
| Статический IP | src-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 — проброс портов пошагово
Проброс портов позволяет направить входящий трафик с определённого порта на внутренний сервер. Алгоритм всегда одинаковый:
- Определить протокол (TCP, UDP или оба)
- Определить внешний порт (на публичном IP роутера)
- Определить внутренний IP-адрес и порт сервера
- Создать правило dstnat
- Убедиться, что 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:
- Клиент 192.168.88.100 отправляет пакет на 203.0.113.5:80
- Роутер по правилу dstnat меняет dst на 192.168.88.10
- Роутер по правилу srcnat меняет src на 192.168.88.1 (адрес роутера в LAN)
- Сервер 192.168.88.10 получает пакет от 192.168.88.1 и отвечает на 192.168.88.1
- Роутер выполняет обратную трансляцию и отправляет ответ клиенту
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 обрабатываются сверху вниз, первое совпавшее правило применяется. Рекомендуемый порядок:
- Hairpin dstnat — специфичные правила для LAN-трафика (содержат src-address)
- Dstnat — проброс портов извне
- Srcnat / masquerade — исходящий NAT
Для изменения порядка:
[admin@MikroTik] ># Переместить правило номер 5 на первое место /ip/firewall/nat move 5 destination=0
Безопасность: что НЕ пробрасывать
ВНИМАНИЕ: Никогда не пробрасывайте порты управления MikroTik в интернет!
Следующие порты категорически нельзя открывать на WAN-интерфейс:
| Порт | Сервис | Риск |
|---|---|---|
| 8291 | Winbox | Полный доступ к роутеру |
| 8728 | API | Программное управление роутером |
| 8729 | API-SSL | То же, через SSL |
| 22 (на роутере) | SSH | Консоль управления |
| 23 | Telnet | Незашифрованный доступ |
| 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 перед тем, как закончить настройку
/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