wiki:WikiStart

Soekris revival with OpenWRT

Is er een zinvol tweede leven voor de stapel Soekrissen die in de WL-kast liggen? We hebben enkele tientallen Soekrissen net: 4501, 4521, 4801, 4826. De hardware heeft zijn beperkingen en is niet geschikt voor de huidige nodes. Hierbij hoort tevens de erfenis aan SENAO pcmcia en mini-pci b-only wifi kaartjes!

  • Soekris net4501 cpu 486 133mhz RAM 064MB 0xusbport 3xlan 1xmini-pci 0xpcmcia 1xpci CF-CARD NO POE???
  • Soekris net4521 cpu 486 133mhz RAM 064MB 0xusbport 2xlan 1xmini-pci 2xpcmcia 0xpci CF-CARD ~24/64Mbit POE
  • Soekris net4801 cpu 586 267mhz RAM 128/256MB 1xusbport 3xlan 1xmini-pci 0xpcmcia 1xpci CF-CARD ~36Mbit NO POE!
  • Soekris net4826 cpu 586 267mhz RAM 128MB 1xusbhead 1xlan 2xmini-pci 0xpcmcia 0xpci ONBOARD-64MB ~36Mbit POE

antwoord

Jazeker, met deze Soekris-boarden en OpenWRT software als middel is het mogelijk om basale netwerk/linux kennis en inzicht in het creëren en functioneren van complexe netwerkcomponenten op te doen!

Door de modulaire bouw van "OpenWRT"(linux gebasseerd) op basis van de packetmanager "opkg" in combinatie met "plain text editing" kan met hetzelfde gemak als op een linux-desktop/server een uitgebreide router/server/node/netwerk(onderdeel) gebouwd worden, door (bijna ;-) iedereen en dat in een zeer korte tijd! Met de grote hoeveelheid beschikbare hardware-configuraties/toepassingen kan direct de flexibiliteit van het linux gebaseerde openwrt worden ingezien en benut. Zodat uiteindelijk nieuwkomers en enthousiastelingen het creëren van W.L. type community netwerk via hap klare brokken kunnen realiseren.

reden

De keuze voor openwrt+soekris als uitgangssituatie voor deze howto is omdat dit stapsgewijs en toegankelijk, het binnen W.L. netwerk gebruikte cruciale basis component "freebsd+alixboard" te benaderen en beschikbaar maakt in een kort tijdbestek! Dit om voorlichtinh, uitvoer en herhaalbaarheid van het (huidige) beheerplan door nieuwkomers mogelijk te maken. Hierdoor kan je in een uur experimenteren al een werkende netwerk onderdeel en inzicht hebben, i.t.t het opzetten van een freebsd installatie met nodefactory en het compileren van benodigde tools (iets wat vanaf het wireless leiden netwerk zelf helaas onmogelijk is van scratch).

Het W.L. netwerk bestaat in een oog aanschouw uit zo'n 4 bouwstenen die je op enkele onderdelen na kant en klaar kan kopen/gratis zijn, maar nog wel op juiste wijze moet configureren:

  • utp netwerk kabel (outdoor, shielded, uvproof)
  • wireless to ethernet bridges voor "interlinks" of "accesspoints" (UBNT devices)
  • alixboard+freebsd (node kasten bevatten daarnaast POE verdelers/switches antenne aansluitingen/etc)
  • LV-routed+IPplan (i.c.m organisatie en gekoppelde ontwikkel en beheer structuren)

De eerste bouwsteen lijkt bijna een grap en hoeft niet moeilijk te zijn, maar mag zeker niet onderschat worden (het is wellicht wel aardig om een keer uit de boekhouding het aantal ingekochte meters utp kabel voor draadloze verbindingen in beeld te brengen, dit tegenover de draadloze afstanden die overbrugt zijn)! Ook al word het onderwerp netwerkkabels hier niet verder besproken is het toch zinvol hiervan kennis te nemen i.v.m. toepasbaarheid, veiligheid en storingsgevoeligheid.

De tweede bouwsteen "UBNT devices"(bridges), apparatuur dat Linux gebaseerd is, relatief makkelijk is te configureren/resetten en zonder al te veel knowhow door velen snel opgepikt en onderhouden kan worden.

De derde bouwsteen is deels gekoppeld/verweven aan de vierde, maar mag je qua functionaliteit nog steeds zien als een maakbaar/vervangbaar/los moeilijk component die sumier gedocumenteerd is.

De vierde, tevens laatste bouwsteen is eigenlijk de kern van de netwerk functionaliteit namelijk "routing en ipplan" wie krijgt welk ip en hoe loopt de routing als node x uitvalt?

aanpak

De opzet van deze howto is vooral de derde bouwsteen en mogelijk de vierde bouwsteen inzichtelijk en uitvoerbaar te maken. Met beperkte PC kennis gaan we eerst van start om hard- en software in te regelen (om OpenWrt? uberhaupt ;-) operatief te krijgen op een soekris board) als een eenvoudige huis-tuin-en-keuken router/accesspoint. Wanneer inzichtelijk/duidelijk is hoe je het apparaat kunt opzetten/benaderen en inregelen via netwerk/serial-console cli (telnet/ssh) of gui (webinterface), hostname, tijd inregelen, netwerk interfaces ingesteld kunnen worden (bedraad en draadloos)en packages installeren is het essentieel de volgende basis netwerk terminologie/toepassingen te ervaren zoals binnen (lokaal netwerk) en buiten (wijde wereld netwerk) LAN-WAN OSI model bridging Layer2 /layer3 routing en NAT.

Als er nodig eerder kennis met basis netwerk terminologie/componenten/toepassingen opgedaan moet worden (zonder PC/debug kennis nodig te hebben) is het waarschijnlijk eenvoudiger om na de eerste W.L. bouwsteen "bekabeling" bij de tweede bouwsteen "UBNT Devices" stil te staan. Deze kant en klare UBNT devices lenen zich naast prijs zeer goed om visueel (helaas prorietary) via de eenvoudige webinterface naar complexer niveau (command line) te gaan iets dat met openwrt en freebsd/nanobsd ook noodzakelijk is. Pas wanneer dat duidelijk is met deze howto verdergaan?

Dan gaan we als tweede fase kijken hoe we Wireless-Leiden node achtige functionaliteiten kunnen inbrengen zoals captiveportal en proxy firewall en porten forwarden. Vervolgens meerdere van deze losstaande soekris Wireless Leiden achtige routers onderling met elkaar kunnen laten communiceren zoals nodes op een Wireless-Leiden-netwerk dat met elkaar doen kortom het concept routing. Dit uitbouwen zodat je de proxy/uplink/gateway verbindingen van het ene soekrisboard kunt delen met een ander soekrisboard dat zelf niet een directe uplink aan zijn wan-interface heeft. Nadat er inzicht in static routing is wil ik dynamisch routing met behulp van een routing-protocol uitzoeken, vervolgens iets met dns-implementatie en uiteindelijk ipv6,beheer/monitoring?

De stijl opzet van deze howto is voornamelijk hele lange "tekst geschreven" blokken wat je zeker niet direct of stipt als sturend of stappenplan moet opvatten, maar enkel als begeleiding in terminologie en mindset iets waardoor je gerust heen kan skimmen opzoek naar de essentie (als die er is). Daadwerkende instruerende stappen zijn beknopt in "codestijl geschreven" blokken opgemaakt het enige waar je je daar van bewust moet zijn (of die bewustwording moet nog even ontstaan) is dat sommige commando's voer je uit in de shell van "client pc/laptop" en sommige in die van de openwrt shell die draait op "de soekris zelf"! Als niet ingewijd persoon kan dit zeer verwarrend overkomen, ik zal trachten de twee shells iedere keer aan tegeven waar je nou eigenlijk bezig bent.

Als vereiste/aanname word er vanuit gegaan dat je de stappen van de client pc/laptop in een shell uitvoert bijvoorbeeld in de terminal van Ubuntu 12.04 of hoger, in Mac OSX met de Terminal werkt waarschijnlijk ook. De Windows mensen kunnen beter Oracle Virtualbox installeren en daarin ubuntu 12.04 installeren en vanuit dat OS de boel verkennen. Ondanks kan er native in Windows via het programma putty een serial console/ssh shell mogelijkheid worden toegevoegd, op een enkele handeling na bijvoorbeeld soekris firmware upgraden en het dd-en van de x86 generieke openwrt image naar de compactflash kaart zal je met een Windows alternatief teraterm serial filetransfer en HDD raw copy tool moeten improviseren.

Waarschuwing/Disclaimer?: In deze howto word een handeling/functie toegepast die direct schade of verlies van data / gegevens of functionaliteit kan/zal veroorzaken aan je client machine als deze verkeerd of onbegrepen word uitgevoerd! Dat commando is 'dd' en word ook wel (on)terecht 'disk destroyer' genoemd. Dit programma is een low level schrijf programma dat data direct (over) een disk heen kan schrijven dus ook je eigen harddisk of usb-stick waardoor de gegevens op die disk ontoegankelijk of verloren zullen gaan! Tevens de windows variant "HDD RAW COPY" kent dezelfde gevaren!

OpenWRT op Soekris 45xx/48xx boards

De soekris boarden bezitten een afwijkende 486/586 gebasseerde processor, dit komt overeen met de x86 processor/architectuur die in vele huis tuin en keuken computers is terug te vinden en waar de meeste gebruikers het OS (Operating System) Windows op draaien. Kort gezegd gedraagd een soekris board zich tijdens functioneren, installeren en repareren als een desktop pc. Met al die fases hebben niet alleen de meeste geeks al ervaring maar helaas ook veel thuis gebruikers! Een embedded systeem zoals de soekris is niet veel moeilijker startend en of geconfigureerd te krijgen dan de meesten denken.

De reden dat we dit "x86 architectuur" willen weten is dat de soekris boarden in tegenstelling tot de meeste Windows PC's, zonder OS geleverd worden en we er zelf een OS op kunnen/moeten installeren voordat deze gebruikt kan worden. De software instructie set van het OS dat je wil installeren/gebruiken moet matchen met die van de architectuur waar die op komt te functioneren. Dit houd in dat een x86 versie van OpenWrt? prima functioneerd op een x86 gebaseerd soekris board of desktop pc. Maar niet op een mips/arm architectuur gebaseerde Linksys of Ubiquity router. De rede dat het OS Windows vroeger niet makkelijk tot niet op een Apple Mac was te installeren en te gebruiken kwam omdat het Windows OS voor de x86 architectuur geschreven was, terwijl Apple voor de Mac hardware de Motorola m86k en PowerPC architectuur gebruikte. Vlak nadat Apple in 2006 in Intel x86 gebaseerde Mac uitbracht, duurde het niet lang voordat daar ook (probleemloos) Windows op was te draaien.

Netals een desktop pc zonder Windows moet je een "installatie" uitvoeren van het OS dat uren kan duren voordat de machine weer in een werkbare toestand is, of je kan een "image" terugplaatsen van een OS dat veel tijd kan schelen. Een "image" is vaak een enkel bestand waar het hele OS met bootloader/partitielayout/config inzit, denk aan een ISO bestand voor een CD. Een image kun je vaak op afstand zoals via het netwerk of via een andere computer die het "image" bestand al bevat en deze direct naar de harddisk/SSD/CF-CARD/SD-CARD kan schrijven voor de computer die hem nodig heeft.

Omdat de soekris machines niet over een toetsenbord/muis en vga aansluiting beschikken maar wel over verwisselbare CF-card (Compact Flash Card) als opslag kan relatief simpel via een andere PC/Notebook met card-reader een x86 gebasseerde OS "image" naar de CF-card geschreven worden en daarna weer worden terug geplaatst in de soerkis.

Als "alles" volgens een normale PC bootstrap in orde is op de soekris, waaronder POST(power on self test) / correcte BIOS instellingen met betrekking tot serialport en een juist opstart medium zoals harddisk/CF-card/SD-CARD/CD/DVD-rom/Network kun je verwachten dat je na het plaatsen van een CF-card met het juiste OS image direct een werkende basis router met openwrt heb!

images

Zowel kant en klare x86 architectuur images van het Operating Systeem OpenWRT uit de seriebackfire 10.03.1 als attitude adjustment 12.09 functioneren op de soekris 4501, 4521, 4801 en 4826 boarden.

De gewenste type images zijn "combined-squashfs" images en "combined-extN" images. De eerste term "combined" staat voor een image met daarin zowel de boot partitie inclusief bootloader en kernel en root partitie voor de rest van het OS. De tweede term "squashfs/extN" staat voor het type Filesystem dat zeer bepalend is voor de bepaalde functionaliteiten. In het geval van "squashfs" word grotendeels in het RAM de wijzigingen t.o.v. de squashfs doorgevoert en alleen enkele wijzigingen gecomprimeerd naar de disk terugschrijven op een stukje JFFS2. Het voordeel hiervan is, dat deze versie de schrijf acties op de compact-flash card spaart ("wear level protection"),failsafe "factory reset" mogelijk maakt en deze image resistenter is tegen onverwachte power outages, het nadeel is dat firstboot een paar minuten kan duren voordat jffs2 de overlay partitie heeft aangemaakt. Ondanks dat blijft het een prima optie voor experimenteren, door de reset mogelijkheid! De tweede optie "extN" schrijft alles direct op de geheugenkaart/disk, werkt sneller en laat meer ram over, echter een simpele failsafe restore/reset is dan niet mogelijk en power outages kunnen beschadigingen op het filesystem achterlaten waardoor het gehele systeem zich zelf vaak niet meer operatief kan krijgen.

Op de OpenWRT download page vind je naast verschillende releases van OpenWRT 12.09 of 10.03.1 respectievelijk met de naam Attitude Adjustment of Backfire, al die verwijzingen naar andere processor architecturen waar we het eerder over hadden zoals ppc (powerpc) arm(ar71xx) mips(brcm-2.4) en nog veel meer! Allemaal direct te downloaden, klein en klaar voor gebruik voor betreffend exotisch systeem dat zich op de markt bevind. De grote verscheidenheid en het beschikbaar hebben van kleine generieke OS images is een groot pluspunt van openwrt en tevens andere linux gebasseerde distributies zoals debian/ubuntu, hierdoor kan er makkelijk ergens begonnen worden en snel resultaat worden geboekt, onderhouden en continueren is een andere sport!

Houdt er overigens wel rekening mee dat de generieke openwrt-images zo zijn aangepast dat ze op de meeste x86 systemen kunnen werken, dat zijn zowel systemen met toetsenbord/muis/vga-monitor (desktops/laptops) of systemen die serialport( als vervanging van KB/VGA) of machines zonder beide en enkel een ethernet(netwerk) aansluiting met ssh/telnet/webinterface toegang.

Let op: Het starten/booten van "generieke x86" images van de OpenWrt? website op een Soekris board uit de 45xx 48xx serie, werkt alleen wanneer de juiste comBIOS optie (namelijk ConMute?=Enabled) actief is in desbetreffende soerkis (eenmalig configureren) of wanneer de soerkis een directe actieve serial-console-verbinding met een draaiende PC heeft tijdens het booten van openwrt op de soekris (sic). Door het flexibele karakter van OpenWRT zijn er meerdere mogelijkheden als je niet aan deze voorwaarden kan/wil voldoen en toch direct met een generiek openwrt image aan de gang wil! Hoe dit opgelost kan worden en of dit in jouw situatie opgelost hoeft te worden kun verderop lezen bij het hoofdstukje "comBIOS" en "grub boot loader".

serial console

Omdat de Soekris machines niet over een VGA en toetsenbord aansluiting beschikken en dat voor de meeste mensen een normale manier is om een computer in te regelen is een seriele console de enige manier om de boot-cyclus/strap met BIOS te beinvloeden op de soekris! Dit is vooral handig voor uitgebreid recoveren/configureren van systemen zonder CF-Kaart. Later kan via het netwerk met webinterface (gui) of telnet/ssh (cli) wanneer openwrt zelf al actief is deze verder ingeregeld worden waardoor de seriele console verbinding niet nodig is. De kant en klare x86 images van openwrt hebben standaard hun seriele console werkend op een snelheid van 38400 baud met n 8 stop bits, zowel in de bootloader modus (grub) als de kernelbootconsole en uiteindelijke systeem init console. Dit i.t.t. tot de standaard Soekris comBIOS seriele snelheid die vaak 19200 of zelfs 9600 baud is. Om tijdens de hele bootcyclus/bootstrap vanaf de soekris comBIOS, grub bootloader, kernel bootconsole tot aan de init console van openwrt zelf een werkend beeld en toetsenbord aansturing te hebben is het van belang dat al deze fasen op dezelfde seriele settings staan, bij een pc wil je immers ook niet dat in bepaalde fasen van het opstarten/configureren het beeld verdwijnt of de toetsenbord invoer niet werkt. In het geval van de soekris met verkeerde instellingen verdwijnt het beeld meestal niet maar wordt onleesbaar(rare symbooltjes) en is verdere toetsenbord-interactie in een bepaalde fase uitgesloten.

Om via serieel console in te loggen op de soekris zullen we eerst "minicom" installeren en configureren op de client-PC waarmee we de soekris inregelen, daarnaast is een null-null modem kabel een vereiste op de client-pc aan de soekris te verbinden. Dit inregelen van minicom zal je waarschijnlijk meerdere malen moeten doen om eerst via de ongewenste instellingen de comBIOS van de soekris in te komen en daar de gewenste instellingen te plaatsen, vervolgens moet je na het rebooten jezelf in minicom ook weer aanpassen aan je gewenste seriele instellingen. Handig is om eenmalig de seriele snelheid in de comBIOS van de soekris gelijk te zetten naar die van de standaard openwrt image dan staat de hele bootstrap tot aan het OS in eenkeer indezelfde consistente instelling.

Let op: Goedkope usb-serial dongles werken niet altijd lekker met hoge com snelheden!

## install software for serial terminal sessions on client pc
sudo apt-get update && apt-get install minicom cu

## setup minicom
sudo minicom #press CTRL+A than Z for info  
#press O for options
#select "Serial Port Setup"
#press A, ##specifiy serial( portnullmodem cable) probably /dev/ttyS0 or /dev/ttyUSB0
#press E  ##set speed for soekris board 9600/19200/38400/etc 8n1 
#press F,G no, no #flow controls
#press enter to save
#select "Save setup as default"
#select "exit"
#press X exit minicom

#connect soekris via rs232 null modem to pc
poweron/reset soekris

#login with minicom 
sudo minicom

#press CTRL-P to enter comBIOS repeatedly

#if you see garbage change port speed settings of minicom aka 9600><19200><38400><etc

comBIOS

Dit is de naam van de BIOS op de soekris boarden. Deze wordt benaderd via een seriele interface. Hierin kun je verschillende systeem- en boot-gerelateerde parameters vastzetten zoals de seriele port snelheid "ConSpeed?" en zorgen dat een onaangepaste openwrt-image niet blijft hangen in de grub bootloader door "ConMute?" op Enable zetten. Tevens kun je vanuit comBIOS het systeem via network laten booten "PXE" of comBIOS upgrades uitvoeren.

Je hebt ongeveer 2-5 seconden na het aanzetten van de soekris om de comBIOS in te komen met het intoetsen van de CTRL-P toets combinatie(i.t.t. een reguliere PC BIOS waar je met toetsenbord vaak DEL / F1 / F2 / F10 etc intoetst)! Dan moet je ook toevallig de juiste serial settings hebben voor die fase anders zie en kun je alsnog niets, dit kan door het wisselend gebruik van de oude soekris boarden met verscheidene instellingen een trial & error werkwijze zijn. Als je de goede serial instellingen heb, dan zie je vanzelf BIOS/POST messages voorbij komen (mits conmute op disabled staat ;-) wanneer de soekris aangaat als je op de client PC minicom hebt gestart. Je ziet dan tevens de comBIOS post melding voorbijkomen dat je met CTRL-P de comBIOS in kan! *Daarentegen als de comBIOS parameter ConMute?=Enabled stond dan blijft het beeld altijd zwart en zie je alleen grub of de bsd bootloader. Mits je direct na het aanzetten van het apparaat CTRL-P herhaaldelijk indrukt komt je alsnog in comBIOS!

> _ # default comBIOS prompt

> ? # ? shows help / possible commands

> show # show current fixed paramters like serial Con speed

> set ConMute=Enabled # will set the parameter ConMute to Enabled

> set ConSpeed=38400 #will set the serial to the speed of openwrt image

> set FLASH=Primary #use onboard CF-card slot or Secondary for mini-ide 2,5 inch 40 pin connector

> set PCIROMS=Enabled #Enables PXE option rom for network boot

> set PXEBoot=Enabled #Enables PXE boot for int13/18/19

> boot F0 #will boot from network via PXE

> boot 80 #will boot first CompactFlash/OnboardFlash/Harddisk(IDE 2,5inch)

> boot 81 #will boot first CompactFlash/OnboardFlash/Harddisk(IDE 2,5inch)

> reboot #will reboot the board

De laatste bios update beschikbaar voor deze serie soekris boarden is 1.33. Letop dat je wel de goede serie kiest 45xx of 48xx voor het upgraden! Tevens dat de upgrade van de 45xx boarden in 2 fases verloopt eerst een upgrade naar pre 1.20 daarna een post 1.20 upgrade. Updaten via minicom werkt met een omweg maar kan prima op een serial snelheid van 38400, mits je verbinding stabiel is (dus geen goedkope usb>serial dongle)! Je boot naar de comBIOS met CTRL-P en typt daar het commando "download -" met een dash! Vervolgens suspend je de sessie naar de background met "CTRL-a J" en dan in de foreground virtuele terminal ga je handmatig het bios bestand uit je homedir pushen met dit commando "sx -X /root/b45xx_133.bin > /dev/ttyS0 < /dev/ttyS0" na een kleine minuut krijg je de melding xxx blocks ok en kun je met het commando "fg" terug naar de minicom sessie waar je in comBIOS het commando "flashupdate" intypt en vervolgens "reboot". Het is handig dit vanuit de root user op je client machine te doen aangezien anders met pipes en redirect de boel niet lekker loopt!

grub bootloader

De openwrt x86 images gebruiken "grub" als bootloader (wel de oude legacy versie), je zal grub weinig of wellicht nooit zien of hoeven aan te passen, mits OpenWRT tenminste kan booten (opstarten). Zo niet dan is het relatief makkelijk om in een enkel configuratie bestand "menu.lst" voor grub of het OS(openwrt of memtest86 payload) specifieke opties/parameters te wijzigen of toe tevoegen zodat deze wel kan booten.

De OpenWRT x86 generieke images bestaan uit twee partities, de eerste is een bootpartitie met ext2 of ext4 filesystem dat direct op je client pc/laptop via de filebrowser is te benaderen wanneer je deze naar de CF-card heb geschreven en de kaart na het schrijven herplaatst. Vanaf de client machine kan je het grub configuratie bestand "/boot/grub/menu.lst" bijwerken (wellicht met sudo rechten). Natuurlijk is het grub configuratie bestand ook vanuit openwrt zelf draaiende op de soekris te veranderen, wel dien je hiervoor de boot partitie te mounten voordat je bij het configuratie bestand kan!

Het volgende probleem kan zich helaas voor doen met een soekris bootende van de x86 generieke openwrt images van de openwrt website! Wanneer de soekris boot(opstart) onafhankelijk zonder seriele PC connectie (zoals je hem in het veld tegenkomt) en de comBIOS optie ConMute?=Enabled ontbreekt, is de kans groot dat de soekris hangt tijdens de boot cyclus voor/op het grub-bootloader keuze menu. Hij wacht daar op een bevestiging om door te gaan met normal booten of recovery booten... Kortom je denkt dat je openwrt image die je net op de CF-card heb geschreven niet goed is en het niet doet op de soekris.

Gelukkig is voor een soekrisboard dat niet aan de comBIOS voorwaarde kan/wil voldoen toch een oplossing om een generieke x86 image van de openwrt website te kunnen gebruiken! Wanneer op de eerste partitie van de CF-kaart/image uit de bootloader config file "/boot/grub/menu.cfg" de optie "console" verwijderd wordt, boot de Soekris probleemloos onafhankelijk zonder PC met serial-console! Voor de CF gebaseerde systemen (Soekris 4501/4521/4801) is deze grub optie op de CF-kaart zo te veranderen en kun je in enkele minuten al aan de slag met hieronder volgende commando's.

Let Op: CF-kaartloze systemen zoals de 4826 met OnboardFlash?(Solderd) kun je niet door enkel eventjes de grub bootloader opties te tweaken direct voorzien van openwrt, maar zal via serial-console in comBIOS een PXE netwerk boot moeten doen of een "self overwrite" vanuit draaiende FreeBSD zie verderop.

#download openwrt image to your client pc/laptop which has a CF card-reader
wget http://downloads.openwrt.org/backfire/10.03.1/x86_generic/openwrt-x86-generic-combined-squashfs.img

#warning dd will overwrite anything and can destroy data in a inrecoverable fashion on your own client PC!!!
#write bootable image directly to CF-CARD
sudo# dd if=openwrt-x86-generic-combined-squashfs.img of=/dev/sdX

#0#re-insert CF-CARD in card-reader after writing openwrt image!

#1#mount the first partition on the CF-CARD if re-insert didn't do it
sudo mkdir /mnt/booooot
sudo mount /dev/sdX1 /mnt/booooot #sdX is de device name of the CF-CARD

#2#remove the word "console" at the top of /boot/grub/menu.lst
sudo nano /mnt/booooot/boot/grub/menu.lst

#3#unmount and eject CF-CARD
sudo umount /mnt/booooot
sudo rmdir /mnt/booooot

#finish
place the CF-CARD in the soekris and boot!

kernel parameters

Hier een voorbeeld van een toegevoegde kernel parameter "irqpoll" aan de bestaande grub configuratie van de gebruikte openwrt 10.03.1 backfire image. Dit verhelpt het freezen van het systeem wanneer een pcmcia/cardbus device dat veroorzaakt. Dit type freezes is makkelijk te herkennen aangezien het systeem weer verder functioneerd als de kaart er word uitgetrokken, echter kun je dit niet altijd doen in het veld en is de kernel parameter "irqpoll" de oplossing. De hierboven beschreven commando's zouden tot het volgende "menu.lst" voorbeeld hebben geleid. Merkop dat het woord console is weggehaald en dat aan het eind van de kernel regel irqpoll is toegevoegd.

/boot/grub/menu.lst

serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1
terminal --timeout=2 serial

default 0
timeout 5

title   OpenWrt
root    (hd0,0)
kernel  /boot/vmlinuz block2mtd.block2mtd=/dev/sda2,65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait console=ttyS0,38400n8 noinitrd reboot=bios irqpoll
boot

title   OpenWrt (failsafe)
root    (hd0,0)
kernel  /boot/vmlinuz failsafe=true block2mtd.block2mtd=/dev/sda2,65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait console=ttyS0,38400n8 noinitrd reboot=bios irqpoll
boot

Let Op: OpenWRT 12.09 werkt/hoeft niet met deze irqpoll optie!

memtest86+

Aangezien de oude soekris boarden een dubieus karakter hebben is het uitsluiten van onbetrouwbaar vastgesoldeerd ram geheugen het minste wat je kan doen dus memtest86+ (plus) draaien. Opmerking de soekris 4501 en 4526 (de oudere 486based boarden) werken niet met de laatste versie van memtest86+, zodra memtest86+ start herstart deze de hele computer. Versies die wel werken zijn 2.00-4.10 en kun je direct in binary laden van memtest86+ old binaries.

Voeg de volgende optie toe aan het grub config bestand /boot/grub/menu.lst en kopier de juiste memtest86 binaries in de map /boot/ op de CF-CARD je kan daarna eenvoudig de soekris op brak ram geheugen laten testen, als je dit kiest vanuit het bootloader menu de eerst volgende keer dat je hem start!

Verkrijg memtest86+ binary en plaats deze in de bootpartitie in de boot map waarzich tevens de openwrt linux kernel bevind:

wget http://www.memtest.org/download/4.10/memtest86+-4.10.bin
sudo cp memtest86+-4.10.bin /mnt/boooot/boot/memtest86+.bin
title memtest86+
root (hd0,0)
kernel /boot/memtest86+.bin console=ttyS0,38400n8
boot

self overwrite

Wanneer je een soekris hebt zonder CF-card verwisselbare storage zoals de 4826 met vaste 64MB onboard flash(solderd), maar die nog wel de huidige FreeBSD installatie die daarop staat kan booten, kun je wellicht een openwrt image op de soekris zetten als deze in zijn eigen voormalige FreeBSD OS is gestart en deze zich zelf domweg laat overschrijven van binnenuit. Je hebt dan geen seriele verbinding nodig, maar moet dan wel met een hexeditor aan de slag en enige kennis van FREEBSD hebben met een werkende ethernet/wifi toegang tot de shell en root wachtwoord om de soekris net4826 in te komen. Pluis eerst uit hoe je achter het ip-adres komt van de freebsd node image zodat je kan inloggen?

Na inloggen op de op freebsd gebasseerde soekris, moet je de root disk als write mounten zodat je een nieuwe image bestand vanaf het netwerk kan inladen. Dit doe je door "mount -uw /". Met scp of wget/curl laad je een nieuwe image er naar toe. Met chmod 777 geef je iedereen toegang tot dit bestand. Vervolgens moet je in bsd met "sysctl" alsnog een bepaalde flag vrijgeven om het commando "dd" toegang tot de bootsector/schijven te geven zodat deze hem mag overschrijven. sysctl -w kern.geom.debugflags=16 via command line of echo "kern.geom.debugflags: 0-> 16" >> /etc/sysctl.conf. Nu kun je met dd bs=64K het bestand in het geheugen zetten, wanneer die klaar direct stroom eraf en het kastje is geflashed.

Echter werkt deze goochel truc alleen als de openwrt image al met een hex editor is bewerkt om de optie "console" uit het boot bestand te verwijderen, of die soekris zou de optie ConMute?=Enabled al moeten hebben in comBIOS. Deze twijfelachtige voorwaarden leiden waarschijnlijk tot een niet started systeem. De enige correcte oplossing voor de soekris 4826 is via comBIOS een PXE network boot te doen!

PXE BOOT client

Voor het installeren/images van openwrt op soekris boarden zonder CF-kaart moet naast een werkende serial console verbinding met comBIOS, een pxe tftp+dhcp/bootpserver worden opgezet en er een ethernet link tussen de soekris als pxe client en pxe server aanwezig zijn. Via serial interface tussen PC en Soekris kan de soerkis vanuit comBIOS geinstrueerd worden om via PXE netwerk boot op te starten. Wanneer de toetsen CTRL + P tijdens de comBIOS bootstrap worden ingetoetst (snel genoeg binnen 5 seconden) kun je met het commando "show" de huidige PXE bootvoorwaarden aanwezig zijn:PCIROMS=Enabled en PXEBoot=Enabled. Wanneer dat niet zo is corrigeer deze, reboot en keer terug via CTRP + P. Je kan nu via "boot F0" de soekris naar een PXE boot forceren. Zie hoofdstuk aan het eind om "PXE BOOT server" op te zetten.

OpenWRT SETUP

In dit hoofdstuk zullen een paar basics worden besproken hoe je in openwrt (dat nu waarschijnlijk al wel op je soekris staat/draait als je CF-card voorbereid en geplaatst heb) moet inloggen, config bestanden aanpassen of terug plaatsen.

Openwrt zelf heeft een unieke en uiterst volledig consistente doch gedecentraliseerde versnipperde handleiding, sorry kon het niet laten ;-) hebben meerdere OS's last van. Her en der zul je het een en ander bij elkaar kunnen/moeten googlen via wiki en forum pagina's op hun eigen website en voorbeelden van andermans blogs en creaties zoals deze hier of een mailinglist... Ze zijn er wel mee bezig... Na het laden van een generieke openwrt image, is net dat ene kleine beetje inzicht nodig om het werkend/sluitend in een bepaalde configuratie te krijgen waar het niet voor ontworpen is. Dit gaat op een van de 3 volgende manieren:

  • via de webinterface
  • via de cli met programmeer taal uci
  • direct in de cli met bestandjes editen

Deze laatste heeft de voorkeur omdat die het meest consistent is en het makkelijker is om naar textbestanden te verwijzen in mappen dan knopjes in een webinterface, de webinterface word namelijk nogal gerestyled of is traag op apparaten met 16MB ram. Wanneer uci/luci actief is geweest, bijvoorbeeld door de webinterface kun je aan configuratie bestanden zien omdat er allemaal ' aanhalings tekens tussen staat.

firstboot

Dit is een begrip voor de uitgangssituatie van de openwrt image als deze de eerste keer start en bepaalde configuratie en routines blijvend opzet. In het geval van een "squashfs" gekozen image is altijd weer terug te keren naar dit stadium zie "failsafe / reset". Voor andere gevallen geld dat niet en moet je in het ergste geval opnieuw een image naar je CF-card schrijven om opnieuw te beginnen.

Na het eerste keer opstarten (duurt even JFFS2 claimt ongebruikte ruimte op CF-kaart 90seconden tot 2/3 minuten) van de openwrt image is de soekris via serial-console of netwerk op ip address 192.168.1.1 (eth0 dichts bij de voeding) te bereiken, stel je client pc/notebook in op dhcp verkrijgbaar ip-adres of op een static ip address om de openwrt router te benaderen.

#login via telnet
telnet 192.168.1.1

#or

#login via minicom
sudo minicom

#if you got the following greeter you are
#in the shell of your router!

BusyBox v1.19.4 (2013-03-06 20:07:44 UTC) built-in shell (ash)                  
Enter 'help' for a list of built-in commands.                                   
                                                                                
  _______                     ________        __                                
 |       |.-----.-----.-----.|  |  |  |.----.|  |_                              
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|                             
 |_______||   __|_____|__|__||________||__|  |____|                             
          |__| W I R E L E S S   F R E E D O M                                  
 -----------------------------------------------------                          
 ATTITUDE ADJUSTMENT (12.09, r36088)                                            
 -----------------------------------------------------                          
  * 1/4 oz Vodka      Pour all ingredients into mixing                          
  * 1/4 oz Gin        tin with ice, strain into glass.                          
  * 1/4 oz Amaretto                                                             
  * 1/4 oz Triple sec                                                           
  * 1/4 oz Peach schnapps                                                       
  * 1/4 oz Sour mix                                                             
  * 1 splash Cranberry juice                                                    
 -----------------------------------------------------

#check if jffs2 completed claimed free space on CF-CARD
#may take a couple of minutes otherwise / root=readonly!!!
dmesg | egrep "JFFS|jffs|complete|mini_fo/overlay"

#add default password requirment!
passwd

#reboot so rootfs will certainly be writable next boot
reboot;exit

#login again, but only possible with password via ssh webinterface
ssh root@192.168.1.1

failsafe / reset

Om alle wijzigingen weer ongedaan te maken die straks volgen kun je met een squashfs type openwrt image altijd terug. Enkel moet je herstarten in de failsafe modus via grub of door de reguliere boot te onderbreken met enter. wanneer die er om vraagt. Vervolgens moet je in de shell nog het volgende intypen.

Router resetten:

firstboot;reboot -f #takes a minute or more...

shell / cli / vi

Wanneer je in de openwrt router bent ingelogd via SSH, moet je je daar langzaam thuisvoelen in de shell omgeving. Dit lijkt voor de leken op MSDOS, maar dan on steroids. Wanneer je je in de shell kan verplaatsen(mappen navigeren, bestanden/mappen maken/kopieren/hernoemen) kun je je gaan richten op bepaalde configuratie bestanden en services binnen openwrt. Een korte introductie van de shell kan nog volgen wellicht plaatsen we dat onder algemeen omdat het veel overeenkomsten met shell van bsd en andere posix georienteerde OS's heeft...

De volgende stap is tekst bestandjes editen met het programma "vi" wanneer je dat handigheidje doorkrijgt kun je daadwerkelijk je router gaan configureren. De tekst editor vi doet denken aan WORDPERFECT ;-). Er zijn twee modi, zodra je het programma vi heb gestart zit je in de "commando invoer modus", door ":q" of":q!" te typen zonder de "quotes" verlaat je direct vi weer. Door de "i" toets in te drukken kom je in de "inset/invoer modus" en kun je tekst invoeren. Doorweer op ESC te drukken en ":wq" in te typen bewaar je de tekst die je geschreven heb en verlaat je het programma! Je kan later ook te tekst editor nano installeren zie opkg.

hostname

Verander hostname naar een gewenste naam, hiermee is de machine in het netwerk via dns te bereiken.

Verander hostname:

vi /etc/config/system
 
#change hostname openwrt to somethingelse

ntp

Verander timezone "UTC" naar "CET-1CEST,M3.5.0,M10.5.0/3", hierdoor loopt de klok op de router gelijk aan die van onze tijdzone.

vi /etc/config/system

#change UTC > CET-1CEST,M3.5.0,M10.5.0/3

interfaces

wired

De eerste bedrade ethernet interface in een openwrt image staat standaard op een "lan" zone en zit in ons geval op de "eth0" interface (dichtst bij voedingconnector), dit kan worden aangeduid als lokaal of intern netwerk en de zone werking zorgt voor de juiste firewall en routing+nat instellingen t.o.v. de buitenwereld "wan" zone. Op deze "lan" zone draait eveneens een DHCP server en deze deeld ip-addressen uit in de 192.168.1.X range, via deze interface heb/ben je in eerste instantie (zonder serial-console) de eerste keer ingelogd. Nu laten we zien hoe deze interface en dhcp functionaliteiten tot stand gekomen is. In de configuratie bestanden "dhcp" en "network" in de map /etc/config kun je instellingen van deze interfaces en functionaliteiten terugvinden en bijwerken. De zone werking voor firewall, nat en forwarding kun je in "firewall" terugvinden. Omdat we met tekstbestanden werken is het handig als deze fout of kwijt raken een backup te hebben, dat kan eenvoudig. Login op de router via ssh(als je dat nog niet was).

Maak een backup van de map /etc/config met config bestanden:

mkdir /etc/backup.config
cp -r /etc/config/* /etc/backup.config/

Kijk eens naar de instellingen van het "netwerk" configuratie bestand /etc/config/network en zoek naar herkenbare items:

cat /etc/config/network #toont de gehele inhoud van het tekst bestand in de shell

# Copyright (C) 2006 OpenWrt.org                                                
                                                                                
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 type     bridge                                                  
        option proto    static                                                  
        option ipaddr   192.168.1.1                                            
        option netmask  255.255.255.0

Kijk eens naar de instellingen van het "dhcp" configuratie bestand /etc/config/dhcp en zoek naar relatie met voorgaande items:

tail /etc/config/network #toont de laatste 10 lines van het tekst bestand in de shell

config dhcp lan                                                                 
        option interface        lan                                             
        option start    100                                                     
        option limit    150                                                     
        option leasetime        12h                                             
                                                                                
config dhcp wan                                                                 
        option interface        wan                                             
        option ignore   1

Als we de relaties tussen deze twee configuratie bestanden kunnen interpreteren is te zien dat in de "lan" zone (die op eth0 zit) een dhcp server draait, met daarin dhcp-leasetijden van een 12hour en dhcp-lease bereik van 192.168.1.100 - 192.168.1.150 dat betekent dus dat er tegelijkertijd 50 clients via dhcp aan de router kunnen hangen op de lan interface. Tevens is te zien dat er op de "wan" zone geen dhcp server draait vanwege de ignore optie! Hint: Er valt meer af te leiden uit deze gegevens, namelijk door het grote van het subnet mask 255.255.255.0 is er ruimte voor 254 routbare clients i.p.v. 50 via de dhcp, als je 254-50 doet hoe je nog ruimte voor 204 clients over die handmatig hun ip/route/dns moeten inregelen buiten de gebruikte 50 om en zij zouden dan ook via deze router kunnen werken! Bijvoorbeeld ip adres 192.168.1.99 of 192.168.1.151 etc.

Als je de functionaleit van een eenvoudige router wilt bereiken met lokaal "lan" zone (al gedefineerd) en een "wan" zone naar internet moeten we deze laatste zone/interface eerst zelf definieren. Omdat we specifiek "wan" zone gaan aangeven zijn hiervoor al de juiste dhcp/firewall/routing oftewel voorkeuren voor aangemaakt en hoeven we nog niet direct verder te kijken naar het "dhcp" of "firewall" config bestand.

Koppel eth1 interface aan de "wan" zone en stel deze als dhcp client in:

#add wan interface
vi /etc/config/network

#add the following 3 line text block at end without this comment!

config interface wan                                                            
        option ifname   eth1                                                    
        option proto    dhcp

#to make new settings active restart network interfaces!
/etc/init.d/network restart

Nu zou je een minimale werkende router met nat hebben als je de soekris aan je thuis netwerk hangt en deze via de wan interface met dhcp een ip kan verkrijgen van je eigen internet adsl/kabel modemrouter. Wanneer dat wel zo is, maar de openwrt router gebruikt dezelfde iprange/subnet 192.168.1.1/24 als je thuis router dan werkt de de openwrt nog niet naar behoren omdat die dan niet weet naar welk route die het verkeer moet doorzetten, dit kun je dan het makkelijkst in openwrt aanpassen! Let Op: Bedenk dan wel dat als je het ip adres van de router aanpast je de router ook via een andere adres opnieuw moet benaderen voor ssh/webinterface! De huidige ssh sessie loopt waarschijnlijk vast maar kun je met TOETS-combinatie ~ . Enter-toets afbreken!

Verander het ipadress/subnet van je router in /etc/config/network:

config interface lan                                                            
        option ifname   eth0                                                    
        option type     bridge                                                  
        option proto    static                                                  
        option ipaddr   192.168.45.1 #Change from 192.168.1.1 to 10.3.2.1 or 172.16.6.1 or other private ranges!                                            
        option netmask  255.255.255.0

#to make new network interface settings active restart network!
#you might loose ssh connection, press ~.enter to kill ssh and reconnect!
/etc/init.d/network restart;exit

#to make new dhcp settings active restart dnsmasq!
/etc/init.d/dnsmasq restart

De "wan" zone naar het internet zou je ook static kunnen defineren als je geen dhcp server op je thuisnetwerk draait, of wanneer je kabel/modemrouter bijvoorbeeld op bridgen staat! Zoek de juiste ip gegevens waaronder ipaddress/subnetmask/gateway/dns op van je provider en vul die handmatig hieronder in.

#add wan interface
vi /etc/config/network

#add/edit the following 6 line text block at end without this comment!

config interface wan                                                            
        option ifname   eth1                                                    
        option proto    static
        option ipaddr   10.0.0.99
        option netmask  255.255.255.0
        option gateway  10.0.0.1
        option dns      8.8.8.8

#to make new settings active restart network interfaces!
/etc/init.d/network restart

#to make new dhcp settings active restart dnsmasq!
/etc/init.d/dnsmasq restart

opkg packet manager

Voordat er functionaliteit kan worden toegevoegd (wifi/usb/proxy/etc) moet er in openwrt pakketten geinstalleerd en verwijderd kunnen worden. Daarvoor moet er eerst een werkende "wan" zone zijn die het apparaat met het internet verbind zodat het commando "opkg update" een lijst van beschikbare pakketjes van het internet kan ophalen. Dit hebben we als het goed is hiervoor al gedaan (een paar stappen terug bij "interfaces > wired")! Overigens is het ook mogelijk om handmatig alle pakketten (mits je de dependencies weet) met scp naar de router te kopieren en lokaal te installeren zonder internet, dit is wel omslachtiger!

opkg update
opkg list | grep zoekterm
opkg install nano #installs simple text editor
opkg remove nano #removes it

mini-pci

Deze uitbreidings interface werkt standaard out of the box, wel is het handig om de module "pciutils" te laden zodat je gemakkelijk kan herkennen welke mini-pci kaarten je hebt geplaatst door naam/fabrikant of "device/vendor id" te tonen.

opkg update
opkg install pciutils

lspci
lspci -vbn

pcmcia/cardbus

Deze gedateerde uitbreidings interfaces "pcmcia" en de iets nieuwere "cardbus" hebben de volgende (kernel) modules nodig "kmod-pcmcia-core kmod-pcmcia-yenta pcmciautils" die laatste is handig om de geplaatste kaarten te herkennen via naam/id. Daarnaast moeten we ze zelf in de opstart routine plaatsen, zodat ze tijdens het opstarten worden geinitialiseerd, wel optijd voordat het netwerk initialiseerd anders blijven de netwerk interfaces op de pcmcia/cardbus non-actief.

Na het installeren van de modules zou je oorspronkelijk om boot services te initialiseren met "/etc/init.d/servicname enable" moet werken, dit plaatst automatisch een symlink in de map "/etc/rc.d/Scijfservicenaam" die ervoor zorgt dat de service op een bepaald moment bepaald door het voorvoegsel S/K en nummer word gestart. Maar om er zeker van te zijn dat dit optijd gebeurt doen we dit zelf.

Let Op: Echter dient dit voor openwrt release backfire 10.03.1 op een andere wijze te geschieden dan attitude adjustment 12.09!

Installeer pcmcia (kernel) modules en start deze handmatig:

opkg update
opkg install pcmciautils kmod-pcmcia-core kmod-pcmcia-yenta
pcmcia-socket-startup

Betrek pcmcia bij het opstarten in backfire 10.03.1:

ln -s /etc/init.d/pcmcia /etc/rc.d/S35pcmcia
ln -s /etc/init.d/pcmcia_socket /etc/rc.d/S36pcmcia_socket

Betrek pcmcia bij het opstarten in attitude adjustment 12.09:

ln -s /etc/init.d/pcmcia /etc/rc.d/S15pcmcia
ln -s /etc/init.d/pcmcia_socket /etc/rc.d/S16pcmcia_socket

usb

Deze handige aansluitingen hebben eveneens (kernel) modules nodig afhankelijk voor de toepassing. Als je usb voor opslag, sticks of harddisken wil gebruiken dan zijn andere modules nodig dan voor usb wifi, ethernet of seriele adapters zelfs geluid/tvkaarten temperatuur sensoren etc is mogelijk. Met de volgende modules kom je een heel eind en kun je detecteren welk usb apparaat je in ieder geval plaatst. Afhankelijk van de usb snelheid en fabrikant zijn er specifieke ehci ohxi uhci xhci modules te laden. Netals de pcmcia bus start de usb mogelijk te laat in boot proces om aan de netwerk configuratie deel tenemen, echter wanneer je enkel de storage facaliteiten van de usb gebruikt en geen ethernet/wifi apparaten dan hoef je in /etc/rc.d/S39usb niet te vervroegen.

Installeer usb gerelateerde modules:

opkg update
opkg install kmod-usb-core kmod-usb-storage kmod-usb-storage-extras kmod-usb-ohci kmod-usb-uhci usbutils fdisk kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-fs-ntfs block-mount mkdosfs e2fsprogs
#some exotic storage devices like cardreader etc
opkg install kmod-scsi-core kmod-scsi-generic 

Plug een USB apparaat in de USB port:

lsusb
lsusb -v

wireless/wifi

Naast bedrade ethernet interfaces kunnen configureren is natuurlijk de draadloze interface opzetten ook een must zodat je een wifi accesspoint van de soekris kan maken. Door de generieke mini-pci, pcmcia/cardbus en usb aansluitingen op de soekris en de uitgebreide ondersteuning van openwrt voor diverse uitbreidingskaarten zijn er eindeloos veel wifi mogelijkheden. Om wifi kaarten te configureren is het vaak handig om vanuit de naam van de chipset op de wifikaart te werk te gaan, zodat je opzoek kan gaan de drivers/modules/settings om ze werkend te krijgen. Wanneer de juiste drivers en modulen aanwezig zijn kun je de wireless functionaliteit gaan configuren in "/etc/config/wireless".

prism chipset

Oud doch bruikbaar zijn de "senao wifi b only" kaartjes van W.L., zelfs met WPA2 CCMP beveiliging in AP mode (only openwrt ;-), tenminste als je weet hoe(weet het zelf ff ook niet meer ligt aan luci/webinterface ;-). Het gaat hier om de volgende twee prism2.5 gebasseerde wifi kaarten:

  • pcmcia "senao SL-2511CD PLUS ext2 e200/f200"
  • mini-pci "senao SL-2511MP 210".

Deze kaarten hebben een echte gebruiksaanwijzing en zijn een draak om aan de gang te krijgen/houden. Door de tijd heen zijn er legio aan firmware versies / combinaties voor deze kaarten en andere vereisten maar is van eerste belang om te weten dat de pcmcia bus waarmee die is aangesloten een 16bit versie is en daarom het pakket "pcmciautils" nodig heeft om op moderene distributies(debian/ubuntu/openwrt) uberhaupt herkent te worden. Bij het pcmcia hoofdstuk staat hoe je deze services kan opzetten tijdens het booten, zodat het netwerk/wifi op die bus goed initialiseerd! Als tweede is er een legio aan drivers voor deze kaarten beschikbaar, waaronder "prism", "hermes", "intersil", "orinoco", "wi" met tenslotte de "hostap-pci/cs" deze laatste is het meest stabiel en feature rijk en word standard in debian/ubuntu geladen wanneer pcmciautils de kaart benaderbaar gemaakt heeft. Verwarrend is wel de naam "hostap" aangezien dit naast driver ook de service is die op vele routers het opzetten van een AP (AccessPoint?) + WPA (wireless protected access) modus opzet. Als derde zullen de meeste van deze antieke kaartjes uit de kast van W.L. wel een firmware update nodig hebben(hoeft waarschijnlijk niet meer vanwege het voorwerk). Minstens station firmware 1.5.6/1.6.3 om uberhaupt goed aangestuurd te worden door de hostap driver en verder schijnt 1.7.4 en 1.8.2 het stabielst getest te zijn en nodig voor WPA2 CCMP modi. Tenslotte word de kaart in de meeste distributies (debian/ubuntu) in AP modus / master / infrastructure gestart dat is handig in het geval van openwrt, aangezien wij een accesspoint met deze kaart willen maken. Echter als je als client/station met andere AP's wil kunnen connecten(als laptopgebruiker) dan moet je de modus van de kaart omzetten naar managed via het commando "sudo iwconfig wlan0 mode managed".

  • pcmciautils
  • kmod-pcmcia-core
  • kmod-pcmcia-yenta
  • kmod-mac80211
  • kmod-hostap-cs
  • kmod-hostap-pci
  • hostapd
  • hostap-utils
  • hostapd-utils
  • wireless-tools
  • wpa-supplicant
opkg update
opkg install pcmciautils kmod-pcmcia-core kmod-pcmcia-yenta kmod-mac80211 kmod-hostap-cs kmod-hostap-pci hostapd hostap-utils hostapd-utils wireless-tools wpa-supplicant

Wanneer in Openwrt aan de eerste 3 voorwaarden is voldaan en na installatie van de hierboven genoemde kernel modules(openwrt12.09 heeft kmod-mac80211 echt nodig), kan het zijn dat de wifi kaarten niet direct in "/etc/config/wireless" te vinden zijn of in de webinterface van luci herkent worden.

De reden hiervoor is dat het commando "wifi detect > /etc/config/wireless" dat normaliter een wireless configuratie template voor je aanmaakt in het geval van meerdere prism2 gebasseerde kaarten niet of half werkt. Dit komt weer omdat wanneer er meer dan een pcmcia/cardbus prism2 gebasseerd wifi kaartje gebruikt word, de pci bus remapping die voor de eerste pcmcia kaart gebruikt word, ook voor de tweede word gebruikt en hij daardoor de tweede niet kan vinden omdat die dan opnieuw de eerste kaart vind (jip&janneke taal) patch griekse openwrt.org website(patch helaas enkel voor de ar71xx architectuur i.p.v. x86 in ons geval). In backfire 10.03.1 met 2x prism2 op de pcmcia/cardbus en 1x mini-pci ath5k doet het commando "wifi detect > /etc/config/wireless" het niet goed en genereerd de volgende error voor het prism2 gedeelte "prims2 unknown operand", echter met 1x prism kaart genereerd die wel werkende code en de atheros wifi kaart vind dan ook terug in het configuratie bestand.

Je zal ze zelf de juiste interfaces in het configuratie bestand "/etc/config/wireless" kunnen/moeten zetten en zorgen dat de macadressen van de kaarten wlan/radio 0/1/2 overeen komen met die van de output van "ifconfig -a" of "cat /proc/net/wireless". Zie "ifconfig -a" voor de macadressen voor juiste kaart en merk op dat de kaart zowel genoemd word met een "wifi0" interface waarbij de macaddressen met dashes "-" beschreven worden en als "wlan0/radio0" interface waarbij de mac addressen met colon beschreven worden ":".

Let Op:backfire 10.03.1 gebruikt "wlan0" en attitude adjustment 12.09 gebruikt "radio0" voor de interface!

# example code # /etc/config/wireless

config wifi-device 'wlan0' #<--- wlan0 for "backfire", radio0 for "attitude adjustment"
        option type 'prism2'
        option macaddr '00:02:6F:xx:xx:xx' #<--- ADD corresponding MAC address to wlan0/radio0 device!
        option channel '6'
        option diversity '0'

        # REMOVE THIS LINE TO ENABLE WIFI:                                      
        option disabled 0

config wifi-device 'wlan1'
        option type 'prism2'
        option channel '11'
        option macaddr '00:02:6f:xx:xx:xx'
        option diversity '0'

        # REMOVE THIS LINE TO ENABLE WIFI:                                      
        option disabled 0

config wifi-iface
        option device 'wlan0' #<--- wlan0 for "backfire", radio0 for "attitude adjustment"
        option network 'lan'
        option mode 'ap'
        option ssid 'http://www.wirelessleiden.nl/0'
        option encryption 'none'


config wifi-iface
        option device 'wlan1'
        option network 'lan'
        option mode 'ap'
        option ssid 'http://www.wirelessleiden.nl/1'
        option encryption 'none'

Hint: Een andere manier/omweg zou zijn om maar een enkele kaart tegelijk in de soekris te plaatsen, deze te detecteren naar een eigen bestand "wifi detect > /etc/config/wireless.0" en de tweede kaart opnieuw "wifi detect > /etc/config/wireless.1" te doen en met de laatste kaart ook weer "wifi detect > /etc/config/wireless.2". Daarna alle wireless bestanden aan elkaar plakken "cat wireless.* > wireless" en dan alleen nog de wlan0/1/2 interface namen corresponderened met MACADDRESSEN maken omdat ze dan waarschijnlijk allemaal wlan0/radio0 heten!

wireless accesspoint settings

Nu er een configuratie template is "/etc/config/wireless", kun je het wifi accesspoint gaan inregelen. Je zal waarschijnlijk al bekende termen zijn tegengekomen zoals SSID, channel, encryption of lan network. De wifi kaarten zullen in ons voorbeeld gebridged worden naar de al gedefineerde "lan" zone dus dat is de eth0 interface met 192.168.1.1/24 waar al dhcp server opdraaid. De eerste kaart krijgt channel 6 de tweede channel 11 dit kan je zelf wijzingen, de ssid naam heb ik ook aangepast en mag maximaal 32 tekens lang zijn (asci formaat op enkele symbolen na google...). Met encryption 'none' of 'psk2' kun je kiezen tussen een open accesspoint of beveiligd met wpa2(tkip+CCMP). Met de optie 'wpa2' niet te verwarren met 'psk2' kun je WPA enterprise beveiliging opzetten zoals (eduroam) met een radius authenticatie server dit is iets heel anders dan 'psk2' presharedkey2, zie eduroam bij projecten wireless leiden voor instellingen!

atheros chipset

Een andere bekende wifi chipset fabrikant "atheros" word ook in openwrt uitgebreid ondersteund. De vorige generatie van de momenteel in de nodes gebruikte (winston/neweb cm9 atheros 5214) wifi kaarten zijn de 5212 5213 kaarten. Deze kunnen naast 2,4 ook 5,8ghz aan (dual band)! De voor atheros met accesspoint/station benodigde modules zijn:

  • kmod-madwifi
  • kmod-mac80211
  • kmod-ath
  • kmod-ath5k
  • kmod-ath9k
  • kmod-ath10k
  • hostapd
  • hostapd-utils
  • wireless-tools
  • wpa-supplicant
  • crda
opkg update
opkg install kmod-madwifi kmod-mac80211 kmod-ath kmod-ath5k kmod-ath9k hostapd hostapd-utils wireless-tools wpa-supplicant crda

Met de volgende "/etc/config/wireless" template bestanden kun je 2,4 of 5ghz dualband functionaliteit van de atheros kaarten inregelen op gewenste channels! De template verkrijgen kan ook automatisch plaatsvinden wanneer alle benodigde modules aanwezig met "wifi detect > /etc/config/wireless", zo niet zie het voorbeeld!

# example code # /etc/config/wireless

config wifi-device  radio0                                                      
        option type     mac80211                                                
        option channel  1                                                       
        option macaddr  00:xx:xx:xx:xx:x1                                       
        option hwmode   11g                                                     
        # REMOVE THIS LINE TO ENABLE WIFI:                                      
        option disabled 0                                                       
                                                                                
config wifi-iface                                                               
        option device   radio0                                                  
        option network  lan                                                     
        option mode     ap                                                      
        option ssid     http://www.wirelessleiden.nl/2ghz                                                  
        option encryption none                                                                           
                                                                                
config wifi-device  radio1                                                      
        option type     mac80211                                                
        option channel  48                                                      
        option macaddr  00:xx:xx:xx:xx:x2                                      
        option hwmode   11a                                                     
        # REMOVE THIS LINE TO ENABLE WIFI:                                      
        option disabled 0                                                       
                                                                                
config wifi-iface                                                               
        option device   radio1                                                  
        option network  lan                                                     
        option mode     ap                                                      
        option ssid     http://wirelessleiden.nl/5ghz                                              
        option encryption none                                                  
countrycode dfs radar

Naast dat de prism gebaseerde senao kaarten een firmware upgrade nodig hadden om goed te functioneren, hebben de atheros kaarten bij levering eigenlijk een specifieke landcode nodig in de firmware, de default regdomain code 0x0 debugmode word in de nieuwe linux kernels opgemerkt als US waardoor channel 12-13 op de 2,4ghz en een aantal kanalen op de 5ghz wegvallen en niet direct bruikbaar zijn in native builds van openwrt. Via de Windows tool RCU.exe en de atheros driver van Commview kan wanneer pin13 op de minipci kaart is afgeplakt (PLAKBAND ;-) deze eenvoudig worden gefixed op de juiste regio. Voor europa is ETSI1_WORLD 0x37 als regdomain aan te raden. Via linux kan via ath_info of eth-tool onderdeel van de madwifi driver vaak alleen via een oudere kernel ook het regdomain worden gepatched. Soms moet er nog wel een bepaalde register op de kaart aan of uit geschakeld worden bijvoorbeeld 1:0 4:0. Naast kanaal bereik kan dit ook invloed hebben op het vermogen dat uitgezonden mag worden, exacte details staan bij de links/urls/references beschreven.

Voor de 5ghz is er dfs/radar detectie nodig en deze ontbreekt in de opensource drivers, de nieuwste versie van ath9k heeft deze wel in openwrt trunk barierbreaker, kortom enkele kanalen werken maar op beperkt vermogens op de 5ghz band, maar dan weet je waarom!

overige wifi chipsets

Werkbare drivers kun je voor wifi kaarten gebaseerd op broadcom, intel, ralink en realtek en meer waarschijnlijk allemaal aan de gang krijgen. Niet allemaal zullen ze accespoint(master) mode ondersteunen vooral oudere intel kaarten!

watchdogtimer / leds

Voor de soekris net48xx boarden zijn specifieke leds aan te sturen mogelijk, voor de andere boarden meer generiek de amd geode (sc11xx) en elan (sc520) gebaseerde boarden zijn watchdog timers mogelijk. Een watchdog timer kan gebruikt worden om het board automatisch te resetten als deze bijvoorbeeld is vastgelopen. Hoe dit gebruikt moet worden weet ik nog niet! In 12.09 heeft het pakket kmod-wdt-sc520 i.t.t kmod-sc520-wdt...

opkg install kmod-leds-net48xx kmod-sc520-wdt kmod-scx200-wdt

firewall (port)forwarding

Het standaard gedrag voor openwrt is dat van buitenaf op de "wan" zone geen enkele service bereikbaar is, zelfs geen ssh! Vanuit dit configuratie bestand "/etc/config/firewall" kun je bijvoorbeeld binnenkomende porten openzetten op de "wan" zone of forwarden naar een lokaal ip op de "lan" zone. Het volgende voorbeeld laat zien hoe je de volgende services:ssh, webinterface, proxy en iperf toevoegd aan de firewall instellingen.

# add. example code # /etc/config/firewall

#Add + these additional rules

#! Allow SSH <---
config rule
        option src              wan
        option proto            tcp
        option dest_port        ssh
        option target           ACCEPT

#! Allow http <---                                      
config rule                                            
        option src              wan                    
        option proto            tcp                    
        option dest_port        http                    
        option target           ACCEPT
        
#! Allow proxy <---
config rule   
        option src              wan                    
        option proto            tcp                    
        option dest_port        3128                  
        option target           ACCEPT
                                 
#! Allow iperf <---
config rule                                            
        option src              wan                    
        option proto            tcp                    
        option dest_port        5001                   
        option target           ACCEPT

Om deze extra firewall uitbreidingen actief te maken, moet je de firewall service herstarten. Dit doe je net als vele andere services met /etc/init.d/servicenaam restart! Maak firewall wijzigingen actief:

/etc/init.d/firewall restart

Let Op: Verkeerde firewall instellingen kunnen ervoor zorgen dat je jezelf buitensluit! Enkel kun je dan alleen via serial-console of als je geluk hebt via de lan nog binnenkomen!

Extra zone(s) (afgezonderd in wlgst voorbeeld) definieren kan op de volgende manier, wel moet dan nog een aansluitende interface in /etc/config/network en een extra item aan /etc/config/dhcp worden toegevoegd of er nou wel of geen dhcp server draait, als je de wifi hierbij wil betrekken moet je ook /etc/config/wireless editen. Deze services moeten na het wijzigen ook ieder opnieuw gestart worden!

# add. example code # /etc/config/firewall

config zone
        option name             lanb
        option network          'lanb'
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT

config forwarding                     
        option src              lanb   
        option dest             wan 

# add. example code # /etc/config/dhcp

config dhcp lanb                                           
        option interface        lanb                       
        option start    100                               
        option limit    150                   
        option leasetime        12h

# add. example code # /etc/config/network

config interface lanb
        option ifname   eth2
        option type     bridge
        option proto    static
        option ipaddr   192.168.12.1
        option netmask  255.255.255.0

Een afgezonderd guest netwerk voor bijvoorbeeld wifi is ook op te zetten zelfs met virtual/multi ssid op een enkele atheros kaart, zie eduroam accesspoint als praktijk voorbeeld. Hieronder de settings.

# add. example code # /etc/config/firewall

#! Allow multiSSID wlgst zone if not bridging <---
config zone
	option name		wlgst
	option input		REJECT
	option forward		REJECT
	option output		ACCEPT

#! Allow multiSSID wlgst to internet on wan <---
config	forwarding
	option src	wlgst
	option dest	wan

#! Allow multiSSID wlgst to DNS <---
#! Client DNS queries ordinate from dynamic UDP ports (>1023) 
config 	rule 
	option src 		wlgst 
	option dest_port 	53 
	option proto 		tcpudp 
	option target 		ACCEPT

#! Allow multiSSID wlgst to DHCP -> Router <---
#! DHCP communication uses UDP ports 67-68 
config 	rule 
	option src	wlgst 
	option src_port 67-68 
	option dest_port	67-68 
	option proto	udp 
	option target 	ACCEPT

# add. example code # /etc/config/dhcp

#! Add extra dhcp-server for multiSSID hotspot when using nat <--- 
config dhcp wlgst
        option interface        wlgst
        option start	5
	option limit	252
	option leasetime	1h

# add. example code # /etc/config/network

#! Add this wlgst interface 
config interface wlgst
	#option ifname	wlgst
	#option type	bridge
	option proto	static
	option ipaddr	192.168.5.1
	option netmask	255.255.255.0

# add. example code # /etc/config/wireless

#! Add extra virtual/multissid AP to radio0
config wifi-iface
        option device   radio0
        option network  wlgst
        option mode     ap
        option ssid     guestnetwork2.4ghz
        option encryption none

vlans

Dit is een extreem handige feature en word in het veld veel gebruikt om netwerken te scheiden die over een enkele fysieke kabel of binnen een (managed)switch lopen. In openwrt kunnen de vlan instel methoden aanzienlijk verschillen tussen de architecturen en gebruikte ethernet interfaces of ingebouwde managed switches. De volgende vlan instel mogelijkheden die we gaan toepassen zal voor apparaten met unieke eth interfaces i.t.t. ingebouwde (managed)switches redelijk generiek toepasbaar zijn en op andere linux distributies ook functioneren.

Let op: Echte embeddded apparaten met ingebouwde (managed)switches zoals Linksys WRT54GL, TPLINK wr1043ND, microtik routerboards of UBNT Airrouter zullen andere parameters vereisen en niet werken met onderstaande vlan opties.

In openwrt 10.03.1 en 12.09 is standaard het pakket "vconfig" aanwezig met kernel module "8021q", dit laatste heb je wellicht tijdens het booten al zien paseren. Met "vconfig" is voor iedere echte "eth" network interface direct vanuit de C.L.I. een of meerdere (4096) vlans voor die interface te creeeren. Als de standaard interface "eth0" met bijvoorbeeld 192.168.45.1 is geconfigureerd en functioneerd met een dhcp server, kun je door "vconfig add eth0 7" een tagged vlan7 toevoegen waar weer een eigen ipaddress bv 192.168.77.1 ook met dhcp server opgezet kan worden. Beide dhcpservers en subnets lopen over de zelfde kabel, de basis interface untagged en daar zijn alle apparaten gevoelig voor en de vlan interface op tagged. Wanneer deze kabel direct met een normale pc dhcp client gestop word kan deze client enkel de dhcp server op de untagged interface benaderen aangezien zijn eigen pakketjes geen vlan7 tag meesturen, echter wanneer de kabel in een inteligente (managed) switch word geplaatst kan deze switch beide netwerken weer over twee porten verdelen en de vlan7 taggen geheel voorzich zelf untagged naar een vrije port op de switch zetten. Als je daar weer je client pc op inhaakt krijg je wel een ip adres van de dhcp server op de vlan7 interface. Dit klinkt moeilijker dan het lijkt. Je hebt wel een managed switch nodig om makkelijk te demonstreren hoe het werkt.

Let Op: In backfire 10.03.1 werkt vlans opzetten niet direct met interfaces waar een bridge op zit (received geen packets omdat deze in de bridge belanden) en dat is bij ons met eth0 die een bridge is het geval, kies daarom hier "br-lan" i.p.v. "eth0" zowel bij vconfig als later bij het aangeven van ifname in /etc/config/network!

Maak een tagged vlan 7 op de bestaande eth0 interface:

vconfig add eth0 7
ifconfig -a #shows newly undefined tagged vlan interface as eth0.7

Geef tijdelijk (overleeft reboot niet) een ipadress/subnetmask aan deze eth0.7 interface:

ifconfig eth0.7 192.168.77.1/24 

Als je de vlan settings permanent wil maken zodat ze een reboot overleven, moet je deze opzetten in /etc/rc.local zodat ze iedere keer opnieuw worden opgezet. Daarnaast moet deze eth0.7 interface netals iedere andere interface in /etc/config/network gedefinieerd worden, tevens de bijbehorende dhcp en firewall settings. # add. example code # /etc/rc.local

#at end of comments
/sbin/vconfig add eth0 7
#between exit0 statement

ip alias

Handige feature die in het veld veel gebruikt word, hierdoor kan een enkele ethernet interface "eth0" met een enkel macaddress over dezelfde kabel toch met verschillende subnets functioneren die totaal niet in elkaars range liggen. Bij wirelessleiden zie je dit veel op de interlinks, omdat daar het aantal ip's al beperkt is en er soms meerdere stations op een ap zitten met totaal een andere eind node! Wanneer een alias ip word toegevoegd word deze afhankelijk van de methode niet altijd weergegeven met ifconfig of ifconfig -a, daarvoor heb je de "ip" en "kmod-macvlan" nodig. Dat laatste "kmod-macvlan" plaatst extra virtuele macaddressen op de interface waar een eigen (alias)ip aan vast komt, dit is vooral handig als je met dhcp-client wil werken, zodat iedere apparte mac een eigen unieke ip van dhcp server kan krijgen omdat de dhcp server deze unieke requests kan onderscheiden!

# add. example code # /etc/config/network

config alias lan5                                                                      
        option proto     static
        option interface lan
        option ipaddr    192.168.5.1
        option netmask   255.255.255.0

De volgende methode is wat robuster maar vereist iets meer moeite maar is wel compatible met bijvoorbeeld meerdere alias ip's die via dhcp-clients ieder uniek gevoed willen worden met een ip. De modules "ip" en "kmod-macvlan" zijn hiervoor nodig. Netals met vlans worden de virtuale macaddressen iedere reboot opgezet via /etc/rc.local en op reguliere worden deze nieuwe interfaces in /etc/config/network geconfigureerd!

opkg update
opkg install ip
opkg install kmod-macvlan

# add. example code # /etc/rc.local

#at end of comments
ip link add link eth1 eth3 type macvlan
ifconfig eth3 hw ether 00:11:22:33:44:54
ifup -a
#between exit0 statement

# add. example code # /etc/config/network

config interface wan3
        option ifname    eth3                                                          
        option proto     static                                                             
        option ipaddr    192.168.50.1                                                      
        option netmask   255.255.255.0

bridges

Deze functionaliteit word in de achtergrond normaal al gebruikt om de bedrade lokale interface "eth0" (lan) te bridgen met draadloze interface "wlan0" (accesspoint), iets dat in de meeste huis tuin en keuken (modem)routers een gewoonte is, zodat wireless gebruikers op het accesspoint toch direct met de bedrade printer of NAS kunnen communiceren op de lan interface. Bij bridging word niet gekeken naar ip informatie/bestemming maar word alles onvoorwaardelijk doorgestuurd beide kanten op, wel kan er op basis van MAC address een voorkeur route ontstaan waardoor het verkeer enkel op de juiste interfaces aankomt (op broadcast verkeer na)!

Met de volgende commando's kan in openwrt met de hand bridge interfaces beheerd worden:

brctl show #shows current active bridges
brctl addbr br-brlan1 #creates new bridge with name brlan1
brctl delbr br-brlan1 #removes it
brctl addif br-lan eth2 #add interface eth2 to br-lan
brctl delif br-lan eth2 #removes it

/etc/config/network

#add extra wired interface eth1 to existing lan
config interface lan
	option type bridge
	option proto static
	option ipaddr 192.168.45.1
	option netmask 255.255.255.0
	option _orig_ifname eth0
	option _orig_bridge true
	option ifname eth0 eth1

#bridge between the two vlan interfaces VID 100  
config interface brlan1
    option type bridge
    option ifname 'eth0.100 eth2.100'
    option proto none
    option auto 1

port isolation

Met ebtables kun je met dezelfde insteek (input/output/forward) als iptables filters opgeven hoe bridges en hun member interfaces data verkeer doorlaten. Hiermee zou je bijvoorbeeld layer2 port isolation kunnen bereiken wat handig kan zijn voor roaming met meerdere accesspoints binnen hetzelfde subnet omdat bijvoorbeeld broadcast verkeer of het omleiden van verkeer naar een client daarmee ommogelijk word. Dit is niet alleen handig voor toenemende veiligheid maar ook om de airtime in de wifi laag te vergroten. Hieronder 2 voorbeelden. Het eerste voorbeeld gaat ervan uit dat er een enkel lan subnet op de bridge interface in de router zelf zit en dat alle members van die bridge o.a. accesspoints op unieke bridge member interfaces of vlans niet met elkaar mogen communiceren(dus wel met de br0 "cpu" van de router zelf). Het tweede voorbeeld geeft een mogelijk om enkel bepaalde member interfaces van een bridge toegang tot andere members te ontzeggen maar niet tot andere onderdelen van de bridge.

ebtables --append FORWARD --logical-in br0 --jump DROP
ebtables -A FORWARD --in-interface eth0 --out-interface eth1 -j DROP
ebtables -A FORWARD --in-interface eth1 --out-interface eth0 -j DROP

Direct aan de slag!

Met wat eigenlijk? Met doosjes hardware(soekris boards/wifi uitbreidingen) en software als referentie of functionaliteiten zoals router en accesspoint opzetten en de hardware software instellingen ondersteunend maken aan dat verhaal? Ik heb het nu aan de hand van de hardware beschreven, tegelijk met het mixen van functionaliteiten zonder die direct altijd te benoemen en ook nog eens met verschillende openwrt versies... dit moet nog opgeschoond worden.

Het eerste doel is een router op te zetten, die qua functionaliteit overeenkomt met de router in een huis tuin en keuken accesspoint van een reguliere interprovider, daarbij wifi toevoegen en mogelijk wat meer.

soekris 4501

Werkt met standaard image ook prima, net als de 4521 tevens net zo traag ;-) heeft met dns-resolve te maken!

soekris 4521

Ondanks dat de meeste hardware direct is aan te spreken vanuit opernwrt gaan de pcmcia sloten pas werken als daarvoor de juiste (kant en klare) pakketjes uit de reposity zijn geladen, dit geldt voor zowel backfire als attitude adjustment. Maar het laden uit de repository gaat pas werken wanneer het board via de "wan" aansluiting op het internet is aangesloten. Echter de "wan" aansluiting is standaard in de network config niet geconfigureerd, dit omdat niemand kenlijk een nette detect board-layout heeft opgegeven aan de openwrt developers, zodat gedetecteerd kan worden welke interfaces in het minste geval een ethernet adapter heeft beschikt eth0(poe+lan). Daarom moet er eerst een "wan" interface worden toegevoegd en "eth0" bij de lan vervangen worden door "eth1" en "eth0" bij de "wan" plaatsen. Tenslotte kun je dan pas na de reboot het board met de pakket manager verder configureren. Nu eerst de CF kaart voorbereiden!

#download openwrt image on client pc/laptop with card-reader
wget http://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/openwrt-x86-generic-combined-squashfs.img

#warning dd will overwrite anything and can destroy data in a inrecoverable fashion on your own PC!!!
#write bootable image directly to CF-CARD
sudo dd if=openwrt-x86-generic-combined-squashfs.img of=/dev/sdX

#if you don't have ConMute=Enabled in comBIOS nor have a serial 
#cable active console with soekris follow the steps at chapter "grub boot loader"

Plaats de CF-CARD in de soekris, en sluit een losse lan/poe kabel van eth0 port op de soekris (dichtst bij de voeding) direct op je PC aan. Je PC zal via dhcp automatisch een ip van de soekris krijgen zo niet, de port is namelijk ingesteld als lokaal LAN en de tweede/derde ethernet port moet ook geconfigureerd worden!

#login via telnet
telnet 192.168.1.1

#add default password dit moet!
passwd

#reboot so rootfs will be writable next boot
reboot;exit

#login again, but with ssh
ssh root@192.168.1.1

#backup original config files
cp -r /etc/config /etc/config.ori

#add wan interface
vi /etc/config/network #see example code!

#add 'ssh' and 'http' to firewall rules
vi /etc/config/firewall #see example code!

#finish setting up networkinterface and firewall
reboot;exit

#disconnect PC lan cable from soekris
#connect the soekris via wan interface 
#directly to the local router with internet!

# example code # /etc/config/network

# Copyright (C) 2006 OpenWrt.org

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 type     bridge
        option proto    static
        option ipaddr   192.168.45.1
        option netmask  255.255.255.0

config interface wan
        option ifname   eth1 #! <---
        option type     bridge
        option proto    dhcp
        #option proto    static
        #option ipaddr   172.16.6.45
        #option netmask  255.255.255.0

Driemaal scheepsrecht, na de derde boot kun je het systeem op reguliere OpenWRT wijze beheren. Eerst wat pakketten installeren met de pakket manager, daarna de pcmcia sloten inregelen en de wifi aanzetten. De snelheid van de soekris is erg laag dus alle pakketten in een keer installeren doet de ssh sessie enkele minuten stil staan/freezen maar hij hangt niet dus wacht rustig af!

#login via ssh
ssh root@routeradres

#update list of available packages
opkg update

#install packages
opkg install fdisk usbutils kmod-usb-storage pcmciautils pciutils kmod-mac80211 kmod-hostap-cs kmod-pcmcia-core kmod-pcmcia-yenta ipcalc iperf nmap tcpdump nano luci-app-olsr nodogsplash tinyproxy openvpn hostapd wpa-supplicant wget tar kmod-macvlan

Zie pcmcia en wifi (prism) voor opzetten wireless accespoint/station connectiviteit!

soekris 4801

Setup idem as 4521/4501?

# add. example code # /etc/config/dhcp

config dhcp lanb                                           
        option interface        lanb                       
        option start    100                               
        option limit    150                   
        option leasetime        12h

# add. example code # /etc/config/firewall

config zone
        option name             lanb
        option network          'lanb'
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT

config forwarding                     
        option src              lanb   
        option dest             wan 

#! Allow SSH <---
config rule
        option src              wan
        option proto            tcp
        option dest_port        ssh
        option target           ACCEPT

#! Allow http <---                                      
config rule                                            
        option src              wan                    
        option proto            tcp                    
        option dest_port        http                    
        option target           ACCEPT
        
#! Allow proxy <---
config rule   
        option src              wan                    
        option proto            tcp                    
        option dest_port        3128                  
        option target           ACCEPT
                                 
#! Allow iperf <---
config rule                                            
        option src              wan                    
        option proto            tcp                    
        option dest_port        5001                   
        option target           ACCEPT

# example code # /etc/config/network

# Copyright (C) 2006 OpenWrt.org

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 type 	bridge
 	 option proto	static
	 option ipaddr	192.168.11.1
	 option netmask	255.255.255.0

config interface lanb
        option ifname   eth2
        option type     bridge
        option proto    static
        option ipaddr   192.168.12.1
        option netmask  255.255.255.0
	
config interface wan
        option ifname   eth1
        option type     bridge
        option proto    dhcp

soekris 4826

Dit board zonder CF kaart moet waarschijnlijk wel via de serial port aansturen tot een tftp / PXE boot om openwrt te laden, maar wanneer het er eenmaal opstaat kun je blijven experimenteren. USB headers onboard kan direct een werkende usbport van gemaakt worden. Deze usb port kan via plop bootmanager geboot worden (mits syslinux op de usb staat ipv grub). Openwrt moet dan als die op de usbstaat met extroot werken en usb modules in de image hebben.

IPERF

Met iperf kun je netwerk bandbreedte testen uitvoeren, je krijgt dan een aardig idee van de full/half-duplex mogelijkheden van de verbinding m.b.t. pakketgrote/timing karakteristieken. Met opkg kan je de module iperf laden en in rc.local kunnen we deze quick en dirty met het opstarten betrekken. Houd er wel rekening mee dat verschillende iperf / kernel versies andere window/frame sizes gebruiken dat invloed op de performance heeft, udp testen geeft trouwens de mogelijkheid om jitter en loss te testen echter moet de server dan wel in udp gestart worden!

Installeer iperf:

opkg update
opkg install iperf

# add. example code # /etc/rc.local

/usr/bin/iperf -s -D #-u

Op de client pc start je een iperf sessie met de iperf server op 192.168.45.1 die tweerichtingsverkeer 20 seconden lang test en bandbreedte reporteerd in MegaBytes?:

iperf -c 192.168.45.1 -d -t 20 -f M
iperf -c 192.168.45.1 -d -t 20 -f M -u -b 50M -i 2 #rapporteert om de twee seconde udp 50Mbit test jitter/loss

Benchmark CPU

Zie uitslagen vergelijkende benchmarks openwrt benchmark results en pcengines forum apu benchmark. Dit geeft voor de reken capaciteiten "cpu" een redelijke indicicatie, dus geen HD/NET/RAM I/O!

opkg update
opkg install openssl-util

Start de benchmark door het volgende lange commando te copy-pasten:

openssl speed md5 sha1 sha256 sha512 des des-ede3 aes-128-cbc aes-192-cbc aes-256-cbc rsa2048 dsa2048 | tee /tmp/sslspeed | awk -v ORS="" '$1 ~ /OpenSSL/ {print "| " $2 " |"} $1 ~ /(md5|sha)/ {print "  " $5 " |"} $1 ~ /(des|aes)/ {b = b "  " $6 " |"} $1 ~ /(rsa|dsa)/ {print b "  " $6 " |  " $7 " |";b=""} END { print "\n" }' | sed 's/\.\(..\)k/\10/g'

# example results #

#soekris net4521: bios 133 64MB RAM
| 1.0.1e |  6205580   |  1976560  |  1000190  |  599040   |  822930   |  298670  |  1142050  |  997800   |  885200   |  0.4  |  14.0  |  1.4  |  1.2  |
| 1.0.1e |  6069160   |  1977920  |  998230   |  597050   |  825660   |  291890  |  1142050  |  997460   |  885880   |  0.4  |  14.0  |  1.4  |  1.1  |

#alix apu1b: 2GB dualcore AMD G-T40N Processor (custom openwrt nusku 12.09 dualprocessor/highram support)
| 1.0.1e |  133354500 |  56383490 |  24429570 |  10011990 |  19091110 |  6585340 |  34929320 |  30816260 |  27237380 |  23.3 |  883.4 |  88.3 |  71.5 |
| 1.0.1e |  133459290 |  56265050 |  24418300 |  10021890 |  19090090 |  6595930 |  35962200 |  31771310 |  28062720 |  24.3 |  918.2 |  91.6 |  75.7 |

Captive Portal / Splash

Dit is de benaming van de functionaliteit die wifi/laptop/smartphone gebruikers vaak tegen komen bij free/open hotspots wanneer ze er gebruik willen maken van het internet. Zodra ze in hun webbrowser op de laptop/smartphone een website oproepen (http) krijgen ze een welkomspagina (splash/captiveportal) geserverrd waarin ze adverteerders of voorwaarden kunnen inzien pas wanneer er geklikt of bevestigd is door ergens te klikken op die welkomspagina kan de gebruiker naar zijn eigen opgevraagde gaan. Vaak word er dan nog wel even eenmalig een andere pagina tussen gepushed(redirect). Redelijk eenvoudig is zo'n functie ook in te stellen voor een lokale zelfstandige soekris openwrt node door het pakket "nodogsplash" met het configuratie bestand "/etc/nodogsplash/nodogsplash.conf" te bewerken en een eigen html splash pagina toe te te voegen/vervangen in "/etc/nodogsplash/htdocs/splash.html" en de service te activeren!

opkg update
opkg install nodogsplash

De instellingen van deze nodogsplash.conf zijn redelijk uitgebreid maar bootsen grotendeels de eigenschappen van het W.L. na met betrekking tot proxies gebruiken op andere node's of gewoon verkeer tussen nodes onderling toelaten zonder dat je lastig gevallen hoeft te worden door de captive portal! Door straks handmatig de service te enablen en deze eenmaal te starten heb je de captive portal werkend, echter met een default splash pagina!

Let Op: Nodogsplash past de firewall rules aan, dat betekent dus ook dat wanneer je hiermee experimenteerd je jezelf kan buitensluiten!

# example code # /etc/nodogsplash/nodogsplash.conf

GatewayInterface br-lan

FirewallRuleSet authenticated-users {
    FirewallRule allow to 192.168.0.0/16
    FirewallRule allow to 172.16.0.0/12
    FirewallRule block to 10.0.0.0/8
    FirewallRule allow tcp port 22
    FirewallRule allow tcp port 53
    FirewallRule allow udp port 53
    FirewallRule allow tcp port 80
    FirewallRule allow tcp port 443
    FirewallRule allow tcp port 3128
    FirewallRule allow tcp port 5001
    FirewallRule allow icmp
}

FirewallRuleSet preauthenticated-users {
    FirewallRule allow tcp port 22
    FirewallRule allow tcp port 53
    FirewallRule allow udp port 53
    FirewallRule allow to 192.168.0.0/16
    FirewallRule allow to 172.16.0.0/12
    FirewallRule allow tcp port 3128
    FirewallRule allow udp port 3128
    FirewallRule allow icmp
}

FirewallRuleSet users-to-router {
    FirewallRule allow udp port 53
    FirewallRule allow tcp port 53
    FirewallRule allow udp port 67
    FirewallRule allow tcp port 22
    FirewallRule allow tcp port 80
    FirewallRule allow tcp port 443
    FirewallRule allow tcp port 3128
    FirewallRule allow tcp port 5001
    FirewallRule allow icmp
}
GatewayAddress 192.168.45.1
RedirectURL http://wirelessleiden.nl

Betrek service bij het opstarten en activeer hem nu:

/etc/init.d/nodogsplash enable
/etc/init.d/nodogsplash start

Wanneer je niet tevreden bent de standaard template splash pagina van nodogsplash kun je deze zelf naar hartelust veranderen in " /etc/nodogsplash/htdocs/splash.html", hergebruik de trigger jpg/link klik waardoor de portal geactiveerd word en je kan vanalles aan HTML/CSS/etc inplakken.

Proxy

Dit kan naast een soort beveiligsfeature (afkappen) van http sessies naar de buitenwereld ook een performance feature zijn door data lokaal te cachen. Met dit mechanisme kan je terwijl je met je laptop/smarthpone bent ingelogd op de ene node aldan niet met eigen gateway, de proxy(gateway) van een andere node binnen het netwerk gebruiken. Hiervoor moet je enkel de juiste proxy settings in bijvoorbeeld je webbrowser invullen: proxy address en port nummer.

In openwrt is hiervoor de module tinyproxy nodig(tevens kun je de webinterface module luci-app-tinyproxy gebruiken), vervolgens kan je via het config bestand /etc/config/tinyproxy de gewenste interfaces/porten/etc inregelen en uiteindelijk deze module als een reguliere service enablen.

Installeer tinyproxy:

opkg update
opkg install tinyproxy

# example code # /etc/config/tinyproxy

config tinyproxy
        option User 'nobody'
        option Group 'nogroup'
        option Port '3128'
        #option Listen '192.168.1.0'
        option Timeout '600'
        option DefaultErrorFile '/usr/share/tinyproxy/default.html'
        option StatFile '/usr/share/tinyproxy/stats.html'
        option LogFile '/var/log/tinyproxy.log'
        option LogLevel 'Critical'
        option MaxClients '100'
        option MinSpareServers '5'
        option MaxSpareServers '20'
        option StartServers '10'
        option MaxRequestsPerChild '0'
        list Allow '127.0.0.1'
        list Allow '192.168.0.0/16'
        list Allow '172.16.0.0/12'
        option ViaProxyName 'tinyproxy'
        list ConnectPort '443'
        option enabled '1'

Betrek service bij het opstarten en activeer hem nu:

/etc/init.d/tinyproxy enable
/etc/init.d/tinyproxy start

Als we naar het config bestand kijken kunnen we zien dat deze op alle private ranges is toegestaan en dat die port 3128 gebruikt!

Routing opzet

Het aansluiten/inloggen van een laptop/tablet/desktop op de wifi van je adsl-modemrouter van de internetprovider levert bij de meeste direct een werkende internetverbinding op. Dit werkt als volgt. Via de client apparatuur, zoals een tablet, kies je een SSID/hotspotnaam en vul je mogelijk een wachtwoord in, vervolgens zal de wirelessnetwerkkaart via een dhcp-verzoek (meestal een lokaal private) ip-adress opvragen aan de dhcp-server op de modemrouter zelf. Deze antwoordt en geeft naast een private lokaal ip-adres (iets in de trant van 192.168.1.15 of 10.1.1.15 )direct in dit bericht het "gateway" en de "dns server" adres mee. Met alleen het ip adres kan je tablet alleen met apparaten binnen dat zelfde interne lokale ip netwerk (subnet) binnen de modemrouter communiceren. Door het bekent maken van de gateway aan de tablet kunnen adressen buiten de lokale ip range 192.168.1.x achterhaald worden die zich op het netwerk voor de modemrouter bevinden namelijk het internet. De dns server zorgt ervoor dat in de webbrowser alle adresnamen van websites achterhaald kunnen worden. De modemrouter bij de meeste mensen thuis vertaald dus continue interne private ip adressen naar zijn eigen publieke ip adres waarmee die met het grote netwerk van het internet kan communiceren. Dit heet NAT en moet gebeuren omdat de router aan de internetzijde van de adslmodemrouter bij de internetprovider niet weet welke interne private ipadressen erachter je router zitten en ook al zou die het weten dan kan het goed mogelijk zijn dat de adsl-modemrouter van je buren bijvoorbeeld ook dezelfde interne private ip als jij gebruikt. De router van de internetprovider zou dan niet weten of die informatie voor 192.168.1.15 naar jouw tablet achter jouw router moet plaatsen of naar de desktop-computer van de buren die toevallig hetzelfde interne ip adres gebruikt. Daarom dus NAT: Network Address Translation.

Een node van wireless leiden kun je op vergelijkbare wijze zien, maar toch zijn er dingen anders. Binnen wireless leiden kunnen gebruikers lokaal andere gebruikers op andere plaatsen direct bereiken integenstelling tot thuis met NAT waar je vanaf het internet eigenlijk alleen de modemrouter kunt benaderen en niet direct de apparaten er achter. Je kunt dus binnen een node met de apparaten op hetzelfde AP communiceren maar ook tussen nodes met apparaten die op een andere plaats weer als client zitten op het AP van die node.

Dit kun je bereiken door de "wan" interface op node in de /etc/config/firewall optie van NAT te ontdoen door masq op 0 te zetten (masquerade). Vervolgens moet je dan nog de forwarding en input ACCEPTEN. Door deze opties te regelen kan er verkeer ongehinderd van binnen naar buiten of terug. Maar nu is voor de router nog onbekend wie of waar zit. Door routing tabellen op te zetten kun je een router vertellen dat bepaalde ip adressen niet op lokale node zitten maar op een andere. Andersom moet er op die andere node ook verteld worden welke addressen op je eigen node zitten. Dit vertellen kan static of dynamisch gebeuren, dat laatste is de kracht van het netwerk dat als er een punt wegvalt in de route deze een andere route kan kiezen. *Wel is het handig om de captive portal weer even uit te zetten omdat die alle routing belemmert, later zullen we deze specifiek aanpassen zodat die ook met de lokale routing werkt, maar dat inzicht verkrijgen we later pas.

/etc/config/firewall

config zone
        option name             wan
        option network          'wan'
        option input            ACCEPT
        option output           ACCEPT
        option forward          ACCEPT
        option masq             0
        option mtu_fix          1

/etc/config/network

config route                                                                    
        option interface 'wan'                                                  
        option target '192.168.54.0/24'                                         
        option gateway '172.16.6.54'                                            
                                                                                
config route                                                                    
        option interface 'wan'                                                  
        option target '192.168.20.0/24'                                         
        option gateway '172.16.6.20'                                            
                                                                                
config route                                                                    
        option interface 'wan'                                                  
        option target '0.0.0.0/0'                                               
        option gateway '172.16.6.20'

Je zou het ook handmatig in terminal kunnen intypen, maarr doet moet dan wel herhaald worden naar iedere reboot!

#ouderwets
route add -net 192.168.45.0/24 gw 172.16.6.10

#modern
ip route add 192.168.45.0/24 via 172.16.6.10 #dev eth0 of dev wan? 

#controle 
route -n
netstat -r
#alias ip ???
config interface 'wan'
    option ifname 'eth0.1'
    option proto 'dhcp'

config alias
    option interface 'wan'
    option proto 'static'
    option ipaddr '192.168.10.100'
    option netmask '255.255.255.0'
    option layer '1'
config interface 'wan'
    option ifname 'eth0.1'
    option proto 'dhcp'

config 'interface' 'wan_1'
        option 'ifname' 'eth0.1:1'
        option 'proto' 'static'
        option 'ipaddr' '192.168.10.100'
        option 'netmask' '255.255.255.0'

PXE BOOT server

Met behulp van een PXE server kan een PC met zijn netwerkaansluiting opstarten via het netwerk, als tenminste de BIOS van zo'n PC een zogenaamde "OPTION ROM" met PXE client bevat. Dit is bij zo'n beetje iedere PC/laptop na de eeuwwisseling wel het geval, wat oudere computers/laptops die niet via USB-sticks/CDROM booten kunnen soms al wel via PXE booten (zo niet zie ipxe/plop ;-). De naamgeving van deze PXE client feature in pc/laptops bios/(u)efi omgevingen verschilt nogal maar heet vaak iets in de trend van "lan boot rom" of "onboard option rom" of "preboot execution environment" etc etc!

De gestarte PXE-clien van de optionrom laat een payload (bootloader) via het netwerk van de PXE-server (tftp-protocol met behulp van dhcp), de bootloader laad op zijn beurt weer een OS kernel/init tevens van een PXE-server, netals een normale bootstrap van CDROM/HARDDISK/USB zijn uiteindelijk alle onderdelen/bestanden aanwezig/geladen in het RAM van een PC om een OS(installatie) te uit te voeren.

In het geval van de soekris4826 (met onboard vast gesoldeerd flashopslag geheugen, i.t.t een verwisselbare CF-card) kan door het ontbrekenen van bootable USB/CDROM noch via beide geen OS worden geladen! Echter door via zijn ingebouwde PXE client zich van de PXE server te laten opstarten kan die via de netwerkaansluiting toch worden voorzien voor een OS! Door de soekris (dat monitor/keyboard ontbreekt) met serial console te configureren is het mogelijk deze via PXE client te booten i.p.v. de interne flash opslag en kun je een installatie/imaging procedure uitvoeren(zie combios paragraaf voor pxe-client instructies).

DHCP + TFTP

De minimale software onderdelen die op de openwrt router nodig zijn voor een PXE server is een dhcp-server, tftp-server en (extra)opslag ruimte voor payload(OS installatie bestanden) te huisvesten. Dat laatste omvat bootloader(config/boot paramters),kernel(+init) mogelijk iso's voor het gewenste OS Fedora/Debian/Ubuntu/Freebsd?/etc dat je via het netwerk wil installeren. Deze "payloads" worden vaak in kant en klare complete pakketten aangeboden via het internet zoals met linux fedora/debian/ubuntu "netinstall.tar.gz" bestand dat enkel uitgepakt dient te worden op de extraopslag "juiste plek" van de pxeserver en daarna direct klaar is voor gebruik.

Openwrt gebruikt out of the box als dhcp-server het pakket "dnsmasq" dat tevens direct tftp-server functionaliteit kan bieden, hierdoor hoeft maar een enkel bestand geconfigureerd te worden "/etc/config/dhcp". Het dhcp gedeelte houd in het opgeven van parameters die specificeren welk bootbestand van welke tftp-server geladen kan worden, dit word dan bovenop de "normale" DHCP lease info "ip-/subnet-/gateway-/dns- address" toegevoegd. Het tftp gedeelte houd in het opgeven van parameters welke directory op de openwrt-router/tftp-server geshared kan worden! Voordat we kunnen beginnen zorgen we eerst voor wat extra opslag ruimte om benodigde bestanden op te kunnen huisvesten(usb-disk, 3e partitie ext2 fs). Vervolgens geven we de meeste PXE "basale" settings voor de tftpserver op in /etc/config/dhcp. Tenslotte "uitgebreide" PXE settings voor legacy BIOS & UEFI netwerk boot voor openwrt 12.09/14.07. Let op: Meng de basale/uitgebreide settings niet''

prepare extra storage space for keeping payloads

mkdir /mnt/sda3
mount /dev/sda3 -t ext2 /mnt/sda3

Basale PXE settings voor PC's met BIOS /etc/config/dhcp #add tftp functionality at end of first part

        option enable_tftp      1
        option tftp_root        /mnt/sda3/tftproot

/etc/config/dhcp #add dhcp additional/extended lease info end of file

config boot linux
        option filename         pxelinux.0   #name of bootloader/payload file
        option serveraddress    192.168.45.1 #address of tftpserver, in this case on the same device/router
        option servername       pxeboot      #just a name, probably not needed

of Uitgebreide PXE settings voor PC's met (legacy)BIOS & UEFI /etc/config/dhcp #add tftp functionality at end of first part

        option enable_tftp      1
        option tftp_root        /mnt/sda3/tftproot

## 12.09/14.07 add. example code # /etc/config/dhcp (legacy bios + uefi) # dhcp_option for dhcp-match not working in /etc/config/dhcp therefor use /etc/dnsmasq.conf!!!

config boot 'biospxe'                                                            
        option serveraddress '10.0.4.1'                                         
        option servername 'pxeboot'                                             
        option filename 'tag:x86PC,pxelinux.0'                                  
        list dhcp_option 'option:root-path,10.0.4.1:/mnt/sda3/exports/freebsd10-disc1'                                                                               
                                                                                
config boot 'uefi64pxe'                                                            
        option serveraddress '10.0.4.1'                                         
        option servername 'pxeboot'                                             
        option filename 'tag:efi-x86_64,bootnetx64.efi'

config boot 'uefi32pxe'
	option serveraddress '192.168.150.1'
	option servername 'bttb'
	option filename 'tag:efi-x86_32,bootnetia32.efi'

## 12.09/14.07 add. example code # /etc/dnsmasq.conf (legacy bios + uefi)

#PXE netboot legacybios plus uefi64 uefi32 matchstring
dhcp-match=set:x86PC,option:client-arch,0                                       
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-match=set:efi-x86_32,option:client-arch,6

#PXE Apple intel 32mix64 efi plus magicpacket
dhcp-vendorclass=apple-boot,AAPLBSDPC/i386
dhcp-option-force=net:apple-boot,43,08:04:81:00:00:67
dhcp-option-force=net:apple-boot,60,"AAPLBSDPC/i386"
dhcp-option-force=net:apple-boot,67,"bootnetmac.efi"

Restart dnsmasq to make new dhcp/tftp settings active!

/etc/init.d/dnsmasq restart

payloads

De eerste payload word een debian net installer voor de i386 architectuur, dit had overigens ook ubuntu kunnen zijn(zelfde opzet). Deze komt compleet in een bestand "netboot.tar.gz" met eigen bootloader/menu gebasseerd op syslinux wat makkelijk is aan te passen en dat gaan/moeten we ook doen. De eerste aanpassing is serial-console support toevoegen aan het syslinux bootmenu en kernel parameters aan de kernel van debian, vervolgens extra payloads toevoegen zoals freedos en uiteindelijk "nfs" gebasseerde payloads waaronder "freebsd 10 iso" en "ubuntu live desktop iso".

debian netinstall

mkdir -p /mnt/sda3/tftproot/
cd /mnt/sda3/tftproot
wget http://ftp.nl.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/netboot.tar.gz
tar -zxvf netboot.tar.gz #merk op symlinked bestanden!!!
chmod -R 777 ../tftproot  #fix permision/read problems

Als je nu je soekris 4826 via pxe laat booten dan zie je dat die de pxelinux.0 payload laad, echter zie je nog geen installatie menu en kun je nog niet verder! Op een pc/laptop pxe-client zie je wel op het vga scherm een menu met uitgebreiden mogelijkheden om debian te installeren. Het installatie menu van de syslinux bootloader werkt standaard voor pc/laptop vga console, door het syslinux configuratie bestand(en) aan te passen kun je ervoor zorgen dat het menu ook via de seriele console te zien is.

Seriele console support toevoegen aan syslinux bootloader (gebruikt in debian netinstall). Alhoewel er maar 1 config bestand hoeft te zijn "syslinux.cfg" die het menu beschrijft met mogelijke bootopties, komt de debian net install met talloze txt en submenu-tjes die het editen wat onoverzichtelijk maakt! Dit is pas een probleem als je meerdere OS's aan het menu wil toevoegen, of via de serial console boot-parameters wil editen(die zie je dan niet/goed).

/mnt/sda3/tftproot/debian-installer/i386/boot-screens/syslinux.cfg

CONSOLE 1           #0=serial only, 1=vga&serial
SERIAL 0 38400 0    #0=serialport com 1, 38400=speed, 0=8n1 software mode

/mnt/sda3/tftproot/debian-installer/i386/boot-screens/txt.cfg

#add the following to the debian kernel paramaters before "-- quiet"
console=ttyS0,38400n8

debian 8 amd64 netinstall uefi

De nieuwste testing debian 8 uitvoering ondersteund uefi pxe boot. Het "netboot.tar.gz" bestand bevat twee bootloaders! Namelijk syslinux voor (legacy)bios en grub2 voor uefi. Pak enkel de amd64 map uit in de /mnt/sda3/tftproot/debian-installer/ en maak symlinks in de map /mnt/sda3/tftproot/ naar bootnetx64.efi (debian-installer/amd64/bootnetx64) en grub (debian-installer/amd64/grub) om uefi boot mogelijk te maken. Om ook nog 64bit kernel installatie op pxe legacy bios mogelijk te maken, moet je het syslinux bootloader menu wijzigen van de huidige !!!i386!!! debian-installer en juiste links naar de 64bit kernel/init map opgeven.

http://ftp.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/netboot.tar.gz

boot local harddisk

Redirect to boot default local disk, so if the soekris/pc boots via pxe it may automatically refer back to boot from the internal local harddisk of that machine instead of pxe, use 81 instead of 80 for the second harddisk!

LABEL bootlocaldisk
  MENU DEFAULT
  MENU LABEL bootlocal disk
    localboot 0x80
    append SLX=0x80

freedos

Freedos support kan handig zijn voor het biosflashen of dergelijke. Wanneer voor het starten van freedos (via pxe memdiskk) een usb-stick met fat16/32 fs geplaatst is word de inhoud van deze stick na het booten van freedos bereikbaar als c:\ schijf! Dus enkel wat bios flash programma's op locale usb stick plaatsen met eenvoudige fat/16/32 fs en je kan aan de slag. Echter voordat freedos vanuit de pxe syslinux loader geladen kan worden moet aan de huidige debian gebasserde pxe syslinux menu een module "memdisk" toegevoegd worden!

mkdir /mnt/sda3/tftproot/freedos
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img -o /mnt/sda3/tftproot/freedos/fdboot.img
mkdir /mnt/sda3/syslinux
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.07.zip -o /mnt/sda3/syslinux/syslinux-4.07.zip
unzip /mnt/sda3/syslinux/syslinux-4.07.zip
cp /mnt/sda3/syslinux/syslinux-4.07/memdisk/memdisk  /mnt/sda3/tftproot/freedos/
LABEL bootlocaldisk
  MENU DEFAULT
  MENU LABEL bootlocal disk
    kernel freedos/memdisk
    append initrd=freedos/freedos.img

DHCP + TFTP + NFS

PXE boot functionaliteit kan/moet uitgebreid worden met het NFS protocol, om bijvoorbeeld linux desktop livecd's te booten via het netwerk of FREEBSD 9.2 of hogere installatie uit te voeren! Dit omdat niet altijd in een keer zo'n groot iso bestand in het ram geladen van de PXE-client pc geladen kan worden, of omdat betreffend OS zich zelf niet meer kan vinden als deze als iso in het ram geheugen is geladen en hij blijft zoeken naar een CDROM drive die niet bestaat voor zijn installatie bestanden (kernel module memdisk/mfs ontbreekt in dit geval)! NFS zelf bestaat weer uit twee onderdelen exports/portmap. Dat is ooit handig verzonnnen de ene service vraagt waar de ander draait meer niet eigenlijk.

Als payload OS's zullen we ubuntu 10.04.4 live desktop en FREEBSD 10 CDROM live/install disk nemen en zullen dit toevoegen aan het bestaande/eerdere debian netinstall menu. Nogmaals de iso's worden in dit geval geloopmount en voor freebsd echt uitgepakt. Om iso bestanden te kunnen mounten onder openwrt moeten er wat kernel modules geladen worden, de freebsd installatie bestanden moeten echt uitgepakt worden omdat er namelijk een paar bestanden/mappen gewijzigd/toegevoegd worden (dat kan niet aan geloopmounte read-only iso) voordat de PXE + NFS install functioneerd!

openwrt install iso / nfs packages

opkg update
opkg install kmod-lib-zlib #is09660 requirement
opkg install kmod-fs-isofs #iso9660 support dat de standaard voor data is op veel cd's/dvd's
opkg install kmod-loop #loopmount support van iso images!
opkg install nfs-kernel-server #nfs server support no client!
opkg install block-mount #enables easy/auto mounting

ubuntu live desktop iso

We kiezen een wat oudere ubuntu omdat deze het meest compatible is met oude hardware 256MB ram en i386 CPU's (zonder CMOV support pentium1/amd's). Maar je zou prima een van nieuwere ubuntu 12.04LTS of 14.04 daily amd64 iso's kunnen gebruiken!

prepare files ubuntu 10.04.4-i386

mkdir -p /mnt/sda3/cdroms
mkdir -p /mnt/sda3/exports/ubuntu10.04.4-i386
mkdir -p /mnt/sda3/tftproot/ubuntu10.04.4-i386ki
cd /mnt/sda3/cdroms
wget http://old-releases.ubuntu.com/releases/lucid/ubuntu-10.04.4-desktop-i386.iso
mount -t iso9660 -o loop ubuntu-10.04.4-desktop-i386.iso /mnt/sda3/exports/ubuntu10.04.4-i386
cp /mnt/sda3/exports/ubuntu10.04.4-i386/casper/vmlinuz /mnt/sda3/exports/ubuntu10.04.4-i386/casper/initrd.lz /mnt/sda3/tftproot/ubuntu10.04.4-i386ki

/mnt/sda3/tftproot/debian-installer/i386/boot-screens/menu.cfg #add bootmenu items

LABEL ubuntu-10.04.4-desktop-i386
  MENU LABEL ubuntu-10.04.4-desktop-i386
    KERNEL ubuntu10.04.4-i386ki/vmlinuz
    APPEND initrd=ubuntu10.04.4-i386ki/initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.45.1:/mnt/sda3/exports/ubuntu10.04.4-i386 file=/preseed/ubuntu.seed --

/etc/exports #add nfs mount location to exports

/mnt/sda3/exports/ubuntu10.04.4-i386 192.168.45.1/24(ro,no_root_squash,no_subtree_check,async)

openwrt (re)start service for nfs/export and dhcp to initiate nfs pxe server :-)

/etc/init.d/dnsmasq restart
/etc/init.d/portmap restart
/etc/init.d/nfsd restart

freebsd 10 i386 disc1 iso

Door wat bugs in de freebsd netinstall cdrom is deze helaas niet via pxe te starten(dns resolve kapot, bepaalde mappen niet beschikbaar) en moeten we de grotere install disc1 gebruiken (die dezelfde bugs heeft maar die de installatie bestanden zelf wel bevat, dus niet van netwerk/resolv afhankelijk). We moeten de content van de iso echt uitpakken naar een eigen folder, in die folder moeten een paar extra lege mappen worden aangemaakt en we moeten een paar config bestanden van de cdrom editen zodat we serial-console installatie kunnen afdwingen. Gelukkig hoeven we geen binary te patchen of bestanden toe tevoegen....

prepare files FreeBSD 10 i386 disc1 iso

mkdir -p /mnt/sda3/exports/freebsd-temp
mkdir -p /mnt/sda3/exports/freebsd10-i386-disc1
mkdir -p /mnt/sda3/tftproot/freebsd10-i386-ki
cd /mnt/sda3/cdroms
wget http://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/10.0/FreeBSD-10.0-RELEASE-i386-disc1.iso
mount -t iso9660 -o loop FreeBSD-10.0-RELEASE-i386-disc1.iso /mnt/sda3/exports/freebsd-temp

cd /mnt/sda3/exports/freebsd-temp
cp boot/pxeboot /mnt/sda3/tftproot/freebsd10-i386-ki
cp -a * /mnt/sda3/exports/freebsd10-i386-disc1
cp -a .cshrc /mnt/sda3/exports/freebsd10-i386-disc1
cp -a .profile /mnt/sda3/exports/freebsd10-i386-disc1
cp -a .rr_moved /mnt/sda3/exports/freebsd10-i386-disc1

cd /mnt/sda3/exports/freebsd10-i386-disc1
mkdir jails
mkdir -p conf/base/jails
mkdir conf/default
chmod -R 777 conf
chmod -R 777 jails

etc/fstab #comment FREEBSD_INSTALL mount otherwise installer hangs

#/dev/iso9660/FREEBSD_INSTALL / cd9660 ro 0 0

etc/rc.conf #add following line, otherwise installer hangs

root_rw_mount="NO"

boot/loader.conf #additional parameters to force serial console installer and dma compatible settings for old hardware!

console="comconsole,vidconsole"
comconsole_speed="38400"
hw.ata.ata_dma=0

/mnt/sda3/tftproot/debian-installer/i386/boot-screens/menu.cfg #add boot-menu items

LABEL freebsd10-i386nfspxeboot
  MENU LABEL freebsd10 i386 pxeboot nfs
    pxe freebsd10-i386-ki/pxeboot

LABEL freebsd8.4-i386mfsiso
  MENU LABEL freebsd8.4 i386 mfs memdisk iso
      KERNEL memdisk
      APPEND initrd=freebsdx/FreeBSD-8.4-RELEASE-i386-bootonly.iso iso raw

## 12.09/14.07 add. example code # /etc/config/dhcp

config boot linux
        ...

        ...
        list   dhcp_option      'option:root-path,192.168.45.1:/mnt/sda3/exports/freebsd10-i386-disc1'

Let Op: Openwrt backfire 10.03.1 kent de parameter "dhcp_option" niet daardoor kan de bovenstaande nfs list dhcp_option root-patch specificatie niet in '/etc/config/dhcp' maar moet direct in '/etc/dnsmasq.conf' op de volgende wijze!

## 10.03.1 add. example code # /etc/dnsmasq.conf

dhcp-option=17,192.168.45.1:/mnt/sda3/exports/freebsd10-i386-disc1

/etc/exports #configure nfs mounts

/mnt/sda3/exports/freebsd10-i386-disc1 192.168.45.1/24(ro,sync,no_root_squash,no_subtree_check)

openwrt (re)start service for nfs/export and dhcp to initiate nfs pxe server :-)

/etc/init.d/dnsmasq restart
/etc/init.d/portmap restart
/etc/init.d/nfsd restart

Als het goed is werkt nu de pxe server met ubuntu en freebsd gebasseerde nfs sessies! Het permanent maken van deze setup (overleeft reboot) gaat door de iso bestanden vanaf boot te mounten en de benodigde nfs services te betrekken bij het opstarten!

FSTAB mount disk

Om de pxe boot bestanden ook na een reboot van de router beschikbaar te houden moet je handmatig mounts specificeren (koppelen) en de fstab service meenemen tijdens het booten. Dit doe je op de volgende wijze: Er word vanuit gegaan dat de bestanden zich op een (externe)disk bevinden op de 3e partitie(sda3) met een ext2 filesystem.

# add. example code # /etc/config/fstab

config mount
	option target 	/mnt/sda3
	option device	/dev/sda3
        option fstype   ext2 #vfat,msdos, etc
        option options  ro
        option enabled  1

config mount
	option target 	/mnt/sda3/exports/ubuntu10.04.4-i386
	option device	/mnt/sda3/cdroms/ubuntu-10.04.4-desktop-i386.iso
        option fstype   iso9660
        option options  loop,ro
        option enabled  1
        option enabled_fsck 0

Betrek nfsd, portmap en mogelijk fstab in geval van blockmount bij het opstarten:

/etc/init.d/portmap enable
/etc/init.d/nfsd enable
/etc/init.d/fstab enable

Nu zou de pxe functionaliteit een reboot van de router moeten overleven!

combios mod (option rom)

Na wat graven met een hexeditor in het oorspronkele soekris firmware update bestand en in de low level eprom uitlezing van de soekris combios kwam ik erachter dat de soekris combios relatief klein is voor de eeprom PLCC32 SST49xxxx SST39xxxx die daarvoor gereserveerd is, namelijk 40-72kb in een 512/256kb rom!!! Kortom er is ruimte zat om met toegevoegde pci option rom payloads te experimenteren die de functionaliteit van de bestaande combios uitbreiden zoals ipxe support of usbboot!

De focus ligt op pci option roms, die je in het geval van ongecomprimeerde combios firmware bestand gemakkelijk kan herkennen aan de start bytecode 55aa dat toevallig ook nog eens aan het begin van dat firmware update bestand staat, zie hexeditor. Net als andere pci option roms voor bijvoorbeeld sata/scsi-raid/netwerk controllers is deze gestandardiseerd en gestructureerd en zou je vanuit theorie vanalles op de plek van de bestaande pxe(preboot execultion environment) pci option kunnen plaatsen/uitvoeren. Met die insteek is er al een klein success geboekt, maar er zijn nog wel bugjes. Daarvoor moet je toch wat dieper graven en uitzoeken hoe BIOS met int13 18/19 hooks PNP cbv/BEV hooks/routines het boot process kan kapen/ondersteunen. De vraag blijft of de beperkte combios uberhaupt wel zo goed uitgevoerd is als reguliere pcbios om met deze bootstrap interacties/routines rekening te houden, of moeten wij de option rom aanpassen om daarmee om te gaan?

Bios flashen is zeer risicovol vooral als je deze ook nog aanpast/mod een dood/bricked board kan het resultaat zijn. Het flashen van combios via de seriele port met originele firmware is al risicovol maar er zijn veiligheid checks ingebouwd (checksum), echter gelden die veiligheden alleen voor het oorspronkelijke stukje combios binnen het firmware update bestand, maar niet voor de pci optionroms die vooraan in dat bestand staan. Deze kun je dus voorzichtig vervangen en dat is ook de aanleiding om de bestaande combios pxe boot module uit te breiden naar een ipxe of plop usb rom.

Naast serieel flashen via de combios omgeving zelf (gebruikelijke methode) kan de soekris 48xx serie onder freebsd/debian vanuit het programma flashrom gelezen en beschreven worden, de 45xx serie kan alleen uitgelezen worden. Het type firmware bestand dat je via de seriele methode flashed is anders qua layout/grote dan dat je direct met flashrom uit de 512KB grote eeprom kan lezen, deze mogen dus nooit verwisseld worden!

Inmiddels kan er geheel veilig zonder/met weinig risisco geexperimenteerd worden als we de combios shell memdump optie (die normaal gebruikt word voor combios updates) te gebruiken. Als er voor een bios upgrade via de seriele port eerst een image naar het werk geheugen van de soekris word gecopieerd kan deze met de flashupdate optie geladen worden, echter wij laden geen firmware update maar een test option rom module en forceren/executen direct het ram geheugen waar die staat met de "run" functie om vanaf dit geheugen adres bijvoorbeeld d4000:0000 uit te voeren. Het gedrag is niet 1 op 1 met een geintregeerde pci option rom te vergelijken, wel dat deze ook eerst vanaf de pci-kaart naar het ram geheugen geladen wordt voordat die word uitgevoerd, echter de afwijking zit in de normale bios bootstrap routine/interactie, waar vaak eerst een rom tijdelijk geprobed/geinitialiseerd word en later pas doorgeeft aan de bios of die wel bootbaar is of mag worden overgeslagen. Denk aan een scsi/sata bios die op zijn beurt weer scsi disken probeert te zoeken die mogelijk interressant zijn om van te booten, zo niet dan mag de bios deze overslaan en naar het volgende punt boot punt.

Ideeen/aanpak: *Checksums implementeren nu ik eindelijk weet hoe ;-) en PCIR / PNP code in de header controleren. *Eerst zorgen dat een vervangende module niet de normale bootcyclus kaapt of zelf blijft hangen tijdens de echte boot(inth19). *Extra rom naast de bestaande pxe rom plaatsen op een juiste offset van in blocks van X*2048 bytes, iets met jumps? *Meerdere modules naast de bestaande heeft de voorkeur maar hoe weet ik nog niet.

Links / References

errors

luci https backfire werkt niet uhttp restart illegal instruction!

random: Not enough entropy pool available for secure operations wpa heeft te weinig variatie om een beveiligde wifi op te zetten zie eduroam project voor fix /dev/randum /dev/urandom

ioctl[PRISM2_IOCTL_HOSTAPD]: No in wpad[8048000+d4000]such device toch hostapd ipv wpad en dan maar een losse wpasupplicant erbij voor extra in backfire10.03.1?

ipcalc is niet wat ik dacht dat het was

unkown symbol errors in 12.09 en krijg in 10.03.1 geen wpa2 meer draaiend? kmod-mac80211 nodig pcmcia/conf.opts fastirq etc

met wpa1/2 lijken de radio interfaces niet meer on the fly te herconfigureren aan/uit/aan zetten enkele een reboot zorgt dat accesspoint met wpa weer online komt...

bridge breaks vlan function! https://forum.openwrt.org/viewtopic.php?id=34794

Trac Info

Trac is a minimalistic approach to web-based management of software projects. Its goal is to simplify effective tracking and handling of software issues, enhancements and overall progress.

All aspects of Trac have been designed with the single goal to help developers write great software while staying out of the way and imposing as little as possible on a team's established process and culture.

As all Wiki pages, this page is editable, this means that you can modify the contents of this page simply by using your web-browser. Simply click on the "Edit this page" link at the bottom of the page. WikiFormatting will give you a detailed description of available Wiki formatting commands.

"trac-admin yourenvdir initenv" created a new Trac environment, containing a default set of wiki pages and some sample data. This newly created environment also contains documentation to help you get started with your project.

You can use trac-admin to configure Trac to better fit your project, especially in regard to components, versions and milestones.

TracGuide is a good place to start.

Enjoy!
The Trac Team

Starting Points

For a complete list of local wiki pages, see TitleIndex.

Last modified 3 years ago Last modified on Jun 11, 2015, 2:08:01 PM