Dynamiczna konfiguracja sieci w oparciu o ifplugd

Spis treści

Sporo użytkowników różnego rodzaju linux'ów, zwłaszcza dystrybucji Debian, niezbyt chwali sobie automaty konfigurujące połączenie sieciowe typu Network Manager. W sumie nigdy się jemu bliżej nie przyglądałem ale na necie nie cieszy się on najlepszą opinią. Niemniej jednak, Network Manager potrafi automatyzować pewne aspekty pracy w sieci. Weźmy przykład korzystania z dwóch różnych pod względem parametrów sieci przewodowych. Jak się zachowa nasz OS w chwili przełączania się między tymi sieciami w przypadku, gdy nie będziemy mieli zainstalowanego jakiegoś automatu dynamicznie konfigurującego połączenie? W przypadku jednej sieci, połączenie będzie nam działać, w przypadku drugiej zaś napotkamy problemy. W lekkich środowiskach opartych o menadżery okien, np. Openbox, nie musimy instalować Network Manager'a, by ogarnąć tę kwestię konfiguracyjną. Możemy posiłkować się demonem ifplugd i to tym narzędziu będzie ten wpis.

Po co nam ifplugd

Demon ifplugd jest przeznaczony głównie dla bardzo okrojonych linux'ów pozbawionych środowisk graficznych (GNOME, KDE). Generalnie, to znajduje on zastosowanie wszędzie tam, gdzie ręcznie konfigurujemy połączenie sieciowe, zwykle za pomocą pliku /etc/network/interfaces . W tym pliku znajdują się zwrotki konfigurujące poszczególne interfejsy, np. eth0 . Poniżej jest przykład takiej konfiguracji:

#allow-hotplug eth0
auto eth0
iface eth0 inet dhcp

W przypadku korzystania z allow-hotplug , interfejs eth0 zostanie podniesiony za każdym razem, gdy nastąpi zdarzenie hotplug. Z kolei zaś jeśli używamy auto , to system podniesie ten interfejs tylko podczas fazy boot. Linijka z iface eth0 określa jak ten interfejs ma zostać skonfigurowany. Tutaj wykorzystywany jest protokoł DHCP do pobrania adresacji IPv4, czyli standardowe podejście.

Problem w tym, że zdarzenia hotplug pojawiają się w momencie podłączania/odłączania urządzenia od komputera. Ta karta sieciowa, której interfejs jest skonfigurowany powyżej, siedzi wewnątrz PC i nie podłączamy jej za każdym razem, gdy chcemy nawiązać połączenie sieciowe. Karta zostanie wykrywa tylko raz podczas fazy boot i skonfigurowana w tym konkretnym momencie. Jeśli zatem spróbujemy podłączyć się do innej sieci, już po zalogowaniu się do systemu, to nasz linux będzie korzystał ze starych ustawień sieci, czego efektem będzie brak połączenia. Poniżej jest zobrazowany moment konfiguracji połączenia i przepięcia do drugiej sieci:

konfiguracja-sieci-ifplugd-eth0-log

Ostatnie dwa komunikaty, tj. eth0: link down oraz eth0: link up informują nas, że połączenie zostało zerwane w tym momencie. Może i zostało ono ponownie ustanowione, tylko co z tego, jak nie została pobrana nowa konfiguracja sieci? By to połączenie znów nam działało, musimy ręcznie położyć i podnieść interfejs eth0 za pomocą poniższych poleceń:

# ifdown eth0
# ifup eth0

No i tu właśnie do gry wchodzi demon ifplugd , którzy jest w stanie zautomatyzować ten powyższy proces.

Jak działa ifplugd

Demon ifplugd działa sobie w tle i monitoruje poszczególne interfejsy pod kątem ich aktywności. W przypadku podpięcia przewodu do portu przyporządkowanego interfejsowi eth0 , demon ifplugd wykryje to zdarzenie i zainicjuje akcję konfiguracji tego interfejsu sieciowego. Podobnie sprawa ma się w przypadku odłączenia przewodu. Jeśli chodzi zaś o interfejsy WiFi, to ifplugd nie działa z nimi i trzeba o tym pamiętać.

Zainstalujmy sobie zatem potrzebne narzędzia i skonfigurujmy demona ifplugd . W dystrybucji Debian, ten demon znajduje się w pakiecie ifplugd i nie powinno być problemów z jego instalacją w systemie. Po tym jak proces instalacyjny dobiegnie końca, w terminalu jako root wpisujemy poniższe polecenie:

# dpkg-reconfigure ifplugd

Naszym oczom pokaże się szereg okienek, które pomogą nam skonfigurować demona ifplugd .

Poniżej określamy wszystkie interfejsy przewodowe, które mają być ogarniane przez ifplugd (te bez hotplug'u) :

konfiguracja-sieci-ifplugd-eth0

W następnym okienku określamy interfejsy z hotplug'iem:

konfiguracja-sieci-ifplugd-eth0

Dalej mamy instrukcję dotyczącą opcji demona (można przewijać strzałkami). Domyślnie są wykorzystywane te poniższe flagi:

konfiguracja-sieci-ifplugd-eth0

Z tych powyższych dostosowujemy jedynie -u i -d odpowiadające za czas rekonfiguracji interfejsu sieciowego. W tym przypadku ustawiliśmy czas 2 sekundy. Po odłączeniu przewodu, interfejs zostanie położony po około dwóch sekundach. Podobnie sprawa wygląda po podłączeniu przewodu do karty sieciowej, z tym, że tutaj interfejs zostanie podniesiony po dwóch sekundach.

Ostatnie okienko zaś dotyczy hibernacji/wstrzymania, tj. co zrobić w przypadku, gdy przełączymy nasz system w taki stan. Dobrze jest tutaj ustawić stop , bo to zresetuje demona po wybudzeniu, co przydaje się przy korzystaniu z narzędzi takich jak guessnet lub whereami , które są w stanie wykryć zmiany w środowisku sieciowym, np. podczas hibernacji laptop z roboty przynieśliśmy do domu i tutaj go podłączamy do sieci.

konfiguracja-sieci-ifplugd-eth0

Wszystkie te powyżej określone ustawienia są zapisywane w pliku /etc/default/ifplugd (dawniej w /etc/ifplugd/ifplugd.conf ). Demona możemy naturalnie konfigurować bezpośrednio przez ten plik, tylko pamiętajmy, by zresetować demona po dokonaniu zmian.

Test połączenia

Demon powinien już nasłuchiwać i przydałoby się przetestować jak działa nasze połączenie sieciowe. Podłączamy zatem przewód do karty sieciowej i patrzymy w log:

konfiguracja-sieci-ifplugd-eth0-log

Jak widzimy, demon ifplugd podniósł interfejs sieciowy eth0 i uzyskaliśmy adresację sieci. No to teraz wyciągnijmy wtykę z portu i zobaczmy co się stanie:

konfiguracja-sieci-ifplugd-eth0-log

Interfejs został położony zgodnie z planem. No to jeszcze sprawdźmy czy przy podłączeniu do drugiej sieci, adresacja zostanie zmieniona również bez większego problemu:

konfiguracja-sieci-ifplugd-eth0-log

I o takie zachowanie nam chodziło.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.