Openwrt - instalace, základní nastavení

Download

Pro jednoduché připojení nepotřebujeme žádné další balíčky, stačí z internetu stáhnout pouze základní firmware. V době psaní tohoto článku byla aktuální verze systému OpenWrt Whiterussia RC4: http://downloads.openwrt.org/whiterussian/rc4/default/openwrt-brcm-2.4-jffs2-4MB.trx.

Systém OpenWrt není omezen pouze na router Asus wl500g, běhá na velkém množství dalších podobných zařízení. V adresáři proto najdeme několik dalších verzí pro různé procesory a pro různě veliké flash paměti. Pro wl500g deluxe vybírejte vždy firmware pro procesor Broadcom (ve jméně souboru s firmwarem je napsáno brcm) a flash o velikosti 4 MB.

V adresáři o patro výše je několik podadresářů. Adresáře bin a default by měly být totožné. V adresáři micro je skutečně jen minimalní instalace, v adresáři pptp je instalace určená pro připojení k internetu protokolem pptp. Systém lze ale jednoduše doplnit o další balíčky, takže máte-li v routeru verzi default, lze ji snadno doplnit o balíčky potřebné pro připojení přes pptp.

Instalace

Zezadu na routeru je tlačítko označené "Reset" - pro účely instalace je lze využít hned dvěma způsoby. Když stisknete tlačítko reset na zapnutém routeru přibližně na dvacet vteřin, nastaví se do paměti nvram defaultní hodnoty. Po úspěšném vynulování by měla začít zběsile blikat ledka PWR. Pokud máte router ještě s originálním firmware od výrobce, měl by být po restartu nastavený na adresu 192.168.1.1 na některém z lokálních ethernetových rozhraní (označené LAN) a heslo nastavené na standardní admin/admin. Přišli jste o konfiguraci, ale router by měl ještě stále fungovat. Počítač, ze kterého budete instalovat OpenWrt, nastavte na adresu ze stejného segmentu ip adres, například 192.168.1.10. Na router na adrese 192.168.1.1 musí být možné se dopingat. Pro propojení používejte přímý kabel a k routeru během instalace nic jiného nepřipojujte!

Druhé použití tlačítka reset je nastavení do režimu "upload". Router na několik vteřin vypněte, stiskněte tlačítko reset, podívejte se na účet za router, abyste věděli, o kolik přicházíte, a router zapněte. Po pár vteřinách začne pomalu ledka PWR blikat. Pro kontrolu můžete zkusit ping, router musí odpovídat.

Pro další postup budete potřebovat klient tftp. Jsem přesvědčený, že tftp by měl být snad v každé linuxové distribuci. Můžete zkusit nahrát systém do routeru:

tftp 192.168.1.1
binary
put openwrt-brcm-2.4-jffs2-4MB.trx

Po úspěšném nahrání systému router vypněte a zapněte. Ledka PWR by nyní měla svítit - nikoli blikat - a po několika okamžicích, routerovo zmrtvýchvstání trvá poprvé dlouho, by měl začít router odpovídat na ping.

Tolik teoretický postup.

Prakticky spíše začne opět pomalu blikat ledka PWR a systém nenajede. Zdála se vám častka na účtu za router vysoká? Můžete zkusit pro nahrání systému použít originální recovery utility od Asusu (pouze pro Windows), či Olegovu utilitu recover.sh:

#!/bin/bash

IP=192.168.1.1

if [ -z "$1" ] || [ ! -f $1 ]; then
    echo Usage: $0 firmware.trx
cat << EOF
IMPORTANT:
   1) be sure POWER led is flashing (If this is not a case
      poweroff the device, push the reset button & power on
      it again, then release button)
   2) connect your pc to the LAN port
   3) be sure your link is up and has an address in the
      $IP/24 address range (and not the $IP)
EOF
    exit 0
fi
echo Confirming IP address setting...
echo -en "get ASUSSPACELINK\x01\x01\xa8\xc0 /dev/null\nquit\n" | tftp $IP
echo Recovering $IP using $1...
echo -en "binary\nput $1 ASUSSPACELINK\nquit\n" | tftp $IP
echo Please wait until leds stops flashing.

Moje zkušenosti jsou takové, že ani Olegova utilita recover.sh někdy nepomůže. Nebojte se experimentovat - nyní už nemáte co ztratit.

Oleg ve své utilitě před nahráním firmware testuje, jestli je router funční (protokolem tftp downloaduje z routeru soubor), pak teprve zkouší nahrát nový firmware. Nebude-li se vám dařit ani s Olegovou utilitou, zkuste pouze nahrání firmware:

tftp 192.168.1.1
binary
put openwrt-brcm-2.4-jffs2-4MB.trx ASUSSPACELINK

Nahrával jsem do routeru OpenWrt třikrát - pokaždé jsem se s tím potrápil několik hodin, asi dělám něco špatně. Naposledy jsem nahrával firmware bez vyresetování paměti nvram - nemusel jsem potom nastavovat základní funkce routeru znovu (například ip adresu jsem měl z rozsahu 10.10.1.0/24 a pro nahrání jsem nepoužíval 192.168.1.1).

Po úspěšném nahrání firmware byste se měli být schopní připojit k routeru protokolem telnet. Ve Windows je telnet dodnes standardní součástí systému (klient), do některých distribucí Linuxu bude třeba telnet doinstalovat.

První přihlášení

Po prvním nabootování se připojte k routeru telnetem. Připojit se lze přímo do účtu roota, aniž by se vás systém zeptal na uživatelské jméno či heslo. Jako první musíte změnit heslo uživatele root:

passwd

načež systém začne (někdy) protestovat:

passwd: An error occured updating the password file

Chybová hláška je poprvé normální (mně se objevila vždy). Nejsnazším řešením je restart systému příkazem reboot. Při dalším přihlášení telnetem už systém pracuje normálně a heslo lze bez problémů změnit. Po dalším restartu už není možné připojení telnetem, je nutné použít ssh - uživatel root a heslo byste si snad mohli ještě pamatovat, zadávali jste je před chvílí.

Pamět nvram

Než začneme systém konfigurovat, bude vhodné si něco říci o paměti nvram.

V normální distribuci jsou všechna potřebná nastavení shromážděna někde v adresáři /etc. V routeru je to trochu složitější. Pro uložení konfigurace slouží vyhrazená část paměti flash, k níž se dostanete příkazem nvram:

nvram show | sort                # vypíše všechny proměnné
nvram set promenna1=aaa          # nastaví proměnnou
nvram set promenna2="aaa bbb"    # řetězce s mezerou uzavírat do uvozovek
nvram commit                     # nahrát změny do paměti flash
nvram get promenna1              # vypíše pouze jednu proměnnou

Po nastavení konfiguračních proměnných nezapomeňte konfiguraci zapsat příkazem nvram commit, jinak konfigurace nepřežije nejbližší restart.

Takto důsledně je uložená konfigurace například v Olegově systému nebo v původním systému Asus, neboť oba systémy pracují nad filesystémem squashfs, který je pouze pro čtení. OpenWrt obsahuje mix proměnných nvram a klasických konfiguračních souborů v /etc.

Další utilita, kterou se lze dostat k paměti flash v routeru (a to nejen k nvram pro konfigurační proměnné), je mtd. S její pomocí lze například nahrát nový firmware (bez použítí tftp), před další prací ji využijeme k vyčištění nvram od konfiguračních proměnných předchozího systému v routeru:

mtd erase nvram
reboot

Nastavení Wan

Nyní připojte router k internetu - síťový kabel zasuňte do dírky označené WAN. Na tomto síťovém rozhraní by měl běžet dhcp klient - přiděluje-li vám váš ISP adresu dynamicky, jste nyní připojení k internetu a můžete vyzkoušet ping:

ping www.abclinuxu.cz

(Nezkoušejte ping na seznam.cz. Doba je divoká a někdo by se vás mohl ptát, kdo na tom seznamu je a jestli byste jej mohli předložit.)

Nefunguje? Možná vám váš ISP přiděluje adresu z rozsahu 192.168.1.1/24, pak je potřeba změnit adresu LAN rozhraní:

nvram set lan_ipaddr=192.168.0.1
nvram commit
reboot

Stále nefunguje? Třeba musíte mít nastavenou statickou adresu. Než začnete nastavovat statickou adresu na internetovém rozhraní, sáhněte si do svědomí a koukněte se, jestli nejste úplná, ale úplná lama - no ale neočekávám že byste se v takovém duševním rozpoložení dostali až tak daleko (prostě nyní už musíte vědět co děláte a proč to děláte, jako například já, když jsem minule psal zasvěceně o tom, jak v OpenWrt nefungují iptables):

nvram set wan_hostname=<vaše hostname>
nvram set wan_ipaddr=<vaše IP adresa>
nvram set wan_proto=static
nvram commit
reboot

Nezapomeňte také na fakt, že statickým nastavením ip adresy nezískáte informaci o dns serverech. Tu je třeba doplnit ručně do souboru /etc/resolv.conf (editorem vi, je součástí distribuce, balíčku busybox). Nyní už by snad měl ping konečně fungovat.

Nastavení Lan a DHCP

Výborný vynález je dhcp server - dokáže nastavit síťové parametry u počítačů, které do vaší lokální sítě připojíte. Návod na www.macsat.com mixuje nastavení v nvram a v /etc. Další návod na webu OpenWrt trdí opět něco trochu jiného. Abych se nelišil, zvolím třetí, vlastní variantu - nastavení pouze přes /etc/dnsmasq.conf. Zásahům do konfiguračního souboru se stejně nevyhnu, v nvram nelze nastavit vše (ono by to asi šlo, ale systém OpenWrt s tím nepočítá), a svou vlastní, třetí cestou se vyhnu konfiguraci jedné věci na dvou různých místech. Přesto je třeba nastavit něco málo i v nvram:

nvram set lan_ipaddr=192.168.1.1
nvram set lan_netmask=255.255.255.0
nvram set lan_proto=static
nvram set lan_ifname=br0
nvram set lan_ifnames="vlan0"
nvram commit

Síťové rozhraní lokální sítě je pojmenováno br0 - jsou zde mostem (bridge) spojená rozhraní vlan0 (čtyři ethernetové porty LAN) a později si ukážeme, jak sem připojit ještě bezdrátové rozhraní routeru (wifi).

Obsah /etc/dnsmasq.conf:

domain-needed                                                                   
bogus-priv                                                                      
filterwin2k                                                                     
localise-queries                                                                
local=/lan/                                                                     
domain=lan                                                                      
                                                                                
# Rozsah přidělovaných adres:
# interface,odkud,pokud,čas pronájmu
dhcp-range=br0,192.168.1.2,192.168.1.10,12h                                          
                                                                                
dhcp-authoritative                                                              
dhcp-leasefile=/tmp/dhcp.leases                                                 
                                                                                
# v /etc/ethers můžu mít uložené statické adresy - jedné síťové
# kartě se přiřadí vždy stejná adresa. Záznamy jsou ve formátu:
# <hwaddr> [<hostname>] <ipaddr>                                                
read-ethers                                                                     
                                                                                
# Další užitečnosti
# default route(s): dhcp-option=3,192.168.1.1,192.168.1.2                       
#    dns server(s): dhcp-option=6,192.168.1.1,192.168.1.2                       
#             mask: dhcp-option=1,255.255.255.0                                 
#        broadcast: dhcp-option=28,10.10.1.255                                  
dhcp-option=1,255.255.255.0                                                     
dhcp-option=3,192.168.1.1
dhcp-option=6,192.168.1.1
dhcp-option=28,192.168.1.255                        

Ještě poslední rekvizita, soubor /etc/init.d/S49dnsmasq pro nastartování dnsmasq při spuštění systému:

#!/bin/sh
dnsmasq

Soubor může být takto jednoduchý, nezapomeňte jen nastavit jeho práva tak, aby byl soubor spustitelný:

chmod +rx /etc/init.d/S49dnsmasq

Po restartu je vaše lokální síť připravená na připojení počítačů.

Nastavení Firewallu

Posledním krokem, nutným k tomu, abyste se z lokální sítě dostali na internet, je nastavení firewallu. V tomto okamžiku si nejsem jistý, jestli je vše potřebné už nastaveno, nebo je třeba doplnit některé věci ručně. Datum poslední modifikace souboru /etc/S45firewall mám nastaveno na 1.1.2000 a já už netuším, jestli to má na svědomí špatně nastavený čas v mém routeru v době, kdy jsem se snad v souboru hrabal editorem, nebo to znamená, že jsou iptables nastavené správně od výroby. Z myšlenky, že bych měl jen kvůli tomuto článku znovu reinstalovat systém, mi naskakuje kopřivka. Zkuste proto ze své lokální sítě (ne z routeru) ping někam do internetu. Funguje-li, zvítězili jste. Nefunguje-li (a z routeru ano), zkontrolujte obsah souboru /etc/init.d/S45firewall, téměř na konci by měl být řádek

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

S největší pravděpodobností tam řádek je, není-li, doplňte do souboru /etc/firewall.user pravidlo:

iptables -t nat -A postrouting_rule -o $WAN -j MASQUERADE

Startovací skript vytváří pro uživatele pravidla input_rule, output_rule, forwarding_rule a v tabulce nat pravidla prerouting_rule a postrouting_rule. Ta lze měnit a doplňovat v souboru /etc/firewall.user, do startovacího skriptu /etc/init.d/S45firewall není třeba vůbec sahat.

Iptables jsou kapitolou samy pro sebe, zcela mimo rozsah tohoto článku. Naštěstí existuje i na českém webu množství užitečných návodů, zkuste zapátrat v archivu root.cz nebo underground.cz.

Někde zvenku z internetu doporučuji překontrolovat nastavení vašeho firewallu programem nmap. Router by měl být z venku neviditelný.

Na závěr

Podle dnešního článku o OpenWrt byste měli být schopní nainstalovat systém a zprovoznit základní síťovou komunikaci. Nastavení wifi jsem zatím vůbec nezmiňoval. O tom zkusím napsat něco příště.

A úplně na konec jednu otřepanou, ale užitečnou radu:

Nepropadejte panice!