Mikrotik. NAT Loopback (NAT Hairpin): различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| Строка 5: | Строка 5: | ||
=== Способ 1 === | === Способ 1 === | ||
'''Пример 1''' | |||
В следующем примере мы пройдем с локальной машины из подсети 9 на локальный сервер 192.168.9.12 через маршрутизатор 192.168.9.8 обратно в локалку по порту 22026/UDP на машину 192.168.9.12 | В следующем примере мы пройдем с локальной машины из подсети 9 на локальный сервер 192.168.9.12 через маршрутизатор 192.168.9.8 обратно в локалку по порту 22026/UDP на машину 192.168.9.12 | ||
| Строка 24: | Строка 28: | ||
<code>dst-port=22026 to-addresses="192.168.9.8" ;</code> | <code>dst-port=22026 to-addresses="192.168.9.8" ;</code> | ||
'''Пример 2''' | |||
178.210.50.111 - внешний интерфейс | |||
192.168.8.0/24 - локальная сеть, из которой инициируем подключение | |||
192.168.8.1 - адрес маршрутизатора | |||
10.1.8.203 - адрес назначения (в другой подсети того же контура) | |||
64999 - порт назначения | |||
/ip firewall nat add action=dst-nat chain=dstnat dst-address=178.210.50.111 dst-port=64999 in-interface=bridge-local protocol=tcp src-address=192.168.8.0/24 to-addresses=10.1.8.203 | |||
/ip firewall nat add chain=dstnat action=dst-nat src-address="192.168.8.0/24" dst-address=178.210.50.111 protocol=tcp dst-port=64999 in-interface="bridge-local" to-addresses="10.1.8.203" ; | |||
/ip firewall nat add chain=srcnat action=src-nat out-interface="bridge-local" dst-address="10.1.8.203" src-address="192.168.8.0/24" protocol=tcp dst-port=64999 to-addresses="192.168.8.1" ; | |||
=== Способ 2 (ПРОВЕРИТЬ!) === | === Способ 2 (ПРОВЕРИТЬ!) === | ||
Текущая версия на 20:00, 19 марта 2026
Описание
Необходимо с ЛОКАЛЬНОЙ машины достучаться через ВНЕШНИЙ интерфейс (с помощью проброса порта через DST-NAT) обратно на какую-нибудь локальную машину.
Настройка
Способ 1
Пример 1
В следующем примере мы пройдем с локальной машины из подсети 9 на локальный сервер 192.168.9.12 через маршрутизатор 192.168.9.8 обратно в локалку по порту 22026/UDP на машину 192.168.9.12
109.106.130.82, 77.241.254.254 - адреса двух внешних интерфейсов
/ip firewall nat add chain=dstnat action=dst-nat src-address="192.168.9.0/24" dst-address=109.106.130.82 protocol=udp dst-port=22026 \
in-interface="$lan" to-addresses="192.168.9.12" ;
/ip firewall nat add chain=dstnat action=dst-nat src-address="192.168.9.0/24" dst-address=77.241.254.254 protocol=udp dst-port=22026 \
in-interface="$lan" to-addresses="192.168.9.12" ;
/ip firewall nat add chain=srcnat action=src-nat out-interface="$lan" dst-address="192.168.9.12" src-address="$net" protocol=udp \
dst-port=22026 to-addresses="192.168.9.8" ;
/ip firewall nat add chain=srcnat action=src-nat out-interface="$lan" dst-address="192.168.9.12" src-address="$net" protocol=udp \
dst-port=22026 to-addresses="192.168.9.8" ;
Пример 2
178.210.50.111 - внешний интерфейс
192.168.8.0/24 - локальная сеть, из которой инициируем подключение
192.168.8.1 - адрес маршрутизатора
10.1.8.203 - адрес назначения (в другой подсети того же контура)
64999 - порт назначения
/ip firewall nat add action=dst-nat chain=dstnat dst-address=178.210.50.111 dst-port=64999 in-interface=bridge-local protocol=tcp src-address=192.168.8.0/24 to-addresses=10.1.8.203
/ip firewall nat add chain=dstnat action=dst-nat src-address="192.168.8.0/24" dst-address=178.210.50.111 protocol=tcp dst-port=64999 in-interface="bridge-local" to-addresses="10.1.8.203" ;
/ip firewall nat add chain=srcnat action=src-nat out-interface="bridge-local" dst-address="10.1.8.203" src-address="192.168.8.0/24" protocol=tcp dst-port=64999 to-addresses="192.168.8.1" ;
Способ 2 (ПРОВЕРИТЬ!)
Первым этапом нужно промаркировать (new-packet-mark=nat-loopback) те пакеты, которые пришли на внешний адрес маршрутизатора (dst-address=203.0.113.5) из локальной сети (in-interface=LAN) и являются новыми соединениями (connection-state=new).
/ip firewall mangle
add chain=prerouting comment="NAT Loopback detect" dst-address=203.0.113.5 in-interface=LAN connection-state=new action=mark-packet new-packet-mark=nat-loopback passthrough=yes
Теперь нужно написать обработчик пакета, который сработает после того как пакет пройдет маршрутизацию и будет на выходе в локальную сеть, в таблице mangle необходимо заменить адрес источника на адрес маршрутизатора.
/ip firewall nat
add chain=srcnat packet-mark=nat-loopback action=masquerade comment="NAT Loopback replace address"
Таким образом, появляется возможность писать правила проброса портов в обычном виде по одному на порт или несколько портов. Они будут работать как и в классическом сценарии (при поступлении извне), так и в случае поступления запросов из локальной сети.
/ip firewall nat
add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=80,443 action=dst-nat to-addresses=192.168.88.5
add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=8080 action=dst-nat to-addresses=192.168.88.20
add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=25,143 action=dst-nat to-addresses=192.168.88.100