Рис.1. Схема сети.
Организовали соседей, подключили к Mikrotik Routerboard два канала Интернет, поделили соседей между каналами. Все работает и все довольны.
Через некоторое время началось: то "канал перегружен", то "пинги больные", "переключите меня на другой канал"... Чтобы каждый раз не бегать и не переключать, можно написать скрипт. Тогда пользователь будет самостоятельно его запускать и переключать себя на другой канал.
Распределение между каналами организованно таким образом, что ip-адреса, занесенные в Address List с именем pppoe-out1, следует направлять через первый канал, а IP-адреса, которые относятся к Address List с названием pppoe-out2, нужно выводить в Интернет через второй канал. Для того, чтобы пользователь переключился на другой канал, ему необходимо переместить свой IP-адрес в соответствующий Address List.
Рис.2. Mikrotik Routerboard, Address List.
Для того, чтобы это реализовать, нам понадобится два файла:
- Обычный текстовый файл с произвольным названием, например, rout.txt. В этом файле будет хранится название Address List, к которому в данный момент относится IP-адрес пользователя.
-
Второй файл - это сам скрипт, который будет перебрасывать 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.
Рис.3. Mikrotik Routerboard Address List. Запуск скрипта.
Рис.4. Mikrotik Routerboard Address List. Результат выполнения скрипта.
После выполнения скрипта IP-адрес был перемещен в другой Address List. Осталось сделать из скрипта exe-файл и раздать соседям.
Евгений Рудченко специально для ASP24.




