пятница, 22 октября 2010 г.

Пингующий скрипт

Стандартная задача "маршрутизации" для бедных. Дано: два провайдера и выход в интернет. Один из каналов считается основным, второй резервным. И необходимо переключать маршрут с одного провайдера на другого, перестраивая таблицу маршрутизации. При этом не имеется ни автономной системы, ни, тем более, анонсирования маршрутов со стороны провайдера. Выходом является создание пингующего скрипта, который проверяет доступность внешнего ресурса, и на основании этих данных принимает какое-либо решение. Прямо напрашивается программирование. Ну я то знаю, что нет ничего удобнее для программирования, чем lisp. Итог - дебиан-пакет reserve-channel, который находится в lisp-репизотрии для Ubuntu и Debian. Сами исходные тексты можно посмотреть тут. Задача обобщена для n каналов, где n больше 1, поэтому есть возможность развёртывания системы для каналов больше двух. Ну и, напоследок, пример конфигурационного файла:

(:config
(:channel
(:interface "eth2")
(:gateway "192.168.2.1")
(:routed t)
(:purpose :main))
(:channel
(:interface "eth1")
(:gateway "192.168.0.200")
(:routed t)
(:purpose :reserve))
(:test-host (:hostname "google.ru"))
(:test-host (:hostname "ya.ru")))

1 комментарий: