Ростелеком. Проверка на серый IP

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
odioniks
Сообщения: 5
Зарегистрирован: 01 ноя 2019, 07:11

Доброе время суток!
Подключился к ростелекому и довольно часто по dhcp получаю белый ip адрес. Возник вопрос о скрипте проверки серого ip и если он серый делать пере подключение pppoe. За основу была взята статья Ростелеком. Проверка на серый IP
в профиле pppoe\scripts\on up
/system script run (script имя)

Создаем скрипт (script имя) в нем пишем:

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

:local WANInter "pppoe-ваше имя"
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http url=http://ifconfig.co dst-path=ip.txt;
:local currentIPfile [/file get ip.txt contents];
# parse the current IP result
:local curetlen ([:len $currentIPfile] -1);
:local currentIP [:pick $currentIPfile 0 $curetlen];
:log info "On ifconfig.co Current IP is $currentIP";
#get WAN IP on interface
:local IpInterfaceCurrent [/ip address get [find interface=$WANInter] address];
:for i from=( [:len $IpInterfaceCurrent] - 1) to=0 do={
  :if ( [:pick $IpInterfaceCurrent $i] = "/") do={
    :local NewIP [:pick $IpInterfaceCurrent 0 $i];
    :log info "WAN IP is $NewIP";
    #Compare IP
    :if ($currentIP = $NewIP) do={
      #its normal     
      /log info "Connect OK";
    } else={
      #Gray IP. Do restart
      /log info "Connected to gray IP";
     /system script run (pppoe-ваше имя)
    }
 
   }
}
Создаем скрипт pppoe-restart

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

/interface pppoe-client disable (pppoe-ваше имя);
:delay 10;
/interface pppoe-client enable (pppoe-ваше имя);


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Есть мнение что без надобности писать в ПЗУ неправильно, поэтому лучше как-то так
:local httpResponse [:tool fetch url="https://api.telegram.org/$borisovmikrot ... timeout=60" as-value output=user];
:local content ($httpResponse->"data");


vladimir.alekseev
Сообщения: 20
Зарегистрирован: 17 авг 2019, 16:34

:local ipc [/ip address get [find interface=$WANInter] address];
:local isGray [:tobool ($ipc in 10.0.0.0/8 or $ipc in 172.16.0.0/12 or $ipc in 192.168.0.0/16)]

Не проще будет?


Аватара пользователя
seva150785
Сообщения: 19
Зарегистрирован: 09 июн 2022, 08:29
Откуда: Тольятти

odioniks писал(а): 28 июл 2021, 17:07 #Compare IP
:if ($currentIP = $NewIP) do={
#its normal
/log info "Connect OK";
} else={
#Gray IP. Do restart
/log info "Connected to gray IP";
/system script run pppoe-ваше имя;
}

}
}
Вот тут убрал скобки, после "ваше имя" поставил ; и перед /system script run ... добавил пробел.
После чего скрипт заработал.
vladimir.alekseev писал(а): 28 дек 2021, 07:15 :local ipc [/ip address get [find interface=$WANInter] address];
:local isGray [:tobool ($ipc in 10.0.0.0/8 or $ipc in 172.16.0.0/12 or $ipc in 192.168.0.0/16)]

Не проще будет?
Подскажите пожалуйста, то что вы предлагаете это пул серых адресов пропускать?
Как правильно эти строки в скрипт встроить, просто я не силен в скриптах...
Но являюсь абонентом Ростелекома и при реконнекте, с получением серого IP, cloud MikroTik недоступен становится, а тут нашел , что можно скрипт использовать, чтобы ручками не реконнектить...


Аватара пользователя
seva150785
Сообщения: 19
Зарегистрирован: 09 июн 2022, 08:29
Откуда: Тольятти

В общем скрипт работает только раз и при условии, что есть в логах запись "Connected to grey IP".
А почему один раз, потому что потом приходит ответ "UNKNOWN", он же светится и в логах, хотя ip на микротике и снаружи разные, т.е. микрот получил серый, но сервис не смог определить получается какой IP - серый или белый.
В логах вот что
Изображение

Помогите пожалуйста, как решить это дело?
По факту, нужно, чтобы я всегда мог достучаться по VPN до MikroTik'а из вне, по выданному ему ddns cloud.


ivk
Сообщения: 3
Зарегистрирован: 20 сен 2022, 05:38

seva150785 писал(а): 06 июл 2022, 14:53 В общем скрипт работает только раз и при условии, что есть в логах запись "Connected to grey IP".
А почему один раз, потому что потом приходит ответ "UNKNOWN", он же светится и в логах, хотя ip на микротике и снаружи разные, т.е. микрот получил серый, но сервис не смог определить получается какой IP - серый или белый.
В логах вот что
Изображение

Помогите пожалуйста, как решить это дело?
По факту, нужно, чтобы я всегда мог достучаться по VPN до MikroTik'а из вне, по выданному ему ddns cloud.
:global currentIP
# Проверяем какой у нас "ip" на интерфейсе с именем: "pppoe" и записываем его в переменную newIP
:global newIP [/ip address get [find interface="pppoe"] address];
# Если ip-адрес входит в подсеть 10.0.0.0/8 то передергиваем pppoe (отключаем-ждем_1_сек-включаем)
:if ($newIP in 10.0.0.0/8) do={
/interface pppoe-client disable pppoe
:delay 1
/interface pppoe-client enable pppoe
} else={
# иначе проверяем условие: если наш ip-адрес записанный в переменную $newIP не совпадает с тем что в переменной $currentIP
:if ($newIP != $currentIP) do={
# высылаем на свою почту письмо с значением ip-адреса в теме письма
[tool e-mail send to=you-mail@ya.ru subject=$newIP]
# а так же в телеграм напишем: как настроить бота можно найти в интернете если
[tool fetch url="https://api.telegram.org/bot**********: ... ext=$newIP"];
# запишем в переменную $currentIP текущего НЕ10,0,0,0 адреса, чтобы при следующих итерациях скрипта нам снова не прилетали сообщения
# с и так уже известным нам ip-адресом.
[:set currentIP $newIP]}}
# Закидываем скрипт в Scheduler и задаем желаемый интервал его выполнения.
# Если вдруг ваш роутер или роутер провайдера перезагрузится или дернется линк на вышеупомянутых устройствах
# и ip изменится, скрипт вам об этом сообщит сам.


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# НАСТРОЙКА ЯНДЕКС ПОЧТЫ:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tool e-mail
set address=smtp.yandex.ru from="you-mail@ya.ru" password=mailpassword \
port=465 start-tls=tls-only user=you-mail@ya.ru


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

# Если вдруг ваш роутер или роутер провайдера перезагрузится или дернется линк на вышеупомянутых устройствах
# и ip изменится, скрипт вам об этом сообщит сам.
А вот это вряд-ли. Если ip изменится ещё не известно будет ли доступен маршрут в Мир и если нет, то соответственно скрипт ничего сообщить не сможет ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
ivk
Сообщения: 3
Зарегистрирован: 20 сен 2022, 05:38

Sertik писал(а): 20 сен 2022, 14:15
# Если вдруг ваш роутер или роутер провайдера перезагрузится или дернется линк на вышеупомянутых устройствах
# и ip изменится, скрипт вам об этом сообщит сам.
А вот это вряд-ли. Если ip изменится ещё не известно будет ли доступен маршрут в Мир и если нет, то соответственно скрипт ничего сообщить не сможет ...
Какой маршрут? Речь о PPPoE сессии, это туннель точка точка, (ip вашего компа - BRAS провайдера и никаких шлюзов и маршрутов) а дальше там никакая маршрутизация не меняется.

Не вводите людей в заблуждение скрипт работает так как и описан.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Ну Вам виднее ... А всё же не лишним было бы перед пересылкой на почту отрезолвить smtp сервер и пингануть 8.8.8.8 чтобы знать наверняка дойдут ли Ваши информационные сообщения или нет. Да и обработку ошибок прикрутить не плохо бы ло бы.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
ivk
Сообщения: 3
Зарегистрирован: 20 сен 2022, 05:38

Sertik писал(а): 21 сен 2022, 11:14 Ну Вам виднее ... А всё же не лишним было бы перед пересылкой на почту отрезолвить smtp сервер и пингануть 8.8.8.8 чтобы знать наверняка дойдут ли Ваши информационные сообщения или нет. Да и обработку ошибок прикрутить не плохо бы ло бы.
Да легко:
:global chekping [/ping 8.8.8.8 count=3]
:if ($chekping != 0) do={ выше_предложенный скрипт}


Ответить