Динамическое управление маршрутизатором CISCO Systems
Решение, описанное в данной статье, позволяет в режиме реального
времени управлять доступом клиентов (фильтровать трафик абонентов)
через маршрутизатор CISCO Systems. Подобная задача возникает,
например, при необходимости отключать или подключать абонентов к
услуге в зависимости от какого-либо условия без прерывания доступа
всех остальных абонентов. Например, в зависимости от состояния
лицевого счета абонента. Применительно к LANBilling, поставленная
задача запуском внешних исполняемых процедур может решаться только
частично. А именно, LANBilling запускает на исполнение внешние
исполняемые файлы (скрипты) при наступлении важных событий в системе с
точки зрения управления доступом (блокировка/разблокировка абонента,
создание/удаление группы), однако, для решения поставленной задачи
только лишь применением скриптов обойтись нельзя.
Поставленная задача подразумевает управление маршрутизатором
удаленно. Есть несколько способов управления маршрутизатором удаленно
- RSH, SNMP. Первый способ позволяет передавать на маршрутизатор
команду, однако, не позволяет исполнить на маршрутизаторе
последовательность команд, например, попытка исполнить
последовательность conf t ; int E0/0 потерпит неудачу. RSH удобно
использовать для просмотра информации о маршрутизаторе. Для управления
маршрутизатором мы выбрали второй способ по причине того, что в
методе, описанном в этой статье, используется загрузка
последовательности команд (а именно, активной конфигурации с TFTP
сервера) чего средствами RSH сделать невозможно, ввиду того, что даже
команда загрузки конфигурации через TFTP потребует дополнительного
ввода с консоли.
Для того, что бы иметь возможность управлять маршрутизатором
удаленно необходимо в первую очередь провести соответствующую
настройку маршрутизатора, а именно, дать маршрутизатору понять с
какого IP адреса и с каким паролем (community string) им будут
управлять уполномоченные лица. Проще всего показать необходимые
настройки в виде команд подлежащих исполнению в режиме конфигурации с
терминала:
snmp-server community password RW
Где password пароль, который будет применяться при конфигурировании.
Для того, что бы ограничить доступ по SNMP к маршрутизатору, мы
применяем соответствующий extended access list.
Для обновления конфигурации маршрутизатора используется файл,
содержащий активную конфигурацию маршрутизатора. Данный файл должен
находиться в корневой директории уже настроенного TFTP сервера (мы
используем tftpd, входящий в комплект поставки Linux).
Файл, о котором идет речь, редактируется посредством исполняемых
файлов системы контроля доступа, причем не на прямую, а с помощью
редактора ACL - LANBilling Cisco Access Control List Editor, служебной
утилиты, входящей в комплект поставки LANBilling, предназначенной для
вставки и удаления необходимых записей в соответствующий лист доступа
по сигналу скрипта (исполнительного механизма) системы контроля.
Файлы, необходимые для загрузки листов доступа на маршрутизатор CISCO,
называются: vg.on.rsh и vg.off.rsh. Содержимое файлов показано ниже:
vg.on.rsh:
#!/bin/sh
#
# $1 - ip
# $2 - mask
# $3 - allow addr
/usr/local/billing/LBacledit 1 $1 $2 $3 >
/usr/local/billing/LBacledit.log
exit 0
vg.off.rsh:
#!/bin/sh
#
# $1 - ip
# $2 - mask
# $3 - allow addr
/usr/local/billing/LBacledit 0 $1 $2 $3 >
/usr/local/billing/LBacledit.log
exit 0
Также как и в других файлах vg.on/off LANBilling передает скриптам
несколько (3) параметров - адрес клиента (IP или сегмент), маску, в
соответствии с которой указан адрес клиента и IP адрес ресурса, на
котором функционирует клиентский интерфейс системы LANBilling, на
который в случае отключения клиента от услуги желательно оставить
возможность доступа для получения клиентом информации о состоянии
своего лицевого счета.
LBacledit воспринимает несколько параметров командной строки,
описание которых приведено в подсказке при запуске редактора.
LANBilling v.1.7 access control list editor for Cisco routers. ER3,
23.04.2003
usage: LBacledit [-h] mode ip netmask allowaddress
where: mode = 0 (lock ip), 1 (unlock ip)
ip = user ip address
netmask = user network mask
allowaddress = billing user interface ip address to which access will
not be blocked
Основным параметром редактора является первый, указывающий режим
редактирования - либо предоставление доступа (значение 1) либо
отключение доступа (значение 0).
LBacledit требует предварительной настройки маршрутизатора, чтобы
утилита смогла распознать тот лист доступа, в который необходимо
вставлять записи управляющие доступом абонентов. В первую очередь
необходимо указать, что номер листа доступа должен быть 101 (это
жестко указанное условие в дальнейших обновлениях будет
конфигурируемым параметром). Этот лист доступа должен быть назначен на
внутренний интерфейс маршрутизатора следующей командой в режиме
конфигурации с терминала привелегированного режима:
ip access-group 101 in
Помимо этого требуется создать заготовку листа доступа содержащего
как минимум две команды. Первая, разрешающая доступ для тех сетей,
услуга которым предоставляется безусловно, вторая блокирующая весь
остальной трафик. Пример подобной заготовки листа доступа приведен
ниже. Обратите внимание на директиву no access-list 101 в начале листа
доступа, она необходима для корректной загрузки списка из файла
активной конфигурации.
no access-list 101
access-list 101 permit ip host 192.168.2.3 any
access-list 101 permit ip host 192.168.2.11 any
access-list 101 permit ip 192.168.1.0 0.0.0.7 any
access-list 101 deny ip any any
Последним неконфигурируемым параметром LBacledit является
местоположение и путь к файлу текущей конфигурации, который в данной
версии должен быть /tftproot/active-config, в будущих обновлениях этот
и несколько дополнительных параметров будут загружаться из командной
строки или отдельного файла конфигурации.
Логика работы LBacledit такова, что все необходимые инструкции для
управления доступом, вставляются (или удаляется) в файл активной
конфигурации выше, чем последняя директива, блокирующая доступ через
интерфейс. При вставлении или удалении инструкций в файл активной
конфигурации редактор листов доступа преобразует адреса и маски,
переданные ему в качестве параметров, в формат используемый
маршрутизатором. Например маска 255.255.255.248 будет преобразована в
0.0.0.7, а в лист доступа будет добавлена или удалена инструкция
регулирующая доступ для целого сетевого сегмента, описанного адресом и
соответствующей маской. LBacledit добавляет/удаляет не одну директиву
в список доступа а две. Вторая директива описывает IP адрес ресурса,
на который абоненту необходимо оставить доступ при его отключении от
услуги. Эта директива необходимо, что бы абонент мог просматривать
содержимое своего лицевого счета даже при заблокированном состоянии.
Предполагается, что web интерфейс работает на 80 (http) порту.
При запуске скриптов vg.on.rsh и vg.off.rsh, файл с активной
конфигурацией, который должен находится в корневой директории уже
настроенного TFTP сервера изменяется и подлежит загрузке на
маршрутизатор. Есть два подхода к загрузке конфигурации на
маршрутизатор - немедленно после изменения и через периодические
интервалы времени с помощью crond. Мы предпочитаем использовать второй
подход в связи с тем, что при достаточном количестве абонентов при
первом подходе, загрузка активной конфигурации на маршрутизатор может
стать очень частым событием, что не может положительно сказаться на
стабильности работы маршрутизатора. Директива из /etc/crontab выглядит
следующим образом:
*/5 * * * * root /usr/local/billing/put_config
Где put_config - shell исполняемый файл, содержащий SNMP директиву,
описанную чуть ниже.
Для того чтобы дать команду маршрутизатору загрузить файл с
конфигурацией с определенного TFTP сервера мы применяем следующую SNMP
команду:
snmpset -t 60 -c password А.А.А.А .1.3.6.1.4.1.9.2.1.53.В.В.В.В s
active-config
Где password - community string для управляемого маршрутизатора,
находящегося по адресу A.A.A.A, а В.В.В.В адрес TFTP сервера, на
котором располагается файл активной конфигурации маршрутизатора
active-config. Команда snmpset входит в комплект поставки свободно
распространяемого пакета UCD-SNMP, дистрибутив которого, как правило,
имеется в поставке Unix.
Утилита, описанная в данной статье, LBacledit может быть
безвозмездно загружена с нашего сервера в разделе Поддержка ->
Загрузка файлов -> Некоммерческие версии.