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

Сверка IP адреса на ddns

Добавлено: 02 апр 2019, 07:57
artem.hlyustov
Добрый день уважаемые форумчане.

Встала такая задача, имеется подключение к провайдеру, который периодически выдает серые IP. У меня на роутере поднят vpn+ddns(обновляется при переходе по ссылке). Так вот, процент выдачи "серых" ip примерно 30%, в остальных случаях выдает белый IP, по которому могу подключиться. Нужно как-то сравнивать какой IP присвоился на DDNS, (методом пинга домена например). И в случае если присвоился IP который не пингуется из вне, ребутать соединение соответственно пока не присвоится белый IP.

Набросал такой вот скрипт:
 
:local PingCount 3
:local ddns 12345.dumain.ru; (скрыл чтобы за рекламу не посчитали)
:local ResultDdns [/ping count=$PingCount $ddns interface=pppoe-out1]
if (ResultDdns <3) do={
/log info "Connect Bad"
}
if (ResultDdns =3) do={
/log info "Connect OK"
}
Проблема в том, что при пинге домена условие при проверке всегда выполняется. Т.е. даже если на домене поменялся IP на серый, и команда ping возвращает ответ timeout в условии я так понимаю воспринимается как положительный ответ. Соответственно соединение не ребутится и у меня висит серый IP.

Re: Сверка IP адреса на ddns

Добавлено: 02 апр 2019, 14:19
Sertik
Не понятно, как провайдер может "переодически" выдавать серые IP ? Уж IP или постоянно серые, или постоянно "белые", но динамические ...
Вероятно, у Вашего провайдера там хитро сделано.
Посмотрите как резолвятся Ваши IP, которые Вам "переодически" выдает провайдер. Есть специальные сервисы, обращаясь к которым, Вы можете получить свой реальный IP, который у Вас в данный момент на WAN-интерфейсе. Если он реально "серый" - Вам ничто не поможет. Если он белый, но динамический, Вы можете скриптом взять новый адрес, который Вам вновь выдал провайдер, сравнить с тем, что скрипт запомнил до этого момента, если не совпадают - попытаться заменить там где нужно.
Но Вы обрисуйте нормально задачу то ...

А так вот держите, для примера, почитайте ...

http://mikrotik-ukraine.blogspot.com/20 ... s-nat.html

Re: Сверка IP адреса на ddns

Добавлено: 02 апр 2019, 19:52
artem.hlyustov
Sertik писал(а): 02 апр 2019, 14:19 Не понятно, как провайдер может "переодически" выдавать серые IP ? Уж IP или постоянно серые, или постоянно "белые", но динамические ...
Вероятно, у Вашего провайдера там хитро сделано.
Посмотрите как резолвятся Ваши IP, которые Вам "переодически" выдает провайдер. Есть специальные сервисы, обращаясь к которым, Вы можете получить свой реальный IP, который у Вас в данный момент на WAN-интерфейсе. Если он реально "серый" - Вам ничто не поможет. Если он белый, но динамический, Вы можете скриптом взять новый адрес, который Вам вновь выдал провайдер, сравнить с тем, что скрипт запомнил до этого момента, если не совпадают - попытаться заменить там где нужно.
Но Вы обрисуйте нормально задачу то ...

А так вот держите, для примера, почитайте ...

http://mikrotik-ukraine.blogspot.com/20 ... s-nat.html
Прилагаю скрин истории моих IP, красным в некоторых местах выделил серые IP. Как видно по картинке, серые ip не всегда, но они не пингуются из вне.
Нужен скрипт который будет проверять, серый у меня IP или нет, (т.е. пингуется он из вне или нет) и если не пингуется, ребутать соединение к провайдеру. Пока не получу белый IP.
Изображение

Re: Сверка IP адреса на ddns

Добавлено: 02 апр 2019, 20:48
KARaS'b
artem.hlyustov писал(а): 02 апр 2019, 19:52 Прилагаю скрин истории моих IP, красным в некоторых местах выделил серые IP. Как видно по картинке, серые ip не всегда, но они не пингуются из вне.
Нужен скрипт который будет проверять, серый у меня IP или нет, (т.е. пингуется он из вне или нет) и если не пингуется, ребутать соединение к провайдеру. Пока не получу белый IP.
Изображение
Вы только не обижайтесь, но вам надо или знания по сетям подтянуть, или к окулисту, вот серьезно.

Адреса v4 состоят из 4 октетов, не меньше и не больше, те, что вы подчеркнули точно такие же белые, просто вы почему то увидели, что начиная со второго октета они похожи на серые. Соглашусь что это прикольное совпадение, но если вы пинговали, например "192.168.194" (самое первое подчеркивание), то конечно он вам не ответит, т.к. это не адрес, а кусок адреса из всего 3 октетов, а весь адрес выгляди как 85.192.168.194 и вот он уж точно должен был ответить.
Так что все у вас в порядке, просто будьте внимательней и на всякий все же подтяните познания в сетях, что бы такое больше не повторялось.

Re: Сверка IP адреса на ddns

Добавлено: 02 апр 2019, 20:56
artem.hlyustov
KARaS'b писал(а): 02 апр 2019, 20:48
artem.hlyustov писал(а): 02 апр 2019, 19:52 Прилагаю скрин истории моих IP, красным в некоторых местах выделил серые IP. Как видно по картинке, серые ip не всегда, но они не пингуются из вне.
Нужен скрипт который будет проверять, серый у меня IP или нет, (т.е. пингуется он из вне или нет) и если не пингуется, ребутать соединение к провайдеру. Пока не получу белый IP.
Изображение
Вы только не обижайтесь, но вам надо или знания по сетям подтянуть, или к окулисту, вот серьезно.

Адреса v4 состоят из 4 октетов, не меньше и не больше, те, что вы подчеркнули точно такие же белые, просто вы почему то увидели, что начиная со второго октета они похожи на серые. Соглашусь что это прикольное совпадение, но если вы пинговали, например "192.168.194" (самое первое подчеркивание), то конечно он вам не ответит, т.к. это не адрес, а кусок адреса из всего 3 октетов, а вес адрес выгляди как 85.192.168.194 и вот он уж точно должен был ответить.
Так что все у вас в порядке, просто будьте внимательней и на всякий все же подтяните познания в сетях, что бы такое больше не повторялось.
Критика оправдана. Но я пинговал 85.192.168.194 и он не пинговался. Как собственно и все остальные адреса (то что я подчеркнул только 3 октета чистая случайность, уж простите меня за умения пользования paint).

Как бы то ни было. Проблема решена таким скриптом:
 
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:global currentIP [:pick $result $startLoc $endLoc]
/log info $currentIP;
:local PingCount 3
:local ResultDdns [/ping count=$PingCount $currentIP interface=pppoe-out1]
/log info $ResultDdns;
:if ($ResultDdns = 0) do={
/log info "Connect Bad"
:interface pppoe-client disable pppoe-out1; :interface pppoe-client enable pppoe-out1;
} else={
/log info "Connect OK"
}
Алгоритм простой: Пингую свой же внешний IP, если он пингуется (не серый) то интерфейс продолжает работать(а соответственно IP может спокойно присваиваться DDNS). Соотвественно если не пингуется, ребутит соединение (меняется ip). Ну а присвоение IP к DDNS у меня реализовано в другом скрипте. Просто они в разное время срабатывают. Хотя может и объединю их на досуге.

Re: Сверка IP адреса на ddns

Добавлено: 09 сен 2019, 01:42
nikopol25
Мой провайдет использует только две подсети для серых ip так что написал скрипт который проверяет если ip выдается из серой подсети то происходит переподключение

:global newIP [/ip address get [find interface="pppoe-out1"] address];

:if ($newIP in 100.99.0.0/16) do={
/interface pppoe-client disable pppoe-out1
:delay 5
/interface pppoe-client enable pppoe-out1
}

Re: Сверка IP адреса на ddns

Добавлено: 09 сен 2019, 10:14
JoeRee
Раньше был на Ростелекоме. Была примерно такая же ситуация:
если при соединении с провайдером выдавался IP с первым октетом отличным от 212, то ни пинга, ни доступа извне к внутренним ресурсам не было.

Порылся в инете, нашел скриптик, переделал под себя:
:local newIP [:pick [/ip address get [find interface ="RT"] address ] 0 3]
:if ($newIP != 212) do={

:log info "-----------------------------------------"
:log info "Real first octet IP: $newIP"
:log info "-----------------------------------------"

/interface pppoe-client disable RT
:delay 5
/interface pppoe-client enable RT
}
В PPP/Profile создал профиль для проверки и в поле Scripts/OnUp вставил ссылку на скрипт, который выше.
При соединении с провайдером идет проверка на соответствие с "правильным" IP и, если не соответствует, то происходит пересоединение интерфейса. И так до получения "правильного".