OpenWRT: DHCP, firewall a webové rozhraní

17. 8. 2009
Doba čtení: 5 minut

Sdílet

V dalším díle seriálu o distribuci OpenWRT si ukážeme, jak nastavit DHCP a také jak vypadá webové rozhraní. To sice není nic extra, ale OpenWRT se s ním nakonfigurovat dá a některým uživatelům třeba bude vyhovovat víc. Ani k jednomu není moc dokumentace, takže některé věci si musíme domýšlet nebo hledat jinde.

DHCP a DNS

Potřebné balíčky: dnsmasq

Nebudeme se zdržovat předmluvou a půjdeme do toho po hlavně. OpenWRT se, možná bohužel, zaměřuje pouze na dnsmasq. Jde o daemona, který je určen pro malé domácí sítě a obstarává přeposílání DNS požadavků, případně překládá názvy lokálních strojů a jako bokovku má v sobě DHCP služby. Motivace OpenWRT je jasná, v co nejméně kódu dostat co nejvíce muziky. Říkám ale bohužel, protože konfigurace OpenWRT už nepočítá s plnokrevným DNS a DHCP serverem. Pokud se pro ně rozhodneme, narušíme tím celistvost konfiguračního procesu OpenWRT, ztratíme i výhodu konfigurace přes webové rozhraní.

Pojďme si tedy přiblížit dnsmasq. Seznam podporovaných vlastností není zrovna krátký.

  • Dynamické a statické DHCP pronajímání adres
  • Přeposílání DNS požadavků
  • Vedení lokálních DNS záznamů pro lokální stroje (A, MX, SRV, …)
  • DNS cache
  • BOOTP/TFTP/PXE neboli vše co je potřeba pro boot po síti
  • Podpora IPv6 pro komunikaci s okolními DNS

OpenWRT si stejně jako u IP adres a WiFi generuje vše co je potřeba pro dnsmasq samo z námi vytvořeného souboru /etc/config/dhcp. Jako příklad si ukážeme trochu poupravený ten co je v systému hned po instalaci. Na většinu použití bude bohatě stačit. Jsou tu popletené názvy rozhraní. OpenWRT u parametru pro DHCP překládá názvy rozhraní, ale u parametru "list interface ne.

config dnsmasq
    option domainneeded     1
    option boguspriv        1
    option localise_queries 1
    option domain   'tresnovec.net'
    option expandhosts      1
    option nonegcache       0
    option authoritative    1
    option leasefile        '/tmp/dhcp.leases'
    option resolvfile       '/tmp/resolv.conf.auto'
    list interface          "eth0"
    list interface          "ath1"

config dhcp
    option interface        lan
    option start    2 # první číslo adresy, odkud se má začít rozdávat
    option limit    13 # počet adres o prvního číslo, které se mohou půjčit
    option leasetime        12h # doba zapůjčení

config dhcp
    option interface        wifi2
    option start    2
    option limit    13
    option leasetime        12h

config dhcp
    option interface        wifi0
    option ignore   1 

První sekce nastavuje parametry DNS části dnsmasq. Další dvě říkají dnsmasq, že na nich má naslouchat DHCP server a dávat adresy od 10.1.x.2 do 10.1.x.14 (viz. konfigurace IP adres v minulém díle). Poslední sekce říká, že v tomto rozhraní DHCP server naslouchat nemá. Všechny možnosti nastavení dnsmasq najdeme v jeho man stránce, ale na některé se podíváme.

  • domainneeded – zakáže přeposílání požadavků bez domény nebo bez tečky
  • boguspriv – zakáže přeposílání požadavků pro lokální IP adresy
  • localise_queries – odpovědět na dotaz pomocí dat ze souboru /etc/hosts, pokud odpověď souvisí s rozhraním, ze kterého dotaz přišel
  • domain – nastavení domény
  • expandhosts – přidá doménu ke všem jménům v /etc/hosts
  • nonegcache – cachovat i negativní odpovědi DNS serverů
  • authoritative – „1“ pokud je tento DHCP server na síti jediný
  • leasefile – soubor s vypůjčenými adresami naším DHCP serverem
  • resolvfile – soubor s nameservery našeho poskytovatele, nebo konfigurační soubor resolveru
  • interface – rozhraní na kterém naslouchá DNS server, každé na jeden řádek

Jak jsem již zmínil výše, nezapomeňte dát do parametru „list interface“ skutečný název rozhraní a do parametru „interface“ v dhcp sekci název rozhraní z /etc/config/net­work.

Když je vše hotové, restartujeme dnsmasq.

$ /etc/init.d/dnsmasq restart 

A jestli jsme udělali vše jak jsme měli, mělo by vše fungovat.

Web interface

Potřebné balíčky: haserl, webif-applications, webif-lang-cs, webif

Přes webové rozhraní nebo-li Webif lze nastavit prakticky vše co je součástí konfigurace OpenWRT, tedy vše co najdeme v adresáři /etc/config. U některých věcí se ale bez ručního zásahu do konfiguračního souboru neobejdeme. Jde třeba o nastavení DHCP, které nelze přidat, pouze mu upravovat parametry. Podobných nedostatků je tu více. Webif má hlavní menu, pod kterým se zobrazuje podmenu. Na první pohled nejde zrovna o uživatelsky přívětivé prostředí. Druhý pohled to jen potvrzuje. Jde převážně o nepřehledné přidávání různých záznamů, např pro firewall. Webif pochází z projektu X-Wrt, které si klade za úkol vytvořit něco více uživatelsky přívětivé pro uživatele OpenWRT.

openwrt-mainpng

Co tedy webové rozhraní nabízí. Krom konfigurační stránky to je i stránka statistická. Webif dokáže online zobrazit aktuální zátěž procesoru, přenos dat na jednotlivých interfacech, případně statistiky z vnstat. Procesor a přenesená zobrazuje ve grafech.

openwrt-cpu

Další záložka je informační. Zobrazuje informace o systému. Krom paměti, připojených zařízení se dozvíme i informace o připojených zařízeních přes USB, obsah conntrack tabulky, statistiky QoS, výsledky scanování okolních WiFi sítí atd. Je tu i záložka diagnostika, kde lze spustit nástroje jako ping a tracepath, a to jak pro IPv4, tak IPv6.

openwrt-ping

Záložka s logy nám ukáže, co se v OpenWRT děje, a taky nám umožní přesměrovat syslog zprávy mimo router.

openwrt-logy

V záložce System se nastavuje všechno co se týká samotného operačního systému, jako je heslo, spouštění skript, Cron, jaké služby se mají spustit po startu atd. Krom toho je tu možné nainstalovat nové balíčky případně zálohovat celé nastavení. Jde asi o nejpropraco­vanější nabídku celého Webif.

openwrt-system-services

To nejdůležitější se nachází v záložce Network. Zde je možné nastavit statické routování, IP adresy, QoS, WiFi karty, firewall atd. Krom toho je tu možné probouzet počítače v síti pomoci Wake on Lan a upravit síťové parametry jádra OpenWRT jako je ICMP timeout, maximální množství spojení a další.

openwrt-scan

Firewall

Jelikož je firewall velmi důležitou součástí naší sítě, musíme se postarat i o něj. Naneštěstí je standardní provedení firewallu velmi velmi nedokumentované a komplikované, takže si o něm povíme v příštích dílech. Věřte mi, že je mnohem jednodušší napsat si firewall vlastními silami s iptables. Dostanete mnohem spolehlivější a přehlednější výsledek. Zvlášť pokud chcete vytvořit jen jednoduchý firewall. Abychom ale aspoň trochu drželi basu, řekneme si, jak dostat vlastní pravidla zapsaná pomocí iptables do standardní konfigurace OpenWRT.

Takto může vypadat jednoduchý konfigurační soubor firewallu, ve kterém spustíme vlastní skript pro vytváření pravidel:

bitcoin_skoleni

config defaults
    option input            ACCEPT
    option output           ACCEPT
    option forward          ACCEPT

config include
    option path /etc/firewall.user 

Po startu firewallu přes init skript /etc/init.d/fi­rewall, se nám v systému objeví krom výchozích i další chainy. Zatím si jich všímat nebudeme a vytvoříme si pravidla podle vlastního uvážení v souboru /etc/firewall.user.

Závěr

Čím hlouběji se do OpenWRT dostáváme, tím víc narážíme na překážky s dokumentací a v příštích dílech to nebude lepší, naopak. Původně jsem chtěl mít součástí tohoto dílu i povídání o firewallu, ale nakonec se ukázalo řešení OpenWRT natolik komplikované, že se při jeho používání nevyhneme ani zásahům do init skriptu. Naštěstí to je jediná komponenta, která se vývojářům takto hodně nepovedla. Jde o komplexní úkol a nemůžeme jim to mít za zlé.

Seriál: OpenWRT

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.