В помощь. NAT Loopback (обращение на внешний ip сети
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
DmNuts, премного благодарен. Запустил тестить.
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
Итак, все хорошо.
Хотел бы сделать пару дополнений, для простоты понимания процесса и дальнейших действий (кому-то это кажется очевидным, а мне пришлось несколько призадуматься).
1 - Помимо
нужно еще делать проброс портов на внутренний интерфейс (bridge или master-port свитча, у кого как). Просто "из коробки" это правило ничего не даст. Например, мне нужно было из своей локалки обратиться на доменное имя и попасть на свой локальный FTP. Доменное имя успешно резолвится (БЕЗ статических записей в DNS) и все обращения идут уже на внешний IP-адрес, а тут, как раз, правило и заворачивает все запросы на внутреннюю подсеть. Далее добавление правила
позволяет получить желаемое. Еще нужны правила для udp и для диапазона портов passive FTP. Это касательно FTP-сервера.
Т.е., если у вас уже проброшены порты к своим серверам для доступа извне, то просто нужно скопировать эти правила и изменить in-interface на ваш бридж или свитч.
2 - При использовании конструкции
столкнулся с ее неработоспособностью. Понял не сразу, но оказалось, что у меня было еще несколько выключенных правил в NAT с таким же комментарием "NAT loopback" (это я пока искал пути решения loopback, пробовал другие варианты). После переименования комментариев у этих "лишних" правил, скрипт заработал.
Хотел бы сделать пару дополнений, для простоты понимания процесса и дальнейших действий (кому-то это кажется очевидным, а мне пришлось несколько призадуматься).
1 - Помимо
Код: Выделить всё
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=”NAT loopback” disabled=no
нужно еще делать проброс портов на внутренний интерфейс (bridge или master-port свитча, у кого как). Просто "из коробки" это правило ничего не даст. Например, мне нужно было из своей локалки обратиться на доменное имя и попасть на свой локальный FTP. Доменное имя успешно резолвится (БЕЗ статических записей в DNS) и все обращения идут уже на внешний IP-адрес, а тут, как раз, правило и заворачивает все запросы на внутреннюю подсеть. Далее добавление правила
Код: Выделить всё
add action=dst-nat chain=dstnat comment="FTP_NAS_ loopback" dst-port=21 in-interface=ether1 protocol=tcp \
to-addresses=локальный адрес FTP-сервера to-ports=21
позволяет получить желаемое. Еще нужны правила для udp и для диапазона портов passive FTP. Это касательно FTP-сервера.
Т.е., если у вас уже проброшены порты к своим серверам для доступа извне, то просто нужно скопировать эти правила и изменить in-interface на ваш бридж или свитч.
2 - При использовании конструкции
Код: Выделить всё
[find comment~"NAT loopback"]
столкнулся с ее неработоспособностью. Понял не сразу, но оказалось, что у меня было еще несколько выключенных правил в NAT с таким же комментарием "NAT loopback" (это я пока искал пути решения loopback, пробовал другие варианты). После переименования комментариев у этих "лишних" правил, скрипт заработал.
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
Еще одно наблюдение: если в winbox до подключения к какому-либо маршрутизатору открыть вкладку neighbors, то теперь микротик, в котором приписано правлио NAT loopback "видится" c IP-адресом вшнешним.
В принципе не очень критично, но как-то непонятно почему так стало.
Да, и не подключишься через winbox по этому внешнему IP пока не пробросишь порт 8291 на локальный свитч/бридж.
В принципе не очень критично, но как-то непонятно почему так стало.
Да, и не подключишься через winbox по этому внешнему IP пока не пробросишь порт 8291 на локальный свитч/бридж.
- DrMini
- Сообщения: 24
- Зарегистрирован: 19 ноя 2017, 21:40
Galeoner писал(а):Возможно я не первый...
Долго ковырял этот вопрос в интернете но все таки нашел решение. Немного подправил и получил удобный вариант!
Многие сталкивались с вопросом обращения на внешний свой ip изнутри сети чтобы например проверить как работает то или иное правило NAT...
но к огромному сожалению такой информации очень мало очень скудно но имеется.
Вот мое работающее решение
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=”NAT loopback” disabled=no
где xxx.xxx.xxx.xxx - внешний IP
yyy.yyy.yyy.0/24 - внутренняя подсеть
Вуаля и работает!
С портами делайте все что хотите)))
Спасибо всё чудесно работает. Низкий поклон.
- Herbert Wells
- Сообщения: 5
- Зарегистрирован: 08 фев 2018, 00:14
- Контактная информация:
У меня на Hap AC не заработал. Подскажите, где подправить ?Galeoner писал(а): ↑14 авг 2013, 11:15 Вот мое работающее решение
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=”NAT loopback” disabled=no
где xxx.xxx.xxx.xxx - внешний IP
yyy.yyy.yyy.0/24 - внутренняя подсеть
Вуаля и работает!
С портами делайте все что хотите)))



Последний раз редактировалось Herbert Wells 11 фев 2018, 12:38, всего редактировалось 1 раз.
-
- Сообщения: 290
- Зарегистрирован: 26 дек 2017, 22:30
mikrotik wiki hairpin nat
- Herbert Wells
- Сообщения: 5
- Зарегистрирован: 08 фев 2018, 00:14
- Контактная информация:
-
- Модератор
- Сообщения: 3600
- Зарегистрирован: 26 сен 2013, 14:20
- Откуда: НСК
- Контактная информация:
Ну вы если копи/пасте то хоть смотрите
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=”NAT loopback” disabled=no
А в вашем случае
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=NAT loopback disabled=no
Что есть неверно
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=”NAT loopback” disabled=no
А в вашем случае
/ ip firewall nat
add chain=srcnat action=src-nat to-addresses=xxx.xxx.xxx.xxx protocol=tcp dst-port=0-65535 src-address=yyy.yyy.yyy.0/24 to-ports=0-65535 comment=NAT loopback disabled=no
Что есть неверно
Есть интересная задача и бюджет? http://mikrotik.site
- Herbert Wells
- Сообщения: 5
- Зарегистрирован: 08 фев 2018, 00:14
- Контактная информация:
-
- Сообщения: 1
- Зарегистрирован: 28 июл 2020, 14:23
Для заворачивания несколький портов или хостов создаем несколько аналогичных рулов топик стартера, например:
Но что бы их не прописывать по отдельности будем использовать универсальный скрипт, который ищет все рулы в комментарии которых есть "NAT loopback" и обновляет адрес
По хорошему надо проверять IP , но почему то магия микротик скрипта не позволяет взять to-addresses по аналогии как он сетился внутри цикла выше:
Последний код не рабочий, буду рад если кто-нибудь осилит и пофиксит в нем это выражение
Код: Выделить всё
28 ;;; NAT loopback to raspberry: Home Assistant
chain=srcnat action=src-nat to-addresses=109.184.75.127 protocol=tcp src-address=192.168.88.13 dst-port=8123 log=no log-prefix=""
29 ;;; NAT loopback to raspberry: Portainer
chain=srcnat action=src-nat to-addresses=109.184.75.127 protocol=tcp src-address=192.168.88.13 dst-port=9000 log=no log-prefix=""
30 ;;; NAT loopback to diskstation: DSM
chain=srcnat action=src-nat to-addresses=109.184.75.127 protocol=tcp src-address=192.168.88.2 dst-port=5000-5001 log=no log-prefix=""
Код: Выделить всё
:global realIP do={
:return [/ip cloud get public-address];
}
foreach natRule in={[/ip firewall nat find comment~"NAT loopback"]} do={
/ip firewall nat set [/ip firewall nat find $natRule ] to-addresses=[$realIP];
}
Код: Выделить всё
foreach natRule in={[/ip firewall nat find comment~"NAT loopback"]} do={
:local IpNat [/ip firewall nat get [/ip firewall nat find $natRule ] to-addresses];
if ([$realIP]!=$IpNat) do={
/ip firewall nat set [/ip firewall nat find $natRule ] to-addresses=[$realIP];
}
}
Код: Выделить всё
/ip firewall nat get [/ip firewall nat find $natRule ] to-addresses