Bezdrátová síť pro snadný přístup k Internetu je dnes naprosto běžnou
záležitostí; ať už doma pro pohodnou práci na notebooku
nebo třeba v restauracích s hotspoty. Jak se připojit v Linuxu?
1.11.2006 06:00 | Ondřej Čečák | přečteno 115047×
V dnešní době už asi nemá cenu představovat Wi-Fi (původně Wireless Fidelity), technologii představenou specifikací IEEE 802.11. Kromě použití na například p2p spojích nás dnes bude zajímat, jak se k síti (např. z notebooku) připojit – použijeme-li terminologii z referenčního modelu OSI/ISO, budeme se pohybovat někde kolem fyzické a linkové vrstvy (physical, data link layer).
Pokud by vás zajímalo, jak samotná technologie funguje a jak ji použít, doporučuji už vydaný výborný seriál od vynikajícího autora Začínáme s WiFi.
Protože vás jistě bude zajímat, jak se dostanete po úspěšném připojení na web, odkáži vás na opět už vyšlé články ve stejné kategorii, jako je tento – konfigurace a diagnostika sítě. Ale předem vás možná uklidním, na většině míst, kde je "WiFi konektivita" k dispozici, běží DHCP server, který vám umožní jednoduše získat síťové parametry bez nutnosti složitě konfigurovat síťová rozhraní, směrování a podobně. Vlastně to je zpravidla jeden příkaz.
A nakonec poslední upozornění – alespoň pokud mi je známo, je právní problematika WiFi hotspotů tak trochu křehká; a to v tom smyslu, že je obtížné rozlišit hotspot pro volné použití třeba od špatně nakonfigurovaného domácího AP (Access Point, síťový prvek stojící na druhém konci našeho bezdrátového připojení). Zdůrazňuji to proto, že neznalost zpravidla neomlouvá, každopádně se ale v našem případě budeme připojovat k síti s dobrou vůlí a úmysly.
Tak a pojďme na věc. Na úvod této sekce ještě jedna poznámka – seriál se jmenuje Linux v příkazech, budeme se tedy věnovat připojení k síti pomocí příkazů, což pro běžného uživatele nemusí být komfortní. Proto tu máme grafické nástroje, které snadné připojení umožňují – rád bych zmínil třeba grafickou nadstavbu Network Manageru KNetworkManager (implicitně například v distribuci SUSE 10.1), KWifiManager nebo třeba Wifi Radar (podobných nástrojů je přes desítku, takže pokud by se vám žádný z jmenovaných nelíbil, použijte klidně jiný; existují).
Nás tedy budou v dalším povídání zajímat především programy z balíku Wireless
Tools (například v Debianu je získáte instalací balíčku
wireless-tools
); ty umožňují nastavení Wireless Extension (WE) v
Linuxu; WE je obecné rozhraní (API), umožňující nastavování různých parametrů
vašeho bezdrátového zařízení a výhodou je především samotná obecnost (takže
tolik nezáleží na tom, kterou WiFi kartu v počítači máte), jednotnost
(nepotřebujete žádné další nástroje) a možnost předávání on-the-fly
(bez nutnost restartu ovladače nebo celého jádra [Linuxu]).
Do Wireless Tools tedy spadá většina programů, o kterých je tento článek, jmenovitě:
iwconfig
, který umožňuje nastavení základních parametrů
iwlist
pro scanování, vypisování frekvencí, šifrování atd.
Pokud nahlédnete třeba do programů, která vám balíček s Wireless Tools nabízí, zjistíte, že nástrojů je víc; my si ovšem vystačíme s touto dvojicí.
Pro většinu našeho povídání si vystačíme s jedním modelovým příkladem, řekněme, že jste si zašli do kavárny na šálek výborné kávičky a kavárna disponuje (pro hosty) připojením k Internetu.
Je dobré si uvědomit, že s pokud použijete Linux, jste zpravidla odkázáni sami na sebe. Ať už budete ve zmíněné kavárně nebo na konferenci, znalosti obsluhy budou zpravidla hodně omezené a stupeň abstrakce nad použitím bezdrátového připojení téměř nulový (takže možná zvládnou naklikání ve Windows a vyřešení jednoduchých problémů, po zahlédnutí příkazového interpretu namísto klikacích ikonek ale zpravidla ztratí úplně přehled), což samozřejmě není chyba, ovšem je potřeba s tím počítat.
Kavárník či kavárnice vám tedy ochotně přinese požadovaný nápoj (a účet), později také možná heslo, ale víc od nich čekat nebudeme.
Tak a s chutí do toho. Prvním nástrojem, který nám prozradí většinu sítových
parametrů je program iwlist
, s jeho pomocí proscanujeme pásmo pro
Wifi a zjistíme, co vlastně dokážeme chytit.
Určitě je dobré vědět, s čím máme tu čest pracovat:
hostname:~# iwlist --help Usage: iwlist [interface] scanning [interface] frequency [interface] channel [interface] bitrate [interface] rate [interface] encryption [interface] key [interface] power [interface] txpower [interface] retry [interface] ap [interface] accesspoints [interface] peers [interface] event
Vida, iwlist
nám pomůže nejenom s prohledáním pásma, ale dokáže
nám výsledky rozumně filtrovat podle mnoha kritérií. Základní použití bude ale
přesto pouhé prohledání:
hostname:~# iwlist scanning lo Interface doesn't support scanning. eth0 Interface doesn't support scanning. eth1 No scan results
Teď bohužel nemáme štěstí, žádná síť není v dosahu. Za předpokladu, že nemáte například zapnuté tlačítko pro vypínání vysílacího výkonu bezdrátových zařízení v notebooku, budete chtě nechtě muset změnit pozici, nasměrovat jinam anténu nebo třeba připojit externí; každopádně se tak dostat na místo pokryté použitelným signálem.
V naší kavárně ale signál je, proto teď už najisto spustíme vyhledávání,
tentokrát elegantně se zkrácenou verzí příkazu a se zavoláním konkrétního
zařízení (které je v mém případě eth1
, ovšem u vás může být třeba
wlan0
):
hostname:~# iwlist eth1 scan eth1 Scan completed : Cell 01 - Address: 00:15:C7:EE:B5:50 ESSID:"kavarna" Protocol:IEEE 802.11bg Mode:Master Channel:5 Encryption key:off Bit Rate:54 Mb/s Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54 Quality=49/100 Signal level=-83 dBm Extra: Last beacon: 140ms ago Cell 02 - Address: 00:15:C7:EE:B4:E0 ESSID:"kavarna-secured" Protocol:IEEE 802.11bg Mode:Master Channel:11 Encryption key:on Bit Rate:54 Mb/s Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54 Quality=41/100 Signal level=-76 dBm Extra: Last beacon: 49ms ago Cell 03 - Address: 00:15:C7:EE:7B:90 ESSID:"kavarna-secured2" Protocol:IEEE 802.11bg Mode:Master Channel:1 Encryption key:on Bit Rate:54 Mb/s Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54 Quality=53/100 Signal level=-80 dBm Extra:wpa_ie=db180050e20101000050f20001000050f202010000 50f2002800 Extra: Last beacon: 375ms ago
Tak, teď máme vše, co jsme potřebovali, takže se s iwlist
em
rozloučíme třeba výpisem dostupných rychlostních modů:
hostname:~# iwlist eth1 rate eth1 12 available bit-rates : 1 Mb/s 2 Mb/s 5.5 Mb/s 11 Mb/s 6 Mb/s 9 Mb/s 12 Mb/s 18 Mb/s 24 Mb/s 36 Mb/s 48 Mb/s 54 Mb/s Current Bit Rate=0 kb/s
A směle do připojení. Pro to použijeme nástroj iwconfig
:
hostname:~# iwconfig --help Usage: iwconfig interface [essid {NN|on|off}] [nwid {NN|on|off}] [mode {managed|ad-hoc|...} [freq N.NNNN[k|M|G]] [channel N] [ap {N|off|auto}] [sens N] [nick N] [rate {N|auto|fixed}] [rts {N|auto|fixed|off}] [frag {N|auto|fixed|off}] [enc {NNNN-NNNN|off}] [power {period N|timeout N}] [txpower N {mW|dBm}] [commit] Check man pages for more details.
Jako asi první příklad vypíšeme stav bezdrátových zařízení:
hostname:~# iwconfig lo no wireless extensions. eth0 no wireless extensions. eth1 unassociated ESSID:"down" Mode:Managed Frequency=2.417 GHz Access Point: 00:00:00:00:00:00 Bit Rate=0 kb/s Tx-Power=20 dBm RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:237 Missed beacon:0
Teď už nám půjde jenom o to, nastavit bezdrátovou kartu tak, aby jednotlivé
položky výpisu obsahovaly správné hodnoty, ty, které nám řekl
iwlist
. Protože se budeme připojovat k AP, zajímá nás režim
managed.
Tak, nyní se můžeme připojit.
Přepneme bezdrátové zařízení do managed módu:
hostname:~# iwconfig eth1 mode managed
A nastavíme potřebné parametry, které nám prozradil iwlist
. V
tuto chvíli použijeme první nalezenou síť, kde není nastaveno žádné šifrování
(které je představeno o něco níže).
hostname:~# iwconfig essid kavarna hostname:~# iwconfig channel 5
Elegantně lze celou sérii příkazů napsat na jeden řádek:
hostname:~# iwconfig eth1 mode managed essid kavarna channel 5
Úspěšné připojení poznáte třeba příkazem iwconfig
bez zvláštního parametru:
hostname:~# iwconfig eth1 eth1 IEEE 802.11g ESSID:"kavarna" Mode:Managed Frequency:2.432 GHz Cell: 02:12:E0:51:5E:48 Bit Rate=54 Mb/s Tx-Power=20 dBm RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:55 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:237 Missed beacon:0
Kromě teoretické maximální rychlosti se zde také třeba dozvíte, jak kvalitní získáváte signál nebo vysílací výkon.
Zpravidla následuje získání síťových parametrů přes DHCP, to zvládne několik
programů, zkusit můžete dhclient
nebo pump
, pokud je
nějaký nainstalovaný, hádám, že to bude jeden z nich.
Tedy:
hostname:~# dhclient eth1
nebo:
hostname:~# pump -i eth1
A konečně, obligátní použití příkazu ping
:
hostname:~# ping www.linuxsoft.cz PING www.linuxsoft.cz (82.208.29.37) 56(84) bytes of data. 64 bytes from ip37.motylek.com (82.208.29.37): icmp_seq=1 ttl=54 time=51.44 ms 64 bytes from ip37.motylek.com (82.208.29.37): icmp_seq=2 ttl=54 time=51.51 ms 64 bytes from ip37.motylek.com (82.208.29.37): icmp_seq=3 ttl=54 time=51.41 ms --- www.linuxsoft.cz ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 51.419/51.459/51.511/0.058 ms
Nás v tuto chvíli zajímá pouze jak se připojit, pokud už získáte adresu a přesto se na Internet nedostanete, možná provider zvolil jenom jinou taktiku při autentizaci. Například tak můžete narazit na situaci, kdy se připojíte, dostanete síťovou adresu, ale všechny pokusy o přístup k webu jsou přesměrovány na autentizační stránku poskytovatele, kde musíte zadat potřebné údaje.
I když je (spíše filozofickou) otázkou, zda samotný fyzický/linkový provoz WiFi šifrovat, je možné a obvyklé nějaké šifrování použít. Tím prvním je WEP (Wired Equivalent Privacy), přímá součást standardu IEEE 802.11, ovšem už překonaná a především, triviálně zlomitelná (s běžným nástrojem řekněme do 10 minut), ovšem stále používaná především kvůli její jednoduchosti a široké podpoře zařízení.
WEP pracuje typicky s 40 bitovým klíčem, případně s rozšířenou verzí s délkou 104 bitů (do "kulatých" čísel připočítejte 24 bitový inicializační vektor [IV]), nás především zajímá, že (pokud ho už nemáme) požádáme obsluhu o "heslo pro připojení k síti". V závislosti na použitém šifrování nebo zápisu hesla, můžete dostat na papírku následující řetězce:
Paráda, máme co potřebujeme.
Užitečné bude nejdříve vědět, jak šifrování vypnout:
hostname:~# iwconfig eth1 encryption off
A následně je už předání správných parametrů systému jednoduché, jenom je třeba rozlišovat, jestli se jedná o hexadecimálně zadaný klíč (obsahující pouze znaky 0-9 a A-F, běžně oddělovaný po 4 znacích) nebo řetězec.
V našich případech bude tedy správné:
hostname:~# iwconfig eth1 enc s:segafredo hostname:~# iwconfig eth1 enc 7365676166 hostname:~# iwconfig eth1 encryption 7365-6761-66 hostname:~# iwconfig eth1 key 7365-6761-6672-6564-6F00-0000-00
Prosím všimněte si, že parametry enc
, encryption
a
key
jsou ekvivalenty, prefix s:
před heslem znamená, že ho udáváme jako
řetězec.
Příkaz pak buďto vložíme do posloupnosti příkazů výše nebo jednoduše část bez
iwconfig eth1
přidáme do jednořádkového nastavení. Ovšem
samozřejmě použijeme jiný kanál, konkrétně 11 s ESSID kavarna-secured, o
kterém nám iwlist
prozradil, že používá šifrování.
V případě WPA se setkáváme s implementací části specifikace IEEE 802.11i, konkrétně se budeme autentizovat proti zařízení implementující IEEE 802.1x, typicky využívající mod PSK (pre-shared key). Pro nás to opět znamená jediné, poprosit o "heslo pro připojení k síti" a dostaneme nejspíš například řetězec:
Paráda, opět máme vše potřebné.
Nutno dodat, že s WPA je situace trošku horší, protože implementace IEEE
802.1x je v Linuxu trošku zvláštní, složí k tomu nástroj WPA Supplicant, který
například na Debianu získáte instalací balíčku wpasupplicant
.
Nejprve vygenerujeme klíč z hesla, které jsme dostali od obsluhy; SSID/ESSID
jsme poznali z výpisu iwlist
u výše, že se jedná o použití WEP
jsme odhalili z řádek Encryption key:on
a
Extra:wpa...
.
hostname:~# wpa_passphrase kavarna-secured2 segafredo network={ ssid="kavarna-secured2" #psk="segafredo" psk=957595b5491edd06331fb43e954664d4e1a0ea3bb4b65ec61b3410123fa22481 }
wpa_passphrase
rovnou generuje výstup v syntaxi konfiguračního
souboru standardně umístěného v /etc/wpa_supplicant.conf
, takže
ho vygenerujeme:
hostname:~# wpa_passphrase kavarna-secured2 segafredo > /etc/wpa_supplicant.conf
A necháme wpa_supplicant
, ať se předvede:
hostname:~# wpa_supplicant -B -i eth1 -D ipw -w -dd
Pokud byste se ztráceli v konfiguračních možnostech, použijte třeba parametr
--help
:
hostname:~# wpa_supplicant --help ... usage: wpa_supplicant [-BddehLqqvw] -i<ifname> -c<config file> [-D<driver>] \ [-N -i<ifname> -c<conf> [-D<driver>] ...] drivers: hostap = Host AP driver (Intersil Prism2/2.5/3) prism54 = Prism54.org driver (Intersil Prism GT/Duette/Indigo) madwifi = MADWIFI 802.11 support (Atheros, etc.) atmel = ATMEL AT76C5XXx (USB, PCMCIA) wext = Linux wireless extensions (generic) ndiswrapper = Linux ndiswrapper ipw = Intel ipw2100/2200 driver options: -B = run daemon in the background -d = increase debugging verbosity (-dd even more) -K = include keys (passwords, etc.) in debug output -t = include timestamp in debug messages -h = show this help text -L = show license (GPL and BSD) -q = decrease debugging verbosity (-qq even less) -v = show version -w = wait for interface to be added, if needed -N = start describing new interface
V našem případě chceme, aby daemon běžel na pozadí a vypisoval při připojování ladící informace, které se hodí třeba v případě, kdy něco nefunguje, jak má.
Stává se, že se hodí spojit se s druhým počítačem třeba pro výměnu souborů, v tom případě najde uplatnění spojení ad-hoc; jde o poměrně snadný a elegantní způsob, rozhodně snazší, než se omezovat dráty:
hostname:~# iwconfig mode ad-hoc essid adhoc channel 7
Není asi potřeba zdůrazňovat, že na druhém počítači zadáte stejný příkaz, ESSID můžete zvolit téměř libovolné, kanál především v závislosti na tom, jak jsou v místě použití využívané.
Celkem užitečnou věcí je také monitorovací mód, kterým vám může pomoci zjistit, co za provoz na bezdrátové síti proudí v místě, kde kvůli bezpečnosti (např. kancelář) žádná být nesmí.
Jednoduše (pokud to ovladač podporuje) přepneme kartu do správného režimu:
hostname:~# iwconfig eth1 mode monitor
Zaktivníme síťové zařízení a pustíme třeba tcpdump
:
hostname:~# ifconfig eth1 up hostname:~# tcpdump -i eth1 ...
Doufám, že když nic jiného, tak vám článek byl alespoň úvodem do práce s bezdrátovými sítěmi na příkazovém řádku. V běžných případech by ale měl myslím stačit; takže si užijte pohodlného používání. ;)
man iwconfig
man iwlist
man iwspy
man nwepgen
man wpa_supplicant
man wpa_passphrase