Автоматизация при помощи встроенного скриптового языка и RouterOS API
chas99
Сообщения: 128 Зарегистрирован: 10 фев 2017, 08:52
Сообщение
chas99 » 10 фев 2017, 08:58
помогите пожалуйста со скриптом
провайдер при подключении к интернету выдает динамический адрес, в основном "белые", но бывает и серые, например 10.50.*.* нужно чтобы mikorik 'понимал', что внешний ip серый и тогда бы разрывал и по новой соединялся..
Код: Выделить всё
#:local reconnectPPPoE do={
/interface pppoe-client set internet disable=yes;
:delay 5s;
/interface pppoe-client set internet disable=no;
#}
Chupaka
Сообщения: 4095 Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Сообщение
Chupaka » 10 фев 2017, 14:27
Код: Выделить всё
:local priv false;
:foreach a in=[ /ip address find (address~"^10\\." or address~"^192\\.") and interface=internet ] do={ :set $priv true; }
:if ($priv) do={
/interface pppoe-client disable internet;
:delay 5s;
/interface pppoe-client enable internet;
}
chas99
Сообщения: 128 Зарегистрирован: 10 фев 2017, 08:52
Сообщение
chas99 » 11 фев 2017, 05:04
СПАСИБО ОГРОМНОЕ!
работает!!!
а еще подскажите пожалуйста, как сделать чтобы этот скрипт запускался автоматом при подключении к интернету?
или пусть будет как я сейчас сделал в шедулере запуск каждые 10 минут?
Chupaka
Сообщения: 4095 Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Сообщение
Chupaka » 11 фев 2017, 17:17
Можно в профиле PPP-подключения указать запуск в скрипте On-Up
1f7
Сообщения: 5 Зарегистрирован: 07 апр 2017, 08:39
Сообщение
1f7 » 07 апр 2017, 08:50
тоже самое но без regexp:
Код: Выделить всё
:local priv false;
:foreach a in=[ /ip address and address=100.64.0.0/10 and interface=RT ] do={ :set $priv true; }
:if ($priv) do={
/interface pppoe-client disable internet;
:delay 5s;
/interface pppoe-client enable internet;
}
Желаю, чтобы все!
Chupaka
Сообщения: 4095 Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Сообщение
Chupaka » 07 апр 2017, 12:12
Вы таки ещё скажите, что оно у вас работает
"/ip address and address" — какая-то волшебная команда =)
1f7
Сообщения: 5 Зарегистрирован: 07 апр 2017, 08:39
Сообщение
1f7 » 07 апр 2017, 15:31
сначала 2 сети юзал, потом одну удалил, а "адрес" прибить забыл.
но, все равно, хоть один и лишний - работает
Желаю, чтобы все!
Chupaka
Сообщения: 4095 Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Сообщение
Chupaka » 07 апр 2017, 15:43
Вы точно ничего не путаете? С равенством у меня как-то совсем не получается (чего я, собственно, и ожидал):
Код: Выделить всё
[admin@TestPlace] /ip address> :put [ find address=192.168.0.0/16 ]
[admin@TestPlace] /ip address> :put [ find address in 192.168.0.0/16 ]
*1;*4;*5;*6;*7;*8;*9;*a
1f7
Сообщения: 5 Зарегистрирован: 07 апр 2017, 08:39
Сообщение
1f7 » 07 апр 2017, 16:02
все 1х1 скопировал из On-Up.
зачем find (return position of substring or array element)?
З.Ы. а в тике есть возможность получить логи соединений?
Желаю, чтобы все!
Chupaka
Сообщения: 4095 Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Сообщение
Chupaka » 07 апр 2017, 16:28
Значит, у вас скрипт просто не работает. Вставьте его в Терминал (не забыв заключить в фигурные скобки)
Не путайте команду "/ip address find" и функцию скриптового языка ":find".
Логи соединений всяких TCP - смотрите NetFlow; логи соединений PPP - тут вотчина RADIUS'а. Но в этой теме это уже оффтоп
1f7
Сообщения: 5 Зарегистрирован: 07 апр 2017, 08:39
Сообщение
1f7 » 07 апр 2017, 18:04
значит белый получаю случайно, хз
ок, поиграюсь на выходных
спасибо!
Желаю, чтобы все!
1f7
Сообщения: 5 Зарегистрирован: 07 апр 2017, 08:39
Сообщение
1f7 » 10 апр 2017, 08:36
скрипт в PPP -> Profiles -> "имя профиля"(default) -> Scripts -> On Up
Код: Выделить всё
:local curIP [/ip address get [find interface="Rostelecom"] address];
:if ($curIP in 100.64.0.0/10) do={
/interface pppoe-client disable Rostelecom
:delay 5s
/interface pppoe-client enable Rostelecom
}
проверка в терминале
Код: Выделить всё
:local curIP [/ip address get [find interface="Rostelecom"] address]; :put $curIP
пример с несколькими подсетями (
ИЛИ )
Код: Выделить всё
:global newIP [/ip address get [find interface="PPPoE"] address];
:if (($newIP in 82.0.0.0/8)||($newIP in 83.0.0.0/8)) do={
/interface pppoe-client disable PPPoE
:delay 30
/interface pppoe-client enable PPPoE
}
источник _https://toster.ru/q/323124
Желаю, чтобы все!