Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Напишем скрипт для переключения маршрутов в Mikrotik Routerboard

 29 Мар 2011    MikroTik, Scripts

 

 Скрипт для переключения маршрутов в Mikrotik

Рис.1. Схема сети.

 

Организовали соседей, подключили к Mikrotik Routerboard два канала Интернет, поделили соседей между каналами. Все работает и все довольны.

Через некоторое время началось: то "канал перегружен", то "пинги больные", "переключите меня на другой канал"... Чтобы каждый раз не бегать и не переключать, можно написать скрипт. Тогда пользователь будет самостоятельно его запускать и переключать себя на другой канал.

Распределение между каналами организованно таким образом, что ip-адреса, занесенные в Address List с именем pppoe-out1, следует направлять через первый канал, а IP-адреса, которые относятся к Address List с названием pppoe-out2, нужно выводить в Интернет через второй канал. Для того, чтобы пользователь переключился на другой канал, ему необходимо переместить свой IP-адрес в соответствующий Address List.

 

 Mikrotik Routerboard, Address List

Рис.2. Mikrotik Routerboard, Address List.

 

Для того, чтобы это реализовать, нам понадобится два файла:

  1. Обычный текстовый файл с произвольным названием, например, rout.txt. В этом файле будет хранится название Address List, к которому в данный момент относится IP-адрес пользователя.
  2. Второй файл - это сам скрипт, который будет перебрасывать ip-адрес пользователя между Address List.

 

Скрипт такой:

 

from paramiko import SSHClient

from paramiko import AutoAddPolicy

import socket

ip_user = socket.gethostbyname(socket.gethostname())

f = open('rout.txt', 'r')

readed = f.readline()

f.close()

f = open('rout.txt', 'w')

if readed == 'pppoe-out1':

f.write('pppoe-out2')

readed = 'pppoe-out2'

f.close()

else:

f.write('pppoe-out1')

readed = 'pppoe-out1'

f.close()

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

ssh.connect('192.168.4.253', port=22, username='user1', password='1q2w3e')

rcmd = "/ip firewall address-list remove [find address=%s]" % (ip_user)

acmd = "/ip firewall address-list add address=%s list=%s" % (ip_user,readed)

ssh.exec_command(rcmd)

ssh.exec_command(acmd)

ssh.close()

Разберем скрипт:

 

Подключаем нужные модули:

from paramiko import SSHClient

from paramiko import AutoAddPolicy

import socket

ip_user = socket.gethostbyname(socket.gethostname()) – определяем IP-адрес пользователя;

f = open('rout.txt', 'r') – открываем файл для чтения;

readed = f.readline() – заносим содержимое файла в переменную readed;

f = open('rout.txt', 'w') – открываем файл для записи.

if readed == 'pppoe-out1':

f.write('pppoe-out2')

readed = 'pppoe-out2'

f.close()

else:

f.write('pppoe-out1')

readed = 'pppoe-out1'

f.close()

Выполняем проверку, к какому Address List в данный момент принадлежит iP-адрес пользователя, и меняем его на противоположный. 

ssh = SSHClient()

ssh.set_missing_host_key_policy(AutoAddPolicy())

ssh.connect('192.168.4.253', port=22, username='user1', password='1q2w3e')

rcmd = "/ip firewall address-list remove [find address=%s]" % (ip_user)

acmd = "/ip firewall address-list add address=%s list=%s" % (ip_user,readed)

ssh.exec_command(rcmd)

ssh.exec_command(acmd)

ssh.close()

Изменяем значения в Mikrotik Routerboard.

 

Mikrotik Routerboard Address List. Запуск скрипта

Рис.3. Mikrotik Routerboard Address List. Запуск скрипта.

 

Mikrotik Routerboard Address List. Результат выполнения скрипта

Рис.4. Mikrotik Routerboard Address List. Результат выполнения скрипта.

 

После выполнения скрипта IP-адрес был перемещен в другой Address List. Осталось сделать из скрипта exe-файл и раздать соседям.

Евгений Рудченко специально для ASP24.