Возможно я не первый...
Долго ковырял этот вопрос в интернете но все таки нашел решение. Немного подправил и получил удобный вариант!
Многие сталкивались с вопросом обращения на внешний свой 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 с указанием внешнего айпи данного интефейса. А интефейс убрать.
В помощь. NAT Loopback (обращение на внешний ip сети
-
- Сообщения: 10
- Зарегистрирован: 11 июл 2012, 14:27
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
А как быть, если внешний IP динамический? А если я хочу реализовать данную фишку с внешним доменным именем, как тогда?
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
V palto писал(а):А как быть, если внешний IP динамический?
Скриптом, скорее всего, пусть проверяет соответствие адреса на внешнем интерфейсе адресу в правиле и при расхождении меняет адрес в правиле.
V palto писал(а):А если я хочу реализовать данную фишку с внешним доменным именем, как тогда?
В DNS static прописать соответствие, думаю должно работать...
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
С динамическим IP - костыль, ясно. А вот для доменного имени делал статическую запись в DNS, из локалки-то все как задумывалось работает, но вот если извне ломиться на FTP, то сносит башню FTP-клиенту, ему FTP-сервер возвращает не свой внешний IP, а свой внутренний (т.к. у FTP-сервера в настройках прописано как-раз доменной имя, по причине динамического внешнего IP). Если убрать статическую запись в DNS, то с FTP все хорошо.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Ну тогда не знаю... Воспроизвести пока не на чем.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 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
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
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
Я использовал раньше DynDNS, но в скрипте (примерно как в вашем) используется fetch, из-за которого постоянно усыпан лог этим самым fetch (было с определенной версии ROS). По сему использую Cloud микротиковский, а делее через No-IP делается CNAME на человеческое доменное имя. В общем от скрипта и бардака в логе я ушел.
Кстати, вопрос - fetch и посейчас забивает лог? В нынешней 6.29.1 не изменилось ничего?
Две записи в DNS..., попробую конечно, но как сам DNS будет разруливать кому на какой адрес обращаться? Стучусь я из локалки на доменное имя, по одной статической записи я точно никуда не достучусь, по второй все хорошо будет, но вот на какую запись я попаду? Та же ситуация и с обращением из внешки. Да и вот еще - для FTP-сервера будет пофигу на какую статическую запись попадет его ответ, обращающемуся к FTP извне, а вот что к обращающемуся придет - это вопрос.
В общем, надо пробовать, но сомнительно.
Про Hairpin NAT смотрел неоднократно, но там все про IP, про доменное имя не увидел (ткните носом, если там это есть).
Кстати, вопрос - fetch и посейчас забивает лог? В нынешней 6.29.1 не изменилось ничего?
Две записи в DNS..., попробую конечно, но как сам DNS будет разруливать кому на какой адрес обращаться? Стучусь я из локалки на доменное имя, по одной статической записи я точно никуда не достучусь, по второй все хорошо будет, но вот на какую запись я попаду? Та же ситуация и с обращением из внешки. Да и вот еще - для FTP-сервера будет пофигу на какую статическую запись попадет его ответ, обращающемуся к FTP извне, а вот что к обращающемуся придет - это вопрос.
В общем, надо пробовать, но сомнительно.
Про Hairpin NAT смотрел неоднократно, но там все про IP, про доменное имя не увидел (ткните носом, если там это есть).
-
- Сообщения: 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
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
-
- Сообщения: 47
- Зарегистрирован: 12 дек 2014, 16:21
Таки пришлось снова вернуться к данной теме.
Для динамического внешнего IP соорудил костыль, который берет IP из IP-Cloud и меняет его в правиле NAT.
Само правило использую из первого сообщения этой темы.
Вроде работает, даже с доменным именем проблем пока нет, статическую запись DNS не делал. Единственное неудобство - скрипт запустил на выполнение каждую минуту, а по хорошему надо где-то запоминать IP, а потом просто сравнивать с текущим, если они не равны, то менять IP в правиле NAT.
Для DynDNS-сервисов скрипты так и делают, но я что-то не соображу как это переделать для данного случая.
Для динамического внешнего 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-сервисов скрипты так и делают, но я что-то не соображу как это переделать для данного случая.
-
- Сообщения: 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;
}