скрипт для микротика для РТ (выход из серых 100. адресов)
Изящно. Работает?
ЗЫ у меня более топорно:
#local function
#get first octet current IP external interface
:local currentIP [/ip address get [find interface="RT" disabled=no] address]
#get first octet
:local decimalPos
:local octet
:set decimalPos [:find $currentIP "."];
:set octet [:pick $currentIP 0 $decimalPos];
:if ($octet = 100) do={
:log info "Выдан IP $currentIP ! Реконнект...";
/interface disable RT;
:delay 3s;
/interface enable RT;
} else {
:log info "Текущий IP $currentIP .";
};
kemy
писал(а)
быстрый реконнект адрес не меняет
Если приглядитесь, то он не такой уж и быстрый. Задержка 3 сек. Вполне достаточно.
Несколько лет уже этот скрипт работает. Никаких проблем. IP меняется при КАЖДОМ срабатывании. Правда, иногда следующий выдаётся тоже 100.х.х.х (хотя и другой), поэтому интервал в планировщике выставил 1 мин. Так что больше 2-3 минут на сером не остаётся.
Те. этот скрипт запускается после каждого ppp коннекта.
те. я создал доп. ppp-профиль, где прописан этот on-up скрипт, а в конфигурации интерфейса РТ прописано, что использовать этот специальный ppp-профиль (по-умолчанию там используется ppp-профиль Default).
Вот туда и пишите - как интерфейс поднимется, то запустится скрипт. Если адрес будет не тот - сбрасывайте и поднимайте по новой и так по кругу.
:local newIP [:pick [/ip address get [find interface ="RT"] address ] 0 3]
:if ($newIP = 100) do={
/interface pppoe-client disable RT
:delay 5
/interface pppoe-client enable RT
}
#!/opt/bin/bash
#net_addr="100.64.0.0"
net_addr="100.99.0.0"
net_pref="10"
ip2int ()
{
local IFS=. ip num e
ip=($1)
for e in 3 2 1 0
do
(( num += ip[3-e] * 256 ** e ))
done
echo $num
}
start_int=`ip2int $net_addr`
(( end_int = start_int + 2 ** ( 32 - net_pref ) - 1 ))
echo $start_int $end_int
ip=$(ip -f inet -o addr show ppp0|cut -d\ -f 7 | cut -d/ -f 1)
ip_int=`ip2int $ip`
echo $ip_int
if [[ $ip_int -ge $start_int && $ip_int -le $end_int ]];
then
service wan restart
fi