Operační systém OpenWRT má ke konfiguraci trochu jiný přístup než ostatní distribuce. Motivace je jasná, dostat všechno potřebné do několika malých konfiguračních souborů, ze kterých se budou generovat ty originální. Krom toho, že je pak docela jednoduché všechno nastavit, není problém naprogramovat webové rozhraní, ve kterém lze všechno pohodlně naklikat.
Konfigurační soubory jsou uloženy v /etc/config. Obsah tohoto adresáře je přebírán init skripty, které podle jednotlivých konfiguračních souborů buď zavolají správné nástroje se správnými parametry nebo vygenerují konfigurační soubor pro program nebo daemona, který se o to postará sám.
Linková vrstva aneb WiFi karty
Začneme od podlahy a podíváme se na nastavení WiFi karet. To najdeme v souboru /etc/config/wireless. Tady si musíme uvědomit co za WiFi kartu máme k RouterBoardu (nebo čemukoli jinému) připojenou. V mém případě jde o CM9 s Atheros chipsetem, takže se budu bavit spíše o něm. Základní nastavení, které init skripty provádějí přes utilitku iwconfig, by ale mělo být stejné u všech karet. Stejně tak by neměl být problém se vším, co se týká wpa_supplicantu a hostapd. Rozdíly jsou hlavně při konfiguraci speciálních vlastností jako je třeba ACK, mód šifrování, 802.11abg standardy atd. Tohle všechno a mnohem víc se u karet dělá pomocí speciálních volání s utilitkou iwpriv, případně specializovaných programů. Tyto volání se liší podle ovladače, takže pokud něco takto nastavíte, u jiného chipsetu to bude většinou jinak. Naštěstí to hlavní OpenWRT vcelku úspěšně sjednocuje pod jednu střechu.
Atheros karty se liší také vytvářením síťového zařízení v Linuxu. Když nic nenastavíme, máme po startu v systému rozhraní wifi0, případně se liší v čísle. Tohle samo o sobě nelze použít pro nějakou konfiguraci. Dalo by se označit za rozhraní reprezentující fyzický hardware. Na něm ale můžeme vytvořit virtuální zařízení, třeba ath0, se kterým lze už pracovat. Není důležité jak, protože to OpenWRT udělá za nás. Je ale důležité vědět, že to tak funguje.
Podívejme se tedy na nějakou základní konfiguraci:
config wifi-device wifi0
option type atheros # broadcom, atheros, mac80211
option channel auto
config wifi-iface
option device wifi0 # na kterém rozhraní bude toto vytvořeno
option mode sta # ap, sta, adhoc, monitor nebo wds
option ssid TRESNOVECNETL2
option encryption psk
option key "XXXXXXXX"
config wifi-device wifi1
option type atheros
option channel 6
option hwmode "g" # a/b/g, některé návody uvádí 11a, 11b a 11g
config wifi-iface
option device wifi1
option mode ap
option ssid HOUSTINET
option encryption psk
option key "XXXXXXXX"
Na první pohled vypadá toto nastavení děsivě, ale vysvětlíme si ho.
Krabička, ze které pochází tento konfigurační soubor, má v sobě 2 WiFi karty. Jedna se připojuje na 5 GHz AP a druhá dělá sama AP na 2,4 GHz. Soubor je rozdělen do čtyř sekcí a každá z nich nastavuje jedno zařízení. Sekce wifi-device řeší fyzické zařízení a všechny jeho parametry. Sekce wifi-iface vytvoří virtuální zařízení, se kterým lze již komunikovat s okolím. Zařízení budou mít označení ath0, ath1 atd. podle toho, v jakém pořadí je do konfiguračního souboru napíšeme.
Další volby
Krom uvedených voleb máme na možnost nastavit i několik dalších.
Sekce wifi-device:
option txpower Výstupní výkon v dBm
option distance Vzdálenost v m
option country nastavení země, cz nebo také us, de atd.
Sekce wifi-iface:
option hidden 0 nebo 1 - přestane vysílat ssid (v AP módu)
option isolate 0 nebo 1 - povolení nebo zakázání komunikace připojených klientů mezi sebou
Šifrování
I když někteří správci nevidí implementaci šifrování na úrovni linkové vrstvy moc pozitivně, OpenWRT samozřejmě musí jít s dobou a podporu obsahuje. Krom klasického WEP, WPA(2)-PSK máme možnost autentizace i proti RADIUS serveru. Stejně tak je možné na OpenWRT RADIUS server vytvořit, ale to by bylo na samostatný článek.
I když to z konfiguračního souboru moc patrné není, je velký rozdíl mezi WPA u AP módu a WPA u STA módu. Pro každé mód se používá jiný daemon. V AP módu to je hostapd, který zpracovává klíče a povídá si o nich s klienty. Ve STA módu se zase používá wpa_supplicant, který si krom jiného umí povídat s hostapd. Do této dvojky ještě vstupuje hostapd-mini. Všechny rozdíly mezi jednotlivými módy naštěstí OpenWRT smazává.
Flash paměť na zařízeních, kam OpenWRT směřuje, není velká. Často se musíme spokojit s 4 MB. Tomu podléhá i celý systém a také hostapd, kde si můžeme vybrat mezi klasickým a hostapd-mini, které podporuje pouze WPA(2)-PSK. V běžném domácím použití WPA-PSK stačí, takže nemá smysl tam cpát velké hostapd. Ve školách a různých firmách budou priority jinde.
Vraťme se zpátky ke konfiguraci. Nejlepší bude ukázat si příklady ke všem případům.
WEP:
config wifi-iface
option device wifi1
option mode ap
option ssid HOUSTINET
option encryption wep
option key1 "795161413d7a343a5c336e667d"
option key2 "66675426593b6c453a56217346"
option key3 "4f65384562296a2a74334b7237"
option key4 "6269476c5353673c2d4935582f"
WPA-PSK (WPA2-PSK):
config wifi-iface
option device wifi1
option mode ap
option ssid HOUSTINET
option encryption psk # nebo psk2
option key "XXX"
WPA (WPA2):
config wifi-iface
option device wifi1
option mode ap
option ssid HOUSTINET
option encryption wpa # nebo wpa2
option server 10.0.0.1
option port 1812 # nepovinný parametr, výchozí hodnota je 1812
OpenWRT nezůstává pozadu ani u 802.1×:
config wifi-iface
option device wifi1
option mode ap
option ssid HOUSTINET
option eap_type peap
option ca_cert "/cestka/k/certifikátu"
option auth MSCHAPV2
option identity uživatelské_jméno
option password heslo
Síťová vrstva
Konfigurační soubor síťové vrstvy je na tom strukturou podobně jako v předchozím případě. Každopádně není tolik komplikovaný. Vše co potřebujeme najdeme v /etc/config/network. Příklad může vypadat třeba takto:
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'interface' 'lan'
option 'ifname' 'eth0'
option 'proto' 'static'
option 'ipaddr' '10.1.4.1'
option 'netmask' '255.255.255.0'
config 'interface' 'wifi1'
option 'ifname' 'ath0'
option 'proto' 'static'
option 'ipaddr' '10.1.5.232'
option 'netmask' '255.255.255.0'
option 'gateway' '10.1.5.1'
option 'dns' '10.0.0.1'
config 'interface' 'wifi2'
option 'ifname' 'ath1'
option 'proto' 'static'
option 'ipaddr' '10.1.3.1'
option 'netmask' '255.255.255.240'
V příkladu vidíme čtyři rozhraní. První je loopback a ten by měl být nastaven už „od výroby“. Druhé rozhraní má název lan a nastavuje adresy pro síť, která je na kabelu. Třetí rozhraní vede do internetu a je to jedna z WiFi karet, které jsme konfigurovali výše. Všimneme si názvu rozhraní, které je ath0. Jde o již zmiňované virtuální rozhraní. Číslo čtyři je lokální WiFi síť.
U jednotlivých sekcí si všimněte, že jim musíme přidělit nějaké jméno. Takže síť na eth0 dostala název lan, WiFinka do Internetu má název wifi1 atd. Je to důležité u další konfigurace ať už firewallu nebo třeba jen statického routování, které si ukážeme v dalším odstavci.
U wifi1 najdeme parametr gateway, pomocí kterého se nastavuje výchozí brána. To se hodí, když nemáme k dispozici dynamické routování. To určitě nebude případ většiny sítí, takže ještě budeme potřebovat vědět, jak nastavit statické routování.
config route foo
option interface lan
option target 1.1.1.0
option netmask 255.255.255.0
option gateway 192.168.1.1
Tenhle příklad je vybrán z oficiální dokumentace. Co se týče nastavení sítě, tak to je tam zrovna popsáno dobře. Všimněme si, že i routa dostává svůj název. Pak používáme název sekce z minulého příkladu a dále je to již podobné jako u ruční konfigurace. Parametrem target určíme síť ze které budou pakety odesílány podle tohoto pravidla. Parametr netmask je jasný a gateway je směr, kterým budou pakety odcházet. Když už se někdo chce pustit do podobných šíleností se statickým routingem, určitě se mu bude hodit nástroj ipcalc. Podobnou práci odvede i whatmask, který mi přijde trochu přehlednější.
Ne vždy budeme adresu nastavovat staticky, takže si ukážeme, jak by to vypadlo, kdyby se rozhraní eth0 konfigurovalo přes DHCP:
config 'interface' 'lan'
option 'ifname' 'eth0'
option 'proto' 'dhcp'
Někdy chceme mít WiFi a lokální síť v bridgi. I to je možné:
config 'interface' 'lan'
option 'type' 'bridge'
option 'ifname' 'eth0 ath1'
option 'proto' 'static'
option 'ipaddr' '10.1.4.1'
option 'netmask' '255.255.255.0'
Když je vše nastaveno
Některé distribuce nastavují síť tak dlouho, že se člověk až diví co se pod kapotou děje. OpenWRT je v tomhle světlá výjimka, a když resetujete síť, budeme ji mít nahozenou během několik vteřin včetně všech wpa_supplicantů a hostapd daemonů. Každopádně pokud chceme, aby se naše nová konfigurace uplatnila, nesmíme zapomenout síť resetovat.
$ /etc/init.d/network restart
Závěr
I když měl být tento díl poslední, rozhodl jsem se seriál ještě prodloužit. OpenWRT je na svůj úkol velmi dobře připravené a byla by škoda si neříct o některých mnohem zajímavějších funkcích, než byly popsány dnes. Není pro něj problém vcelku pohodlně nastavit shaping a QOS, stejně tak nesmíme zapomínat na nastavení firewallu nebo daemona dnsmasq. To, co nesmíme vynechat vůbec, to je webové rozhraní, které pochází z projektu X-Wrt. K hodně věcem bohužel chybí dokumentace, ale snad to pro nás nebude taková překážka. Některé krabičky, včetně mnou používané RB433, v sobě mají hardwarový switch. Ten je často konfigurovatelný a nepovědět si o něm by také byla škoda. OpenWRT se hodně věnuje i firma Ubiquiti Networks, která pořádá soutěž ve které je 200 000 USD a sama dává OpenWRT na některé svoje zařízení. Je tedy možné, že v budoucnu se s ním budeme stýkat čím dál víc i v předinstalované formě na běžně dostupném hardwaru.