Админская фамилия

Make Sysadmins Great Again

Проверка пропускной способности канала на Mikrotik

Скрипт для Mikrotik RouterOS, тестирующий пропускную способность канала и записывающий результат в файл. Перед запуском создать файл isp-quality.txt и указать IP своего btest сервера в ipbandswtestserverhttps://github.com/devi1/RouterOS-scripts/tree/master/bandwidth%20test:local txAvg 0:local rxAvg 0:local ipbandswtestserver your.btest.server.ip:local btuser btest:local btpwd btest:local ts [/system clock get time]:local ContentsFile [/file get isp-quality.txt contents]:local ds [/system clock get date]:set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]):set ds ([:pick $ds 7 11].[:pick $ds 0 3].[:pick $ds 4 6])tool bandwidth-test protocol=tcp direction=transmit address=$ipbandswtestserver duration=5s do={:set txAvg ($“tx-total-average” / 1048576 );}tool bandwidth-test protocol=tcp direction=receive address=$ipbandswtestserver duration=5s do={:set rxAvg ($“rx-total-average” / 1048576 );}/file set isp-quality.txt contents="$ContentsFile\n$ds-$ts tx: $txAvg Mbps - rx: $rxAvg Mbps"


Мikrotik RouterOS Configuration Management с помощью скриптов и какой-то там матери

Жизненный цикл сети часто переживает закономерный рост. В это время начинают появляться десятки и сотни устройств, конфигурация которых однотипна. Например, это могут быть маршрутизаторы в филиалах, которые имеют одинаковые настройки и отличаются только IP адресами, паролями на VPN и Wi-Fi. Внесение даже незначительных изменений на десяток устройств потребует значительного времени и концентрации.

Для управления сотнями и тысячами устройств весь цивилизованный мир уже давно использует специальные системы менеджмента конфигураций: Ansible, Chef, Puppet. Каждая из них имеет свои плюсы и минусы.


Yet another RouterOS script

Скрипт ищет интерфейс sstp клиента, имя которого содержит в себе строку video, копирует имя интерфейса, имя пользователя и пароль для подключения, а так же адрес vpn сервера. Удаляет упоминание об этом интерфейсе в настройках OSPF (т.к. после удаления появится интерфейс unknown, а без удаления интерфейса новый не создастся - имена одинаковые), создает нешифрованное соединение pptp с аналогичными настройками и вписывает его в параметры OSPF.#!Ищет sstp-интерфейс с именем, содержащим video#! копирует его настройки, убирает номер порта и#! создает pptp интерфейс с подобными настройками#! Copyright Dmitry Bubnov http://bubnovd.net/interface sstp-client:local name [get [find name~“video”] name]:local srv [get [find name~“video”] connect-to]:local conto [:pick $srv 0 ([:len $srv]-4)]:local user [get [find name~“video”] user]:local pwd [get [find name~“video”] password]/routing ospf interface remove [find interface=$name]remove $name/interface pptp-client add connect-to=$conto user=$user password=$pwd name=$name allow=mschap2 disabled=no profile=default/routing ospf interface add interface=$name cost=9 network-type=point-to-point Он же в Python для пакетного изменения:#!/usr/bin/env pythonfrom RosAPI import Coremas = []with open(“list.txt”) as f: mas = f.read().splitlines()for i in range(len(mas)): try: a = Core(mas[i]) except: print “No Connection” else: a.login(“user”, “password”) print i a.talk(["/system/script/add", “=name=” + “temp”, “=source=” + ‘#! Copyright Dmitry Bubnov http://bubnovd.net\r\n/interface sstp-client\r\n:local name [get [find name~"video"] name]\r\n:local srv [get [find name~"video"] connect-to]\r\n:local conto [:pick $srv 0 ([:len $srv]-4)]\r\n:local user [get [find name~"video"] user]\r\n:local pwd [get [find name~"video"] password]\r\n/routing ospf interface remove [find interface=$name]\r\nremove $name\r\n/interface pptp-client add connect-to=$conto user=$user password=$pwd name=$name allow=mschap2 disabled=no profile=default\r\n/routing ospf interface add interface=$name cost=9 network-type=point-to-point’]) a.talk(["/system/script/run", “=.id=” + “temp”]) a.talk(["/system/script/remove", “=.id=” + “temp”]) print mas[i]  


Самый полный мануал по резервированию интернета на Mikrotik RouterOS

В сети много мануалов по фэйловеру на RouterOS и подобрать нужный под конкретные цели иногда проблематично. В ходе своих экспериментов я выяснил, что наиболее универсальным является этот способ. Но у меня возникло несколько вопросов, ответы на которые я пока не нашел.

/ip route  
add dst-address=**Host1** gateway=GW1 scope=**10**  
add dst-address=**Host2** gateway=GW2 scope=**10**
/ip route  
add distance=1 gateway=**Host1** routing-mark=ISP1 check-gateway=ping  
add distance=2 gateway=**Host2** routing-mark=ISP1 check-gateway=ping
/ip route  
add distance=1 gateway=**Host2** routing-mark=ISP2 check-gateway=ping  
add distance=2 gateway=**Host1** routing-mark=ISP2 check-gateway=ping

Я делаю немного по-другому: первые две строки точно такие же, а дальше:


Скрипт для проверки наличия USB-модема на RouterOS

Понадобился скрипт, определяющий наличие USB-модема, подключенного к Mikrotik. Присылает на почту название модема и его серийник. Хорошо бы допилить скрипт до отправки уровня сигнала и количества денег на счете, но мои модемы не дают доступа к своему меню - надо шить.:log info “Starting Modem Info Script…”;:local sysname [/system identity get name];:local sysver [/system package get system version];:local mname [/system resource usb get 1 value-name=name];:local mnumber [/system resource usb get 1 value-name=serial-number];:local smtpserv [:resolve “smtp.mail.ru”];:local Eaccount “mail@mail.ru”;:local pass “your_password”;:log info “Collecting Information”;:delay 5;:log info “Sending Information via E-mail…”;/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv </span>port=587 user=$Eaccount password=$pass start-tls=yes </span>subject=("$sysname Modem Information (" . [/system clock get date] . “)”) </span>body=("$sysname Modem.\nTime and Date stamp: " . [/system clock get time] . " " . </span>[/system clock get date] . “\nModem $mname, SN: $mnumber”);:log info “Modem Info Complete!”;