Sieci bezprzewodowe w obecnych czasach to standard i nie ma chyba miejsca na ziemi gdzie nie dałoby rady ulokować routera wi-fi, do którego można by podłączyć szereg urządzeń. Każdy kto próbował ręcznie konfigurować sieci wi-fi wie, że może to być bardzo upierdliwe, zwłaszcza jeśli mamy dostęp do wielu punków, które posiadają różne konfiguracje. Wynaleziono co prawda automaty, które mają pomagać w ogarnięciu tego całego bezprzewodowego zamieszania, np. network-manager czy wicd ale w przypadku lekkich stacji roboczych, takich jak openbox, powyższe pakiety mogą nie zdać egzaminu, poza tym mogą przysporzyć jeszcze więcej problemów przy konfiguracji.

W przypadku połączeń przewodowych, chyba każdy potrafi skonfigurować sobie takie połączenie przez plik /etc/network/interfaces. Jeśli chodzi o wi-fi, to można postąpić podobnie, tylko trzeba dopisać trochę więcej parametrów. Generalnie istnieją dwie metody konfiguracji: jedna zakłada wpisywanie opcji bezpośrednio do pliku /etc/network/interfaces , druga zaś ma na celu przeniesienie konfiguracji wszystkich sieci bezprzewodowych do osobnego pliku. Ta druga opcja ma tę przewagę, że można sobie zarządzać tym gdzie zostaniemy podłączeni w oparciu o określone priorytety, a gdy te są takie same, decydować będzie siła sygnału czy jakość zabezpieczeń. Innym plusem precyzowania profili wi-fi w osobnym pliku jest możliwość dynamicznego przełączania się między przewodowym i bezprzewodowym połączeniem w zależności od tego czy został podpięty przewód do gniazda.

Jeśli chodzi jeszcze o narzędzia służące do konfiguracji, to można natknąć się na szereg przestarzałych już programów ale wspieranych przez starsze urządzenia sieciowe. To oprogramowanie co prawda działa ale jeśli się posiada nowszy sprzęt, to powinno się pomyśleć o przejściu na nowsze standardy. np. pakiet wireless-tools został wyparty przez iw i podobnie zresztą też narzędzia zawarte w net-tools, takie jak np. ifconfig, zostały zastąpione przez iproute2 . W przypadku przechodzenia z wireless-tools na iw , można skorzystać ze ściągawki dostępnej pod tym adresem. Jeśli chodzi zaś o net-tools i iproute2, można skorzystać z rozpiski znajdującej się tutaj. Więcej na temat aktualnego oprogramowania i nowszych standardów sieciowych można poczytać tutaj i tutaj [1].

Dodatkowo będą nam potrzebne następujące narzędzia: wpasupplicant do obsługi wi-fi, ifplugd będzie odpowiadał za monitorowanie stanu interfejsów, np. czy przewód jest podpięty oraz guessnet. Ten ostatni co prawda nadaje się bardziej do profilowania połączeń na podstawie adresów ip i/lub adresów MAC ale bez niego były jakieś problemy z przełączaniem się z wi-fi na przewodowe i odwrotnie. Zatem instalujemy potrzebne paczuszki:

# aptitude install iw iproute2 wpasupplicant ifplugd guessnet

Będziemy operować na dwóch plikach: /etc/network/interfaces oraz /etc/wpa_supplicant/wpa_supplicant.conf , przy czym ten drugi trzeba stworzyć. Nie musimy go pisać od początku -- jest dostępny szkielet w /usr/share/doc/wpasupplicant/examples/wpa_supplicant.conf.gz , który wystarczy przekopiować do /etc/wpa_supplicant/ i odpowiednio przerobić.

Z racji faktu, że w obu powyższych plikach, w zależności od konfiguracji, mogą znajdować się hasła do sieci wi-fi, dobrze jest zmienić domyślne uprawnienia tych plików na 600:

# chmod 0600 /etc/network/interfaces
# chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf

Przechodzimy do edycji pliku /etc/network/interfaces . W moim przypadku on wygląda tak:

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

mapping eth1
    script guessnet-ifupdown
    map default: no_link
    map timeout: 5
    map verbose: true
    map debug: true

iface no_link inet manual
    test missing-cable
    pre-up false

iface home_wired_static inet static
    address 192.168.0.151
    network 192.168.0.0/24
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    test peer address 192.168.0.1 mac 11:22:33:44:55:66

allow-hotplug wlan0
auto wlan0
iface wlan0 inet manual
    wpa-driver nl80211
    wpa-debug-level -1
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    wpa-roam-default-iface home_wifi_static
    
iface home_wifi_static inet static
    address 192.168.0.150
    network 192.168.0.0/24
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

Opcja auto odpowiada za automatyczną konfigurację interfejsu via skrypt /etc/init.d/networking . Jeśli jakiś interfejs posiada opcję auto, będzie tym samym konfigurowany na starcie systemu. Ja rzadko korzystam z przewodowego połączenia, dlatego mam ustawione auto tylko w przypadku interfejsu wlan0. Dalej w pliku mamy iface , który posiada parametry konfiguracyjne interfejsu. Mamy tam dwa rodzaje interfejsów. Pierwszy z nich jest to interfejs fizyczny, do którego konfiguracja przypisywana jest bezpośrednio -- można ją podejrzeć przy pomocy narzędzi ip czy ifconfig. Drugim typem jest interfejs wirtualny, może przyjąć dowolną nazwę i w oparciu o dane umieszczone w nim, konfiguracja interfejsów fizycznych może przybierać formę dynamiczną. W taki oto sposób mamy tam dwa interfejsy fizyczne (eth1, wlan0) oraz trzy interfejsy wirtualne (no_link, home_wired_static, home_wifi_static), może być ich oczywiście więcej i można je konfigurować, albo statycznie (static), przy czym trzeba ręcznie określić address, network, netmask, broadcast oraz gateway, albo też skorzystać można z automatycznej konfiguracji (dhcp). Ja korzystam ze statycznej. Na obu interfejsach fizycznych operuje inne oprogramowanie. Wszystkie zwrotki posiadające mapping podpadają pod guessnet. Natomiast jeśli któraś z nich zawiera wpa- , oznacza to wykorzystanie wpasupplicant .

Rozpatrzmy teraz sam interfejs eth1. Narzędzie guessnet przeszuka wszystkie interfejsy wirtualne, w których skład wchodzi linijka test peer i spróbuje określić czy konkretny profil jest pożądany poprzez sprawdzenie czy w danej sieci znajdują się hosty o pewnych adresach ip i/lub adresach MAC. Po tym jak to zrobi, interfejs eth1 zostanie skonfigurowany. W przypadku gdyby żadna konfiguracja mu nie odpowiadała, zostanie użyta ta wskazana w map default .

Podobnie ma się sprawa w przypadku wlan0 z wykorzystaniem wpasupplicant, z tym, że profile sieci są definiowane w osobnym pliku. Konfiguracja wi-fi wymaga określenia różnych protokołów i kilku innych parametrów, których nie ma w przypadku połączenia przewodowego. Plik konfiguracyjny definiujemy przez wpa-roam i podobnie jak w przypadku eth1, można sprecyzować domyślny profil za pomocą wpa-roam-default-iface . Mamy tam także opcję zdefiniowania sterownika dla karty -- nowsze modele będą bezproblemowo działać z nl80211 , starsze zaś mogą mieć z nim problemy i w takim przypadku trzeba tam ustawić wext . Jeśli nie określi się sterownika, zostanie także użyty wext . Domyślnie też poziom logowania wpa_supplicant jest trochę zbyt niski i syslog może zbierać sporo komunikatów podobnych do tego poniżej:

wpa_supplicant[112756]: wlan0: WPA: Group rekeying completed with f3:92:d5:21:31:14 [GTK=CCMP]

W zależności od częstości zmian kluczy, może tych wiadomości być więcej lub mniej. Jako, że jest to tylko informacja, którą nie powinien sobie człowiek głowy zawracać, można ją zignorować i odsyfić syslog. Do tego celu służy parametr wpa-debug-level .

Jako, że część konfiguracji wi-fi znajduje się w pliku /etc/wpa_supplicant/wpa_supplicant.conf , zobaczmy jak on wygląda:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
eapol_version=2
ap_scan=1
country=PL
bss_max_count=200
filter_ssids=0

network={
        id_str="home_wifi_static"
        priority=10
        ssid="Winter Is Coming"
        bssid=11:22:33:44:55:66
        #psk="Moje haslo"
        psk=811339fbba9c799a6216ec3390bd1ae84680242fc0fcc918b0636a3dbe0fd310
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        auth_alg=OPEN
        scan_ssid=0
        disabled=0}

Powyższy plik składa się z dwóch części: globalnej i sieciowej. Parametry globalne, czyli te nieujęte w network={} są aplikowane do każdej sieci wpisanej poniżej. Z kolei wszystko to co się znajdzie w danym network={} dotyczy tylko i wyłącznie konkretnej sieci. Parametry w obu sekcjach mogą się różnić, w zależności od tego jaki sprzęt posiadamy i gdzie przebywamy, oraz ma też wpływ sama konfiguracja sieci na routerze. Powyższy config powinien działać w większości przypadków.

Sekcja globalna może zawierać ctrl_interface , który to składa się z dwóch opcji -- DIR oraz GROUP, z których pierwsza określa miejsce gdzie będzie tworzone gniazdo nasłuchujące zapytań od zewnętrznych programów, np w celu konfiguracji sieci. Druga opcja odpowiada za grupę, której członkowie będą mogli zarządzać konfiguracją wi-fi, przydatne w korzystaniu z wpa_cli , czy też z graficznych narzędzi, np. wpa_gui .

Możemy także określić wersję protokołu EAPOL przy pomocy eapol_version . Starsze urządzenia mogą mieć problemy z obsługą wersji 2. W takim przypadku trzeba ustawić tutaj "1".

Narzędzie wpa_supplicant może dokonywać skanowania pasma i wybrać najlepszą sieć, do której nas podłączy. Samą kwestię skanowania można również zostawić sterownikowi karty -- określamy to w ap_scan .

Wykorzystywanie pewnych konfiguracji wi-fi na terenie pewnych państw może być zakazane i by uniknąć nieporozumień, można zdefiniować profil w oparciu o miejsce pobytu przy pomocy parametru country . Zwykle jest to dwu znakowy kod państwa, np. dla Polski to będzie PL.

Jeśli w naszej okolicy jest dużo sieci bezprzewodowych, możemy ograniczyć ilość wpisów w cache za pomocą bss_max_count . Wpisy są dodawane do cache przy skanowaniu pasma radiowego, po tym jak zostanie napotkana jakaś sieć. Im jest ich więcej, tym też więcej zajmują one pamięci.

Istnieje również filtr sieci, który ma na celu zwrócenie jedynie tych wyników, do których posiadamy konfiguracje. Jeśli chcemy skorzystać z tego ficzera ustawiamy filter_ssids .

Warto mieć jeszcze na uwadze parametr update_config=1, po zdefiniowaniu którego będzie możliwa zmiana parametrów ustawionych w pliku /etc/wpa_supplicant/wpa_supplicant.conf przez zewnętrzne narzędzia konfiguracyjne. Jednak w takim przypadku zostaną usunięte wszystkie komentarze.

Jeśli chodzi o część sieciową, nie trzeba definiować wszystkich wypisanych wyżej parametrów, być może wystarczy samo ssid oraz psk. Jeśli jednak chce się mieć kontrolę nad konfiguracją i nie ufa się zbytnio automatom, które resztę parametrów powinny sobie dobrać same, można doprecyzować poszczególne opcje, tak jak to zostało zrobione powyżej.

Każda sieć musi posiadać unikalny identyfikator sieci (ssid). By się połączyć z siecią o danym ssid, trzeba znać hasło (psk), oczywiście tylko w przypadku gdy sieć jest zabezpieczona. Jako, że jest to hasło do naszej sieci, powinno być ono możliwe długie i skomplikowane, bo od niego, w głównej mierze, zależeć będzie bezpieczeństwo sieci. Mamy do wyboru dwa rodzaje haseł. Jednym z nich jest hasło w postaci czystego tekstu (7 bitowy kod ASCII [2]), przy czym musi ono zostać ujęte w "" i posiadać 8-63 znaków. Drugim typem hasła jest ciąg hexalny o długości 64 znaków, wpisywany bez "" . Nikomu za bardzo nie chce się wymyślać długich i skomplikowanych haseł ale istnieje narzędzie, które może wygenerować hasło szesnastkowe w oparciu o nazwę sesji (ssid) oraz o jakąś frazę, dajmy na to faktyczne hasło. Mowa oczywiście o wpa_passphrase . Poniżej przykład jego wykorzystania:

# wpa_passphrase "Moja siec" "Moje haslo"
network={
        ssid="Moja siec"
        #psk="Moje haslo"
        psk=811339fbba9c799a6216ec3390bd1ae84680242fc0fcc918b0636a3dbe0fd310
}

I w ten sposób, mając słabe hasło, można dość solidnie zabezpieczyć swoją sieć. Przy czym trzeba pamiętać, że ten ciąg zawsze będzie taki sam o ile ssid i hasło nie zostaną zmienione i każdy kto zna te dwie wartości może wygenerować sobie ten 64 znakowy ciąg.

Istnieje także możliwość sprecyzowania bssid , z którym chcemy się połączyć. Jest to nic innego jak tylko adres fizyczny danego urządzenia (MAC), podobny do tego w kartach sieciowych. W konkretnej sieci o określonym ssid może znajdować się kilka punków dostępowych. Każdy z tych routerów ma osobny bssid i jeśli z jakichś powodów chce się korzystać z konkretnego z nich, to trzeba określić jego adres za pomocą tego parametru.

Szyfr grupowy (group cipher) jest używany w przypadku transmisji ramek multicast, włączając w to broadcast, i musi być zrozumiały (taki sam) dla wszystkich powiązanych stacji roboczych. Szyfr parowy (pairwise cipher) jest wykorzystywany przez ramki unicastowe, np. połączenia http, i musi być zrozumiały dla routera i oddzielnie dla każdej ze stacji roboczych -- różne stacje mogą używać różnych szyfrów parowych. W WPA2 jest możliwość skonfigurowania routera by wspierał wiele unicastowych szyfrów parowych. Jednak tylko jeden szyfr grupowy jest wykorzystywany do kodowania ramek broadcast/multicast, tak by wszystkie stacje powiązane z daną siecią mogły być w stanie odebrać tego typu pakiety. Będzie to najsłabszy z dozwolonych szyfrów parowych. To dlatego można skorzystać, albo z TKIP, albo CCMP jeśli chodzi o szyfry parowe ale tylko TKIP może być wykorzystany jako szyfr grupowy. CCMP może być użyty jako szyfr grupowy ale tylko w przypadku gdy zdefiniowany jest on jako jedyny w dozwolonych szyfrach parowych.

Mamy także do dyspozycji kilka różnych protokołów zabezpieczających sieć przed nieautoryzowanym dostępem, np. WEP, WPA, czy WPA2. Choć na dobrą sprawę WEP już się do niczego nie nadaje. By poprawić bezpieczeństwo naszej sieci, możemy sprecyzować to, z którego protokołu zamierzamy korzystać. Możemy to zrobić za pomocą opcji proto . RSN odpowiada za WPA2. Nie wszystkie urządzenia, szczególnie te starsze, potrafią operować na tym protokole. Warto to wziąć pod uwagę w przypadku ewentualnych problemów z siecią. Ponad to, trzeba także mieć na względzie obciążenie sieci przez mocniejsze szyfrowanie w przypadku WPA2 -- może ono obniżyć maksymalną przepustowość łącza.

By dodatkowo zwiększyć poufność połączeń wewnątrz sieci wprowadzono protokół zarządzania kluczami uwierzytelniającymi (authenticated key management protocol). Definiowany jest on przez opcję key_mgmt). Zarządzanie kluczami może odbywać się w dwóch trybach. Pierwszym z nich jest WPA-PSK (Personal albo Pre-shared), gdzie wszystkie stacje robocze korzystają z tego samego klucza, co daje możliwość podsłuchiwania hostów w sieci. Niczym się taka sieć nie różni zbytnio od zwykłego LAN. Drugi tryb to WPA-EAP (Enterprise), który wykorzystuje serwer RADIUS do przydzielania kluczy każdemu użytkownikowi z osobna, szyfrując ruch wewnątrz sieci na podobnej zasadzie co w przypadku VPN.

Z kolei auth_alg określa rodzaj algorytmu uwierzytelniającego. Open system authentication (OPEN) składa się z dwóch komunikatów. Pierwszy z nich jest to prośba o uwierzytelnienie wysłana przez klienta do routera. Taka wiadomość zawiera ID stacji roboczej, zwykle jest to adres MAC. Drugi komunikat to odpowiedź routera na to żądanie i może ona zawierać wiadomość o powodzeniu lub porażce, np. gdy adres MAC klienta jest zbanowany w konfiguracji routera. W przypadku Shared Key Authentication (SHARED) obie strony połączenia dzielą między sobą ten sam klucz lub hasło, które jest ręcznie ustawiane zarówno na stacji klienckiej jak i na routerze. OPEN jest wymagany w przypadku WPA/WPA2, zaś SHARED dla WEP .

Sieci w dostępnym paśmie radiowym mogą być jawne albo ukryte. Różnią się one między sobą rozgłaszaniem informacji o swoim istnieniu w okolicy. Część osób uważa, że lepiej jest wyłączyć tego typu broadcast na routerze i schować w ten sposób sieć przed innymi osobami, które mogą spróbować ją spenetrować. W przypadku ukrytych sieci, każde urządzenie, które chce się podłączyć musi wysyłać próbki żądań z określonym ssid i jeśli taka sieć się znajduje w okolicy, odpowie na nie. Jeśli posiadamy ukrytą sieć, to by ją odnaleźć trzeba ustawić scan_ssid . Ukrywanie sieci jednak mija się z celem, gdyż ssid będzie rozgłaszane przez zaufane maszyny klienckie (co 60s) oraz przez router, który odpowiada na te żądania, a gdy już ktoś przechwyci taki komunikat, wie, że dana sieć gdzieś w pobliżu występuje i może się z nią próbować połączyć, a my dodatkowo jeszcze zdradzamy wszystkich jej klientów. No i oczywiście, w przypadku gdy sieć jest ukryta, inne routery nie mogą dobrać optymalnego kanału dla połączenia, co może skutkować sporymi zakłóceniami, np. gdy na jednym kanale nie widać żadnej sieci (a jest tam 10 ukrytych), a na pozostałych są 1-2 sieci, które widać. W takiej sytuacji router spróbuje wleźć na ten pozornie wolny kanał, co dodatkowo pogorszy komunikacje w obrębie wszystkich znajdujących się tam sieci-- normalnie, router by wszedł na którychś z mniej zapchanych kanałów.

Do sieci możemy łączyć się z automatu albo ręcznie. Jeśli mamy zaufaną sieć, możemy się do niej łączyć automatycznie. Natomiast jeśli w grę wchodzi jakiś publiczny access point, który nie jest w żaden sposób zabezpieczony, dobrze jest wyłączyć ten ficzer przez ustawienie disabled=1 .

Jeśli chodzi o kwestię automatycznej konfiguracji sieci bezprzewodowych i dynamicznego przełączania się między nimi, trzeba dodatkowo posłużyć się dwoma parametrami. Opcja id_str="home_wifi_static" odpowiada za przypisanie ustawień sprecyzowanych pod daną zwrotką network={} do wirtualnego interfejsu o nazwie ustawionej w pliku /etc/network/interfaces . Na postawie tego wirtualnego interfejsu, zostanie skonfigurowany interfejs fizyczny wlan0. Drugi parametr to priority . Przyjmuje on wartości od 0 do 1000, im wyższy numer, tym większy priorytet. W przypadku dostępności kilku zaufanych sieci, wpa_supplicant wybierze sieć o najwyższym priorytecie. Jeśli będzie kilka sieci z takim samym priorytetem, wtedy będzie decydować siła sygnału i zabezpieczenia danej sieci.

Pozostała nam jeszcze kwestia przełączania się z wifi na przewodowe połączenie w zależności od tego czy przewód został podpięty. Do tego celu posłuży nam ifplugd . Na samym początku trzeba skonfigurować tego deamona. Można to zrobić, albo przez plik /etc/default/ifplugd , albo przez dpkg-reconfigure ifplugd . W każdym razie oba sposoby mają na celu uzupełnienie wspomnianego pliku o odpowiednie parametry. Poniżej mój plik:

INTERFACES=""
HOTPLUG_INTERFACES="eth1"
ARGS="-q -f -u0 -d5 -w -I"
SUSPEND_ACTION="stop"

Restartujemy deamona i sprawdzamy czy działa:

# /etc/init.d/ifplugd status
[....] eth1: ifplugd process for device eth1 running as pid 6764.

Zakładając, że jesteśmy podłączeni via wi-fi, to w tym momencie wystarczy już tylko podpiąć przewód do gniazda rj-45 i obserwować logi:

Jun 28 15:31:55 morfikownia kernel: [ 5424.228279] r8169 0000:02:00.0 eth1: link up
Jun 28 15:31:55 morfikownia kernel: [ 5424.228297] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: Link beat detected.
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: Executing '/etc/ifplugd/ifplugd.action eth1 up'.
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: OK
Jun 28 15:31:55 morfikownia kernel: [ 5424.731220] cfg80211: Calling CRDA to update world regulatory domain
Jun 28 15:31:55 morfikownia wpa_action: WPA_IFACE=wlan0 WPA_ACTION=DISCONNECTED
Jun 28 15:31:55 morfikownia wpa_action: WPA_ID=0 WPA_ID_STR=home_wifi_static WPA_CTRL_DIR=/var/run/wpa_supplicant
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: adding candidate script LinkBeat with tag [linkbeat]
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Added startable with priority 10
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Added startable with priority 100
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Added startable with priority 200
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Added startable with priority 4294967295
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: 2 candidates found in input
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Guessnet 0.54 starting...
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Trying MII detection
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: 0 candidate profiles
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Added "default" test no_link
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Trying MII detection
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Initialized test subsystems
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting all 4 startables
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting elements with priority 10
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Will test for link beat.  If absent, will return no_link
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Trying MII detection
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting elements with priority 100
Jun 28 15:31:55 morfikownia wpa_action: ifdown wlan0
Jun 28 15:31:55 morfikownia kernel: [ 5424.754936] device eth1 entered promiscuous mode
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting elements with priority 200
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting net sender
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Starting elements with priority 4294967295
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Sending 10 ARP probes, 1 every second...
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: Started tests
Jun 28 15:31:55 morfikownia ifplugd(eth1)[3540]: client: guessnet: 3 candidates
Jun 28 15:31:55 morfikownia wpa_action: removing sendsigs omission pidfile: /run/sendsigs.omit.d/wpasupplicant.wpa_supplicant.wlan0.pid
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: Got ARP reply from 192.168.0.1 11:22:33:44:55:66
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: ARP reply from 192.168.0.1 11:22:33:44:55:66 matches
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: Notified success of scan peer 192.168.0.1 11:22:33:44:55:66
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: Keeping candidate home_wired_static
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: Removing candidate no_link
Jun 28 15:31:56 morfikownia ifplugd(eth1)[3540]: client: guessnet: We had changes, notifying the listener
Jun 28 15:31:56 morfikownia kernel: [ 5425.777288] device eth1 left promiscuous mode
Jun 28 15:31:57 morfikownia ifplugd(eth1)[3540]: Program executed successfully.

Sprawdźmy też konfigurację interfejsów oraz tras:

# ip addr show
...
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.151/24 brd 192.168.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::4e4a:82ff:fe01:4c5b/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state DORMANT group default qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::c3cb:48ff:ff02:f0f5/64 scope link
       valid_lft forever preferred_lft forever

# ip route show
default via 192.168.0.1 dev eth1  initcwnd 16 initrwnd 16
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.151

Jak widać adres został przypisany interfejsowi eth1. Jeśli teraz spróbujemy odłaczyć przewód, sieć wi-fi powinna zostać automatycznie skonfigurowana:

Jun 28 15:39:01 morfikownia kernel: [ 5849.877918] r8169 0000:02:00.0 eth1: link down
Jun 28 15:39:01 morfikownia ifplugd(eth1)[3540]: Link beat lost.
Jun 28 15:39:06 morfikownia ifplugd(eth1)[3540]: Executing '/etc/ifplugd/ifplugd.action eth1 down'.
Jun 28 15:39:06 morfikownia ifplugd(eth1)[3540]: client: OK
Jun 28 15:39:06 morfikownia ifplugd(eth1)[3540]: Program executed successfully.
Jun 28 15:39:06 morfikownia kernel: [ 5855.715884] r8169 0000:02:00.0 eth1: link down
Jun 28 15:39:06 morfikownia kernel: [ 5855.715935] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
Jun 28 15:39:07 morfikownia wpa_action: WPA_IFACE=wlan0 WPA_ACTION=CONNECTED
Jun 28 15:39:07 morfikownia wpa_action: WPA_ID=0 WPA_ID_STR=home_wifi_static WPA_CTRL_DIR=/var/run/wpa_supplicant
Jun 28 15:39:08 morfikownia wpa_action: ifup wlan0=home_wifi_static
Jun 28 15:39:08 morfikownia wpa_action: creating sendsigs omission pidfile: /run/sendsigs.omit.d/wpasupplicant.wpa_supplicant.wlan0.pid
Jun 28 15:39:08 morfikownia wpa_action: bssid=11:22:33:44:55:66
Jun 28 15:39:08 morfikownia wpa_action: ssid=Winter Is Coming
Jun 28 15:39:08 morfikownia wpa_action: id=0
Jun 28 15:39:08 morfikownia wpa_action: id_str=home_wifi_static
Jun 28 15:39:08 morfikownia wpa_action: mode=station
Jun 28 15:39:08 morfikownia wpa_action: pairwise_cipher=CCMP
Jun 28 15:39:08 morfikownia wpa_action: group_cipher=CCMP
Jun 28 15:39:08 morfikownia wpa_action: key_mgmt=WPA2-PSK
Jun 28 15:39:08 morfikownia wpa_action: wpa_state=COMPLETED
Jun 28 15:39:08 morfikownia wpa_action: ip_address=192.168.0.150
Jun 28 15:39:08 morfikownia wpa_action: address=11:22:33:44:55:66

Sądząc po powyższym logu, tak jest w istocie. Dla pewności możemy jeszcze sprawdzić konfigurację interfejsów i tras:

# ip addr show
...
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.150/24 brd 192.168.0.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::c3cb:48ff:ff02:f0f5/64 scope link
       valid_lft forever preferred_lft forever

# ip route show
default via 192.168.0.1 dev wlan0  initcwnd 16 initrwnd 16
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.150

Zarówno konfiguracja interfejsów jak i tablica routingu zostały z powodzeniem przepisane przy zmianie połączenia z wi-fi na przewodowe i odwrotnie.

W ten oto sposób można bez trudu pozbyć się network-managera lub wicd. Jeśli ktoś naprawdę chce korzystać z GUI, to może sobie doinstalować pakiet wpagui . Jednak cała konfiguracja może zostać przeprowadzona z poziomu konsoli via wpa_cli , który to potrafi działać w trybie interaktywnym i posiada opcję autouzupełniania TABem.


Przypisy:

  1. http://wireless.kernel.org/en/users/Documentation/iw
  2. http://pl.wikipedia.org/wiki/ASCII