Monitoring interfejsów z ifstated

Daemon ifstated monitoruje status interfejsów sieciowych w systemie OpenBDS oraz umożliwia wykonanie odpowiedniej akcji (polecenia) w przypadku wykrycia zmian. Zmianą taką może być włączenie/wyłączenie karty sieciowej lub brak odpowiedzi na ping.

Przykładowa konfiguracja

W poniższym przykładzie korzystamy z dwóch połączonych ze sobą maszyn (redundancja przy użyciu carp). Firewall fw-m korzysta też z modemu DSL. Więcej informacji na temat redundancji w OpenBSD znaleźć można we wpisie „Redundantny Firewall w OpenBSD”, natomiast o konfiguracji DSL w OpenBSD można przeczytać tutaj. Będziemy monitorować zarówno stan interfejsów carp, jak i łącza DSL (pppoe0). Schemat poniżej:


ifstated używa pliku /etc/ifstated.conf do konfiguracji:

root@fw-m:/>cat /etc/ifstated.conf
init-state master 

carp_up = "carp0.link.up && carp2.link.up"
carp_init = "carp0.link.unknown || carp2.link.unknown"
pppoe0_up = "pppoe0.link.up && vr1.link.up"
pppoe0_down = "!pppoe0.link.up || !vr1.link.up"

state master {
        init {
                run "echo fw-m is now in MASTER state | mail -s 'fw-m ifstated state: MASTER' root@localhost"
        }
        if ($carp_init)
          run "sleep 2"
        if (! $carp_up)
         set-state backup
        if ($pppoe0_up)
        {
          run "echo fw-m DSL is UP | mail -s 'fw-m ifstated DSL up' root@localhost"
          run "pfctl -f /etc/pf.conf"
        }
        if ($pppoe0_down)
        {
	   run "echo fw-m DSL is DOWN | mail -s 'fw-m ifstated DSL down' root@localhost"
           run "pfctl -f /etc/pf.conf-nodsl"
        }

}
state backup {
        init {
          run "echo fw-m is now in BACKUP state | mail -s 'fw-m ifstated state: BACKUP' root@localhost"
        }
        if ($carp_init)
          run "sleep 2"
        if ($carp_up)
          set-state master
}

W powyższym przykładzie fw-m działa domyślnie w stanie master (init-state master). Definiujemy po 2 zdarzenia dla interfejsów carp oraz pppoe. carp_up jeżeli obydwa interfejsy carp są włączone oraz carp_init jeżeli ich stan nie jest jeszcze zdefiniowany. Podobnie dla interfejsu pppoe1 (który jest połączony z vr1). Jeżeli wszystko działa poprawnie system wyśle na wybrany adres 2 maile oraz zrestartuje firewall’a.
Gdy ifstated wykryje, że interfejs pppoe0 lub vr1 nie działają, ponownie prześle odpowiedniego maila oraz dodatkowo włączy firewall’a bez obsługi DSL (/etc/pf.conf-nodsl).
W przypadku usterki któregoś z interfejsów carp system zmieni status na backup oraz oczywiście prześle maila.

Konfigurację można przetestować wpisując:

root@fw-m:/>ifstated -n -v
carp_up = "carp0.link.up && carp2.link.up"
carp_init = "carp0.link.unknown || carp2.link.unknown"
pppoe0_up = "pppoe0.link.up && vr1.link.up"
pppoe0_down = "!pppoe0.link.up || !vr1.link.up"
ifstated: configuration OK

Jeżeli wszystko się zgadza możemy włączyć daemona wpisując po prostu polecenie ifstated.
Jak widać konfiguracja jest bardzo prosta, a możliwość uruchamiania poleceń/skryptów podczas wykrycia zmiany na interfejsach daje szerokie pole do popisu oraz pozwala na zbudowanie niezawodnego systemu.

Zostaw komentarz


Podpowiedź - możesz użyć tych HTML tagów i atrybutów:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Obraz CAPTCHY

*