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 и побудит вас настроить его в случае необходимости под свои нужды.
    Поделиться публикацией

    Комментарии 3

      0
      Могли бы просто написать что вам впадлу править форматирование, оформить пост как положено да и вообще срать на читателя. Думаю, это бы точнее передавало смысл этого псто.
        +1
        Да вроде нормально отформатировано. А вам обязательно новогоднюю елку надо?
          +1
          можно ссылочку на «как положено»?
          imho код вполне читаемый, а если он кому-то непонятен — раскраска тут не поможет

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

        Самое читаемое