В помощь. NAT Loopback (обращение на внешний ip сети

Обсуждение оборудования и его настройки
V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

DmNuts, премного благодарен. Запустил тестить.


V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Итак, все хорошо.
Хотел бы сделать пару дополнений, для простоты понимания процесса и дальнейших действий (кому-то это кажется очевидным, а мне пришлось несколько призадуматься).
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, пробовал другие варианты). После переименования комментариев у этих "лишних" правил, скрипт заработал.


V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Еще одно наблюдение: если в winbox до подключения к какому-либо маршрутизатору открыть вкладку neighbors, то теперь микротик, в котором приписано правлио NAT loopback "видится" c IP-адресом вшнешним.
В принципе не очень критично, но как-то непонятно почему так стало.
Да, и не подключишься через 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
Контактная информация:

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 - внутренняя подсеть

Вуаля и работает!
С портами делайте все что хотите)))
У меня на Hap AC не заработал. Подскажите, где подправить ?
Изображение

Изображение

Изображение
Последний раз редактировалось Herbert Wells 11 фев 2018, 12:38, всего редактировалось 1 раз.


enzain
Сообщения: 291
Зарегистрирован: 26 дек 2017, 22:30

mikrotik wiki hairpin nat


Аватара пользователя
Herbert Wells
Сообщения: 5
Зарегистрирован: 08 фев 2018, 00:14
Контактная информация:

enzain писал(а): 10 фев 2018, 20:12 mikrotik wiki hairpin nat
Изучил. Ошибок у себя не обнаружил, где конкретная ошибка ?


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 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

Что есть неверно


Есть интересная задача и бюджет? http://mikrotik.site
Аватара пользователя
Herbert Wells
Сообщения: 5
Зарегистрирован: 08 фев 2018, 00:14
Контактная информация:

vqd писал(а): 11 фев 2018, 19:13 Что есть неверно
Спасибо, заменил кавычки на "правильные", добавил правило FTP_NAS_ loopback, заработало.


akrigator
Сообщения: 1
Зарегистрирован: 28 июл 2020, 14:23

Для заворачивания несколький портов или хостов создаем несколько аналогичных рулов топик стартера, например:

Код: Выделить всё

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=""
Но что бы их не прописывать по отдельности будем использовать универсальный скрипт, который ищет все рулы в комментарии которых есть "NAT loopback" и обновляет адрес

Код: Выделить всё

: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];
}
По хорошему надо проверять IP , но почему то магия микротик скрипта не позволяет взять to-addresses по аналогии как он сетился внутри цикла выше:

Код: Выделить всё

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


Ответить