Страница 1 из 4

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

Добавлено: 14 авг 2013, 11:15
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 - внутренняя подсеть

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

------------------------------
маленькое дополнение... чтобы работало правильно рекомендую указывать вместо интерфейса в правиле NAT dst-address с указанием внешнего айпи данного интефейса. А интефейс убрать.

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

Добавлено: 14 июн 2015, 10:57
V palto
А как быть, если внешний IP динамический? А если я хочу реализовать данную фишку с внешним доменным именем, как тогда?

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

Добавлено: 14 июн 2015, 11:47
podarok66
V palto писал(а):А как быть, если внешний IP динамический?

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

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

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

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

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

Добавлено: 14 июн 2015, 15:35
podarok66
Ну тогда не знаю... Воспроизвести пока не на чем.

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

Добавлено: 16 июн 2015, 12:20
Rusx123
ну вообще про такой 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

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

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

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

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

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

Добавлено: 10 фев 2016, 12:24
wolf_ktl
/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

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

Добавлено: 04 май 2017, 16:53
V palto
Таки пришлось снова вернуться к данной теме.
Для динамического внешнего 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-сервисов скрипты так и делают, но я что-то не соображу как это переделать для данного случая.

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

Добавлено: 04 май 2017, 17:23
DmNuts
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;
}