Перезагрузка роутера, при зигрузке CPU
:local maxcpuload 99 :local i :local maxcpuloadcounter 0 for i from=1 to=10 step=1 do={ :set maxcpuloadcounter ($maxcpuloadcounter + [ /system resource get cpu-load]) # :log info ($i . "=". $maxcpuloadcounter) :delay 1 } :if (($maxcpuloadcounter/10) > $maxcpuload) do={ /system reboot; }
Копирование и применение последней актуальной понфигурации
:local interA [/interface ethernet find mac-address=«FF:FF:40:40:40:41»] :if ($interA != "") do={ /tool fetch address=10.1.1.2 src-path=lastconfig.backup mode=ftp user=ftp password=VeryHightPassword!!!11 :delay 10 system backup load name=lastconfig.backup }
То есть забираем по FTP lastconfig.backup и восстанавливаемся с него. FTP пользователь должен быть настроен, желательно с ограничением доступа по IP. Обратите внимание, что к FTP подключаемся по IP-адресу локального физического интерфейса, который доступен только между роутерами.
Этот скрипт ставим в планировщик на несколько минут позже выполнения скрипта резервного копирования.
И последний скрипт — применение настроек на резервном сервере. В нем также используется МАС для идентификации роутера.
:local intA [/interface ethernet find mac-address=«FF:FF:40:40:40:41»] :if ($intA != "") do={ /system identity set name=router-slave /ip address remove [/ip address find address=«10.1.1.2/29»] /ip address add address=10.1.1.3/29 interface=lan /interface vrrp set priority=100 preemption-mode=yes numbers=vrrp-lan }
Здесь меняем имя роутера, ip-адрес LAN-интерфейса и приоритет VRRP на меньший, чтобы роутер сделать слейвом. Запуск этого скрипта нужно поставить в автозагрузку. Изменения будут происходить на резервном сервере после копирования и применения последней актуальной конфигурации.
Резервное копирование
:local mserver :local mkomu :local msubject :local bjmeno :set mkomu «root@server.ru» :set msubject («Backup ». [/system identity get name]) :set bjmeno ([/system identity get name]. "-". [:pick [/system clock get date] 7 11]. [:pick [/system clock get date] 0 3]. [:pick [/system clock get date] 4 6]. ".backup" ) /system backup save name=$bjmeno /system backup save name=lastconfig :delay 5 :put ($mserver."n") /tool e-mail send subject=$msubject file=$bjmeno to=$mkomu body=(«Backup from ». [/system clock get date]. " mikrotik ". [/system identity get name]. ".") :put («Backup ». $bjmeno. "n")
Проверка статуса роутера и выключение интерфейса
:if ([/interface get vrrp running]=false) do={ :if ([/interface get wan disabled]=false) do={ /interface disable wan } } :if ([/interface get vrrp running]=true) do={ :if ([/interface get wan disabled]=true) do={ /interface enable wan } }
Подключение к динамическим серверам или сервисам, на примере pptp-соединения
Скрипт:
:local dvpn [:resolve "ДОМЕННОЕ_ИМЯ_СЕРВЕРА"]; /interface pptp-client set НОМЕР_ВАШЕГО_СОЕДИНЕНИЯ connect-to=$dvpn;
И создаём шедулер:
/system scheduler add disabled=no interval=5m name=Chk_dvpn on-event=ИМЯ_СКРИПТА policy= read,write,policy,test,sensitivei start-date=aug/10/2017 start-time=16:11:19
Проверка синтаксиса скрипта
/system script print from=script_name
Настройка на 2 провайдера:
# Настройка локальной сети /ip address add address=192.168.50.2/24 network=192.168.50.0 broadcast=192.168.50.255 interface=Local # Настройка сети провайдеров /ip address # PPPoE /interface pppoe-client add add-default-route=yes default-route-distance=1 disabled=no interface= ether1 keepalive-timeout=60 max-mru=1500 max-mtu=1500 mrru=1600 name= WAN1 password=XXXXXXX user=XXXXXXX add add-default-route=yes default-route-distance=1 disabled=no interface= ether2 keepalive-timeout=60 max-mru=1500 max-mtu=1500 mrru=1600 name= WAN2 password=XXXXXXX user=XXXXXXX /ip firewall mangle add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1 add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2 add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes add chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1 add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2 /ip route add dst-address=0.0.0.0/0 gateway=WAN1 routing-mark=to_WAN1 check-gateway=arp add dst-address=0.0.0.0/0 gateway=WAN2 routing-mark=to_WAN2 check-gateway=arp add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=arp add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=arp /ip firewall nat add chain=srcnat out-interface=WAN1 action=masquerade add chain=srcnat out-interface=WAN2 action=masquerade
Блокировка трафика по времени:
Если нужно запретить трафик по времени ночью, скажем с 22:00 до 10:00 утра:
0) Стандартный способ – использовать два правила с временными промежутками 22:00:00-23:59:59 и 00:00:00-10:00:00
1) Использовать через запрет – Где-то в конце есть правило, которое запрещает, а конкретным правилом разрешать.
/ip firewall filter add chain=forward dst-address=8.8.8.8 protocol=icmp src-address=192.168.0.0/16 time=10h-22h,sun,mon,tue,wed,thu,fri,sat add action=reject chain=forward protocol=icmp src-address=192.168.0.0/16
2) Использовать шедулер –
также создаём правило в файрволе, но не указываем конкретное время –
/ip firewall filter add action=reject chain=forward dst-address=8.8.8.8 protocol=icmp src-address=192.168.0.0/16
Далее получаем номер правила с помощью
ip firewall filter print
И теперь создаём два правила шедулера –
/system scheduler add interval=1d name=schedule1 on-event="ip firewall filter disable 1r n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=sep/19/2016 start-time=10:00:00 add interval=1d name=schedule2 on-event="ip firewall filter enable 1r n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=sep/19/2016 start-time=22:00:00
Отправка почты при изменении состояния порта:
# Checking ether9 link :local smtpserv [:resolve "smtp.yandex.ru"]; :local email "domain@yandex.ru"; :local pass Password; :global "ether9-stat" :global "ether9-laststat" /interface ethernet monitor ether9-ups once do={:set "ether9-stat" $status} :if ($"ether9-stat" != $"ether9-laststat") do={ /tool e-mail send server=$smtpserv port=587 user=$email password=$pass start-tls=yes to="admin@domain.ru" from=$email subject="$[/system identity get name]: power status changed" body=("$[/system clock get date] nInterface ether9 - link status changed to:_" . $"ether9-stat"); :log info ("Interface ether9 - link status changed to: " . $"ether9-stat") :set "ether9-laststat" $"ether9-stat" }
Делаем бекап конфигов микрота и отправляем на удаленный FTP сервер:
local username “никнейм”
#ftp account
local ftphost “имя сервера”
local ftpuser “логин”
local ftppassword “пароль”
local ftppath “/pub/mikrotik”#create full system backup files
/system backup save name=”$username.backup”
:delay 30s;#create config export files
/export compact file=”$username.rsc”
:delay 30s;# upload the system backup
:log info message=”Uploading system backup”
/tool fetch address=”$ftphost” src-path=”$username.backup” user=”$ftpuser” mode=ftp password=”$ftppassword” dst-path=”$ftppath/$username.backup” upload=yes
:delay 30s;# upload the config export
:log info message=”Uploading config export”
/tool fetch address=”$ftphost” src-path=”$username.rsc” user=”$ftpuser” mode=ftp password=”$ftppassword” dst-path=”$ftppath/$username.rsc” upload=yes
:delay 30s;# find file name $username- then remove
:foreach i in=[/file find] do={ :if ([:typeof [:find [/file get $i name] “$username”]]!=”nil”) do={/file remove $i}; }
:log info message=”Configuration backup finished.”;
}
Еще один скрип бекапа на FTP
# ftp configuration
:local ftphost “host”
:local ftpuser “user”
:local ftppassword “pass”
:local ftppath “folder_ftp”
# months array
:local months (“jan”,”feb”,”mar”,”apr”,”may”,”jun”,”jul”,”aug”,”sep”,”oct”,”nov”,”dec”);
# get time
:local ts [/system clock get time]
:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8])
# get Date
:local ds [/system clock get date]
# convert name of month to number
:local month [ :pick $ds 0 3 ];
:local mm ([ :find $months $month -1 ] + 1);
:if ($mm < 10) do={ :set mm (“0” . $mm); }
# set $ds to format YYYY-MM-DD
:set ds ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])
# file name for system backup – file name will be Mikrotik-servername-date-time.backup
:local fname1 (“/Mikrotik-“.[/system identity get name].”-“.$ds.”-“.$ts.”.backup”)
# file name for config export – file name will be Mikrotik-servername-date-time.rsc
:local fname2 (“/Mikrotik-“.[/system identity get name].”-“.$ds.”-“.$ts.”.rsc”)
# backup the data
/system backup save name=$fname1
:log info message=”System backup finished (1/2).”;
/export compact file=$fname2
:log info message=”Config export finished (2/2).”
# upload the user manager backup
:log info message=”Uploading system backup (1/2).”
/tool fetch address=”$ftphost” src-path=$fname1 user=”$ftpuser” mode=ftp password=”$ftppassword” dst-path=”$ftppath/$fname1″ upload=yes
# upload the config export
:log info message=”Uploading config export (2/2).”
/tool fetch address=”$ftphost” src-path=$fname2 user=”$ftpuser” mode=ftp password=”$ftppassword” dst-path=”$ftppath/$fname2″ upload=yes
# delay time to finish the upload – increase it if your backup file is big
:delay 30s;
# find file name start with Mikrotik- then remove
:foreach i in=[/file find] do={ :if ([:typeof [:find [/file get $i name] “Mikrotik-“]]!=”nil”) do={/file remove $i}; }
:log info message=”Configuration backup finished.”;
Бекап по частям
Микротик1 (экспорт):
ip pool export file=ip-pool.rsc
ip route export file=ip-route.rsc
Микротик2 (импорт):
import file=ip-pool.rsc
import file=ip-route.rsc
Прикручиваем клиент DDNS сервиса no-ip.org
:local ddnspass “пароль”
:local ddnshostname “dns имя”
:local ddnsinterface “внешний интерфейс”:global ddnslastip
:local str
:local ddnsip
:local ip:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip “0” }:local ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]:if ([ :typeof $ddnsip ] = nil ) do={
:log info (“ServiceDNS: No ip address on $ddnsinterface .”)
} else={:for i from=( [:len $ddnsip] – 1) to=0 do={
:if ( [:pick $ddnsip $i] = “/”) do={
:set ddnsip [:pick $ddnsip 0 $i];
}
}:if ($ddnsip != $ddnslastip) do={:log info (“ServiceDNS: $ddnshostname -> $ddnsip”):local str “/nic/update?hostname=$ddnshostname&myip=$ddnsip”
/tool fetch url=”http://dynupdate.no-ip.com/$str” mode=http user=$ddnsuser password=$ddnspass dst-path=(“/ServiceDNS.”.$ddnshostname)
:delay 1:local str [/file find name=”ServiceDNS.$ddnshostname”];
:log info [/file get $str contents];
/file remove $str
:global ddnslastip $ddnsip}}
Добавляем автоматически 254 маршрута:
или
Указываем мост одной командой для всех интерфейсов:
Меняем MAC на интерфейсе на свой:
Проверяем шлюз провайдера, если он отличается от статического – синхронизируем:
:global ispgwstat [ip route get [/ip route find comment=”ISP1″ ] gateway ];#:log info (“$ispgw” )
#:log info (“$ispgwstat” ):if ($ispgw = $ispgwstat ) do={ :log info (“ISP GW OK” ) } else={ ip route set [/ip route find comment=”ISP1″] gateway=$ispgw; :log info (“ISP GW COMPLETE” )}
Если через PPPOE соединение некоторые сайты не открываются.
Необходимо сделать изменения в Firewall > Mangle.
Удалить динамические правила change MSS all ppp.
Добавить правило:
Изменить профиль, что бы динамические правила больше не создавались:
Локальное перенаправление портов:
add action=dst-nat chain=dstnat dst-address=192.168.224.1 dst-port=8181
in-interface=bridge-local protocol=tcp src-address=192.168.224.0/24
to-addresses=192.168.224.20 to-ports=8080
add action=dst-nat chain=dstnat dst-address=192.168.224.1 dst-port=8182
in-interface=bridge-local protocol=tcp src-address=192.168.224.0/24
to-addresses=192.168.224.20 to-ports=555
add action=src-nat chain=srcnat dst-address=192.168.224.20 dst-port=8080
out-interface=bridge-local protocol=tcp src-address=192.168.224.0/24
to-addresses=192.168.224.1 to-ports=8181
add action=src-nat chain=srcnat dst-address=192.168.224.20 dst-port=555
out-interface=bridge-local protocol=tcp src-address=192.168.224.0/24
to-addresses=192.168.224.1 to-ports=8182
Если через PPPOE соединение некоторые сайты не открываются, необходимо сделать изменения в Firewall > Mangle.
Удалить динамические правила change MSS all ppp.
Добавить правило:
Изменить профиль, что бы динамические правила больше не создавались:
PPP > Prifiles > Default > General > Change TCP MSS “no”.
Прикручиваем клиент DDNS сервиса no-ip.org #2
##############Script Settings##################
:local NOIPUser “логин_ноип”
:local NOIPPass “пароль_ноип”
:local WANInter “интерфейс_в_инет”
###############################################
:local NOIPDomain “домен_ноип”
:local IpCurrent [/ip address get [find interface=$WANInter] address];
:for i from=( [:len $IpCurrent] – 1) to=0 do={
:if ( [:pick $IpCurrent $i] = “/”) do={
:local NewIP [:pick $IpCurrent 0 $i];
:if ([:resolve $NOIPDomain] != $NewIP) do={
/tool fetch mode=http user=$NOIPUser password=$NOIPPass url=”http://dynupdate.no-ip.com/nic/update3Fhostname=$NOIPDomain&myip=$NewIP” keep-result=no
:log info “NO-IP Update: $NOIPDomain – $NewIP”
}
}
}
Дописать текст в файл:
:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]):local ds [/system clock get date]
:set ds ([:pick $ds 7 11].[:pick $ds 0 3].[:pick $ds 4 6]):local ContentsFile [/file get isp-stat.txt contents];
/file set isp-stat.txt contents=”$ContentsFilenISP DOWN-$ds-$ts”
Проверка средней скорости интернет и запись в log файл:
:local rxAvg 0:local ts [/system clock get time]
:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]):local ds [/system clock get date]
:set ds ([:pick $ds 7 11].[:pick $ds 0 3].[:pick $ds 4 6])tool bandwidth-test protocol=tcp direction=transmit address=ip_bandsw_test_server duration=5s do={
:set txAvg ($”tx-total-average” / 1048576 );
}tool bandwidth-test protocol=tcp direction=receive address=ip_bandsw_test_server duration=5s do={
:set rxAvg ($”rx-total-average” / 1048576 );
}:local ContentsFile [/file get isp-quality.txt contents];
/file set isp-quality.txt contents=”$ContentsFilen$ds-$ts tx: $txAvg Mbps – rx: $rxAvg Mbps”
Цвет лога:
log warning “blah blah this log is in blue”
log error “blah blah this log is in red”
Дополнительная информация при запуске консоли Mikrotik:
add interval=1m name=InfoConsole on-event=”:local contentr
n:local logcontenttemp ””r
n:local logcontent ””r
n:local counterr
n:local v 0r
n r
n:set logcontenttemp ”You are logged into: $[/system identity get name]
”r
n:set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n r
n:set logcontenttemp ”############### system health ###############”r
n:set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n r
n:set logcontenttemp ”Uptime: $[/system resource get uptime] d:h:m:s”
r
n:set logcontent (”$logcontent” .”$logcontenttemp” .” | ”)r
n r
n:set logcontenttemp ”CPU: $[/system resource get cpu-load]%”r
n:set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n r
n:set logcontenttemp ”RAM: $(([/system resource get total-memory]-[/sys
tem resource get free-memory])/1024)/$([/system resource get total-memory
]/1024)M”r
n:set logcontent (”$logcontent” .”$logcontenttemp” .” | ”)r
n r
n##r
n#voltage and temp readout not available on x86, check for this before tr
yingr
n#to record otherwise script will halt unexpectedlyr
n##r
n r
n:if ([/system resource get architecture-name]=”x86”) do={r
n :set logcontenttemp ”Voltage: NIL”r
n :set logcontent (”$logcontent” .”$logcontenttemp” .” | ”)r
n :set logcontenttemp ”Temp: NIL”r
n :set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n} else={r
n :set logcontenttemp ”Voltage: $[:pick [/system health get voltage] 0
_2] v”r
n :set logcontent (”$logcontent” .”$logcontenttemp” .” | ”)r
n :set logcontenttemp ”Temp: $[ /system health get temperature]c”r
n :set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n}r
n r
n:set logcontenttemp ”############# user auth details #############”r
n:set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n r
n:foreach counter in=[/ip hotspot active find ] do={:set v ($v + 1)}r
n:set logcontenttemp ”Hotspot online: $v |”r
n:set v 0r
n:foreach counter in=[/ppp active find ] do={:set v ($v + 1)}r
n:set logcontenttemp (”$logcontenttemp” . ” PPP online: $v”)r
n:set logcontent (”$logcontent” .”$logcontenttemp” .”\n”)r
n r
n/system note set note=”$logcontent”” policy=
ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api
start-date=jun/16/2013 start-time=14:44:00
Просто красивая заставка 🙂
1: /system note set note=" ##### n ### ###### n ###### ####### n ########### ########## n ## ################### n ### # ##### # n ####### # ## # n ### ############### n ## ### ###### n ## ### ###### n # ############ n ################# n ######## #### ### ### n ## # # ## ## n ## # # # ## n # ## ## # # ## n # ## ## # ## ## n ### # # ## ## # n ###### ### # ### # n ###### ########## ## # n ##### ## # # # ## n #### # ## ## # n # # # # # ## n ## ## # ## # # n ## # ## # ## # n ## # #### ## # ## n ## # ## # ## # n ## # ## ######## ## # n # # ######## ## ## ## n ### # ##### ## ## # n ##### # # ## ## # # n ####### ## # ## # # ###### n ###### ## ## # ## # # ##### n ## # ### ## # ## # # ### # #### n ########## # # # ############## n ########## # # # ############### n############ # # # ################ n############ ############ ########### n### # ##### ## # ######## n ######### ## # ###### n ########## ##### n # ## # "
Ежедневная смена пароля на роутере Mikrotik на пароль построенный по дате
:local wifiProfile wifiMyProfile
:local dateNow [/system clock get date];
:local dateNowDay [:pick $dateNow 4 6]
:local dateNowMonth [:pick $dateNow 0 3]
:local dateNowYear [:pick $dateNow 7 11]
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:set dateNowMonth ([:find $months $dateNowMonth -1 ] + 1)
:if ( $dateNowMonth < 10 ) do={
:set $dateNowMonth ("0"."$dateNowMonth");
};
:log info message="==== NOW DATE: day: $dateNowDay month: $dateNowMonth year: $dateNowYear"
:local newPassword ("$dateNowDay" . "$dateNowMonth" . "$dateNowYear");
:log info message="==== NEW PASSWORD: $newPassword"
/interface wireless security-profiles set [find name=$wifiProfile] wpa2-pre-shared-key=$newPassword