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

Обсуждение оборудования и его настройки
Galeoner
Сообщения: 10
Зарегистрирован: 11 июл 2012, 14:27

Возможно я не первый...
Долго ковырял этот вопрос в интернете но все таки нашел решение. Немного подправил и получил удобный вариант!
Многие сталкивались с вопросом обращения на внешний свой 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 - внутренняя подсеть

Вуаля и работает!
С портами делайте все что хотите)))

------------------------------
маленькое дополнение... чтобы работало правильно рекомендую указывать вместо интерфейса в правиле NAT dst-address с указанием внешнего айпи данного интефейса. А интефейс убрать.
Последний раз редактировалось Galeoner 22 сен 2019, 14:04, всего редактировалось 2 раза.


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

А как быть, если внешний IP динамический? А если я хочу реализовать данную фишку с внешним доменным именем, как тогда?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

V palto писал(а):А как быть, если внешний IP динамический?

Скриптом, скорее всего, пусть проверяет соответствие адреса на внешнем интерфейсе адресу в правиле и при расхождении меняет адрес в правиле.
V palto писал(а):А если я хочу реализовать данную фишку с внешним доменным именем, как тогда?

В DNS static прописать соответствие, думаю должно работать...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

С динамическим IP - костыль, ясно. А вот для доменного имени делал статическую запись в DNS, из локалки-то все как задумывалось работает, но вот если извне ломиться на FTP, то сносит башню FTP-клиенту, ему FTP-сервер возвращает не свой внешний IP, а свой внутренний (т.к. у FTP-сервера в настройках прописано как-раз доменной имя, по причине динамического внешнего IP). Если убрать статическую запись в DNS, то с FTP все хорошо.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну тогда не знаю... Воспроизвести пока не на чем.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Rusx123
Сообщения: 13
Зарегистрирован: 13 май 2015, 12:16

ну вообще про такой NAT было в вики

http://wiki.mikrotik.com/wiki/Hairpin_NAT

может 2 записи для внешнего и внутреннего ip в dns?

используется dyndns? no-ip?

обновляется скриптом или в облаке микротика?

http://wiki.mikrotik.com/wiki/Manual:IP/Cloud

я старовер со скриптом например:

/system script
add name=dyndns policy=\
ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api \
source="##############Script Settings##################\r\
\n\r\
\n:local NOIPUser \"rus123\"\r\
\n:local NOIPPass \"мой мегасекретный пароль\"\r\
\n:local WANInter \"pppoe-out1\"\r\
\n\r\
\n###############################################\r\
\n\r\
\n:local NOIPDomain \"\$NOIPUser.no-ip.biz\"\r\
\n:local IpCurrent [/ip address get [find interface=\$WANInter] address];\r\
\n:for i from=( [:len \$IpCurrent] - 1) to=0 do={ \r\
\n :if ( [:pick \$IpCurrent \$i] = \"/\") do={ \r\
\n :local NewIP [:pick \$IpCurrent 0 \$i];\r\
\n :if ([:resolve \$NOIPDomain] != \$NewIP) do={\r\
\n /tool fetch mode=http user=\$NOIPUser password=\$NOIPPass url=\"http\
://dynupdate.no-ip.com/nic/update\\3Fhostname=\$NOIPDomain&myip=\$NewIP\" ke\
ep-result=no\r\
\n :log info \"NO-IP Update: \$NOIPDomain - \$NewIP\"\r\
\n }\r\
\n } \r\
\n}\r\
\n"

добавив пару строчек в нужное место можно обновлять и правило NAT, например
/ip fi nat set [find comment~"NAT loopback"] dst-address=$IpCurrent
или днс запись про внешний адрес
/ip dns static set [find name ~"Вот прям мой роутер снаружи.ru"] address=$IpCurrent


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

Я использовал раньше DynDNS, но в скрипте (примерно как в вашем) используется fetch, из-за которого постоянно усыпан лог этим самым fetch (было с определенной версии ROS). По сему использую Cloud микротиковский, а делее через No-IP делается CNAME на человеческое доменное имя. В общем от скрипта и бардака в логе я ушел.
Кстати, вопрос - fetch и посейчас забивает лог? В нынешней 6.29.1 не изменилось ничего?

Две записи в DNS..., попробую конечно, но как сам DNS будет разруливать кому на какой адрес обращаться? Стучусь я из локалки на доменное имя, по одной статической записи я точно никуда не достучусь, по второй все хорошо будет, но вот на какую запись я попаду? Та же ситуация и с обращением из внешки. Да и вот еще - для FTP-сервера будет пофигу на какую статическую запись попадет его ответ, обращающемуся к FTP извне, а вот что к обращающемуся придет - это вопрос.
В общем, надо пробовать, но сомнительно.

Про Hairpin NAT смотрел неоднократно, но там все про IP, про доменное имя не увидел (ткните носом, если там это есть).


wolf_ktl
Сообщения: 417
Зарегистрирован: 25 июн 2013, 18:12

/ip firewall nat
add chain=dstnat dst-address=*.*.*.* protocol=tcp dst-port=8082 \
action=dst-nat to-address=192.168.8.20
add chain=srcnat out-interface=ether1-WAN action=masquerade

/ip firewall nat
add chain=srcnat src-address=192.168.8.0/24 \
dst-address=192.168.8.20 protocol=tcp dst-port=8082 \
out-interface=ether2-LAN action=masquerade


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

Таки пришлось снова вернуться к данной теме.
Для динамического внешнего IP соорудил костыль, который берет IP из IP-Cloud и меняет его в правиле NAT.

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

local IpCurrent [/ip cloud get public-address];
/ip firewall nat set [find comment~"NAT loopback"] to-addresses=$IpCurrent;


Само правило использую из первого сообщения этой темы.
Вроде работает, даже с доменным именем проблем пока нет, статическую запись DNS не делал. Единственное неудобство - скрипт запустил на выполнение каждую минуту, а по хорошему надо где-то запоминать IP, а потом просто сравнивать с текущим, если они не равны, то менять IP в правиле NAT.
Для DynDNS-сервисов скрипты так и делают, но я что-то не соображу как это переделать для данного случая.


DmNuts
Сообщения: 120
Зарегистрирован: 18 май 2016, 18:33
Откуда: Иркутск

V palto, попробуйте:

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

:local IpCurrent [/ip cloud get public-address];
:local IpNat [/ip firewall nat get [find comment~"NAT loopback"] to-addresses];
if ($IpCurrent!=$IpNat) do={
/ip firewall nat set [find comment~"NAT loopback"] to-addresses=$IpCurrent;
}


Ответить