Lumber room
October 2009 7

ifstated (монитор сетевых интерфейсов)

злобная копи-паста моего же текстика с www.efolution.org

По материалам «Calomel.org» (перевод и легкая адаптация)

Описание программы

ifstated — отслеживает состояние сети/сетей и выполняет различные команды в зависимости от изменения состояний сетевых интерфейсов. Отслеживание производится как по прямой проверке «состояния» в данных ОС (включен ли интерфейс, есть ли физическое подключение), так и путем выполнения «тестов» с помощью внешних программ (например, банальный ping).

ifstated благодаря своей гибкости может не только перезапускать проблемные сетевые соединения, но и выполнять более сложные оперции, контролирую и динамически настраивая carp(4) и pf(4).

В принципе ifstated представляет из себя набор конструкций if-then, что и дает возможность заложить любую логику поведения программы.


Использование программы

Настройка ifstated производится с помощью /etc/ifstated.conf. В качестве образца можно взять один из типовых примеров ниже или написать свой с нуля.

После подготовки файла настройки запустите /usr/ifstated.

Для автоматического запуска при загрузке системы добавьте строку ifstated_flags="" в файл /etc/rc.conf.local.

Образцы применения и настройки.

Пример 1. Контроль состояния «простого» подключения с DHCP.

Лично я использую этот пример лично на своем нетбуке, по причине проблемной работы точки доступа с usb-брелком wi-fi. Проблема заключается в том, что рано или поздно, но всегда не вовремя соединение странным образом «подвисает», спасает переполучение IP по DHCP.

В соответствии с приведенным ниже файлом настройки ifstated выполняет следующее:

1. Проверяет включенность (up) интерфейса.

2. Проверяет наличие IP.

3. Пытается пропинговать google три раза с задержкой между пакетами 2 секунды.

Если какой либо из «тестов» провалился, то интерфейс помечается как offline, после чего запускаются соответствующие команды для его приведения в рабочее состояние, а именно ifconfig rum0 up и перезапуск dhclient.

После того, как интерфейс запустится, на почту root@localhost будет отправлено письмо с упоминанием о проблеме.

Содержимое файла ifstated.conf

#
## Calomel.org — /etc/ifstated.conf
## Efolution.org
#

init-state auto
net_check = '( «ifconfig egress | grep \»status: active\" && \
ifconfig egress | grep \«inet *.*.*.* netmask\» | grep -v \«inet 192\» && \
ping -q -c 3 -i 2 -w 1 www.google.com > /dev/null" every 120)'
state auto {
if $net_check {
set-state if_online
}

if! $net_check {
set-state if_offline
}
}

state if_online {
init {
run «ifconfig egress | mail -s 'External Interface ON-line' root@localhost»
}
if! $net_check {
set-state if_offline
}
}

state if_offline {
init {
run «ifconfig egress | mail -s 'External Interface OFF-line' root@localhost»
run «pkill dhclient;sleep 2;ifconfig rum0 up && sleep 2 && \
ifconfig egress | grep \»status: active\" && /sbin/dhclient rum0"
}

if $net_check {
set-state if_online
}
}

Пример 2. Мониторинг виртуальных CARP устройств.

Данная настройка может быть использована для отслеживания master машины. ifstated отслеживает Carp1 и в случае смены состояния отправляет письмо на root@localhost.

Содержимое файла ifstated.conf

#
## Calomel.org — /etc/ifstated.conf
## Efolution.org
init-state auto
fw_carp_up = «carp1.link.up»
fw_carp_init = «carp1.link.unknown»
state auto {
if ($fw_carp_init)
run «sleep 10»
if ($fw_carp_up)
set-state fw_master
if (! $fw_carp_up)
set-state fw_slave
}

state fw_master {
init {
run «echo MASTER firewall is now `hostname` | mail -s 'Firewall State Change: MASTER' root@localhost»
}
if ($fw_carp_init)
run «sleep 2»
if (! $fw_carp_up)
set-state fw_slave
}
state fw_slave {
init {
run «echo SLAVE firewall is now `hostname` | mail -s 'Firewall State Change: SLAVE' root@localhost»
}
if ($fw_carp_init)
run «sleep 2»
if ($fw_carp_up)
set-state fw_master
}

Проверка работоспособности настроек

Запустите команду, ifstated -dvv

Таким образом ifstated запустится выводя всю информацию о своей деятельности на экран, что позволит увидеть его поведение на ваши «запросы».

Послесловие

Думаю приведенные выше примеры позволяют оценить весь потенциал ifstated и побудит вас настроить его в случае необходимости под свои нужды.
+5
751 5
Comments 3
Top of the day