Mikrotik. NAT Loopback (NAT Hairpin): различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
(Создана пустая страница)
 
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
== Описание ==
Необходимо с ЛОКАЛЬНОЙ машины достучаться через ВНЕШНИЙ интерфейс (с помощью проброса порта через 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''' - адреса двух внешних интерфейсов
<code>/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 \</code>
<code>in-interface="$lan" to-addresses="192.168.9.12" ;</code>
<code>/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 \</code>
<code>in-interface="$lan" to-addresses="192.168.9.12" ;</code>
<code>/ip firewall nat add chain=srcnat action=src-nat out-interface="$lan" dst-address="192.168.9.12" src-address="$net" protocol=udp \</code>
<code>dst-port=22026 to-addresses="192.168.9.8" ;</code>
<code>/ip firewall nat add chain=srcnat action=src-nat out-interface="$lan" dst-address="192.168.9.12" src-address="$net" protocol=udp \</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 (ПРОВЕРИТЬ!) ===
Первым этапом нужно промаркировать (''new-packet-mark=nat-loopback'') те пакеты, которые пришли на внешний адрес маршрутизатора (''dst-address=203.0.113.5'') из локальной сети (''in-interface=LAN'') и являются новыми соединениями (''connection-state=new'').
<code>/ip firewall mangle</code>
<code>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</code>
Теперь нужно написать обработчик пакета, который сработает после того как пакет пройдет маршрутизацию и будет на выходе в локальную сеть, в таблице mangle необходимо заменить адрес источника на адрес маршрутизатора.
<code>/ip firewall nat</code>
<code>add chain=srcnat packet-mark=nat-loopback action=masquerade comment="NAT Loopback replace address"</code>
Таким образом, появляется возможность писать правила проброса портов в обычном виде по одному на порт или несколько портов. Они будут работать как и в классическом сценарии (при поступлении извне), так и в случае поступления запросов из локальной сети.
<code>/ip firewall nat</code>
<code>add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=80,443 action=dst-nat to-addresses=192.168.88.5</code>
<code>add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=8080 action=dst-nat to-addresses=192.168.88.20</code>
<code>add chain=dstnat dst-address=203.0.113.5 protocol=tcp dst-port=25,143 action=dst-nat to-addresses=192.168.88.100</code>
[[Категория:Mikrotik]]
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__

Текущая версия на 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