wiki:WikiStart

Version 33 (modified by walter, 10 years ago) ( diff )

pxe edit

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/66Mbit 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

Het doel van dit project is voor de Soekris-boarden en bijbehorende hardware, start klare images / uitgangssituaties te maken/beschrijven zodat snel, makkelijk en uitgebreid geexperimenteerd kan worden juist door linux nieuwkomers en enthousiastelingen. Met de openwrt packetmanager is met bijna hetzelfde gemak als op een linux desktop een uitgebreide router/server/node te bouwen door (bijna ;-) iedereen! Met de grote hoeveelheid beschikbare hardware configuraties is de wens om een onafhankelijk test netwerk te bouwen zodat met OLSR / MESH etc geexperimenteerd kan worden.

De opzet van deze pagina is eerst hard en software inregelen om openwrt uberhaupt ;-) operatief te krijgen op een soekris board en functionerend als een eenvoudige huis tuin en keuken router/accesspoint. Wanneer duidelijk is hoe je het apparaat kan inregelen webinterface/ssh een naam kan geven tijd inregelen en interfaces ingesteld kunnen worden bedraad en draadloos, binnen en buiten wereld WAN-LAN concept begrijpen, porten forwarden packages installeren gaan we kijken hoe we een zelfstandige WirelessLeiden node kunnen realiseren met captive portal en proxy. Vervolgens meerdere van deze los staande soekris Wireless Leiden routers onderling met elkaar kunnen laten communiceren zoals nodes op een WirelessLeiden netwerk kortom het concept routing. Dit uitbouwen zodat je de uplink/gateway verbindingen van het ene soekris board kan delen met een andere soekris board die zelf niet direct uplink aan zijn wan interface heeft. Nadat er inzicht in static routing is wil ik dynamisch routing met behulp van een routing protocol uitzoeken, dns implementatie en uiteindelijk ipv6.

OpenWRT op Soekris 45xx/48xx boards

software

Zowel kant en klare x86 images van openwrt uit de seriebackfire 10.03.1 als attitude adjustment 12.09 functioneren op de soekris 4501, 4521, 4801 en 4826. De gewenste type images zijn "combined-squashfs" images en "combined-extN" images, hierin "combined" zit namelijk zowel de boot partitie met kernel en root partitie. Op sommige embedded systemen is het mogelijk direct de kernel en het rootfs te uploaden omdat er dan een bootloader in het systeem zelf zit die deze kan opstarten. De soekris boarden gedragen zich netals x86 systemen die gewoon via een MBR bootstrap op een ide disk een bootsector willen laden die weer naar de bootloader verwijst "grub" en dat laatste de kernel. Het eerste type "squashfs" zal grotendeels in het ram de wijzigingen doorvoeren en alleen enkele wijzigingen gecomprimeerd naar de disk terug schrijven via JFFS2, voordeel hiervan is dat deze versie de geheugenkaart spaard "wear level protection" en tevens een failsafe "factory reset" mogelijk maakt. Prima optie voor experimenteren! 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 tevens niet mogelijk.

Houd er overigens wel rekening mee dat de standaard openwrt images alleen booten op een Soekris board als deze de juiste comBIOS optie ConMute=Enabled aan heeft of direct een actieve serial console verbinding met een draaiende PC heeft tijdens het booten van openwrt op de soekris(sic), onafhankelijk zonder seriele PC connectie is de kans groot dat hij hangt tijdens de boot cyclus op de grub bootloader en wacht op bevestiging om door te gaan met booten... Dit terwijl je verwacht dat het board zonder inmenging en zelfstandig kan opstarten. Echter wanneer op de eerste partitie van de CF-kaart/image uit de bootloader config file "/boot/grub/menu.cfg" de optie "console" verwijdert word, boot de Soekris probleemloos onafhankelijk zonder PC met serial console en hoef je niet direct comBIOS in! Voor de CF gebasseerde systemen Soekris 4501/4521/4801 is die grub optie op de CF-kaart zo te veranderen en kun je in enkele minuten al aan de slag. Een andere definitieve oplossing voor systemen zonder CF kaart zoals de Soekris 4826 alsnog systemen met CF-kaart is via seriele console de comBIOS optie ConMute op Enabled zetten, echter voor de CF-kaart-loze systemen zoals de 4826 moet je zowieso via serial comBIOS in om deze met PXE boot op te starten en vanuit een live sessie een openwrt-image naar het onboard flashgeheugen te schrijven, maar dan heb je ook wat ;-)

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 serial console de enige manier om de bootcyclus met BIOS te beinvloeden op de soekris, vooral handig voor uitgebreid recoveren van systemen zonder CF-Kaart. Later kan via een netwerk console telnet/ssh wanneer openwrt zelf al actief is deze verder ingeregeld worden waardoor de seriele verbinding niet nodig is. De kant en klare x86 images van openwrt hebben standaard hun serial console werkend op 38400, zowel in de bootloader modus (grub) als de kernelbootlog en uiteindelijke systeem console. Dit i.t.t. tot de standaard Soekris comBIOS serial speed die vaak 19200 of zelfs 9600 is. Om tijdens de hele bootcyclus/bootstrap vanaf de soekris comBIOS, bootloader grub, kernel/boot tot aan de console van openwrt zelf een werkend beeld en keyboard aansturing te hebben is het van belang dat al deze fases op dezelfde serial settings staan, bij een pc wil je immers ook niet dat in bepaalde fases van het booten het beeld verdwijnt of de keyboard input niet werkt. In het geval van de soekris met verkeerde instellingen verdwijnt het beeld meestal niet maar word onleesbaar en is verdere keyboard interactie in een bepaalde fase uitgesloten.

Om serial in te loggen op de soekris zullen we eerst "minicom" installeren en configureren op de client PC waarmee we de soekris inregelen. Dit zal waarschijnlijk meerdere keren moeten om iedere afwijkende fase van het booten tot het os te kunnen bereiken. Handig is om eenmalig de serial snelheid in de comBIOS van de soekris gelijk te zetten naar die van de bootloader/bootconsole en definitieve terminal. *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, ##nullmodem cable port probably is /dev/ttyS0 
#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 en word benaderd via een serial interface. Hierin kun je verschillende systeem en boot gerelateerde parameters vastzetten zoals de serial port snelheid "ConSpeed" en fixen 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! 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 speed

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

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

> boot F0 #will boot from network via PXE

> 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 608 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!

tftp / pxe boot

Wanneer je een soekris hebt zonder CF external storage zoals de 4826 met 64MB onboard flash, kun je wellicht een image op de soekris zetten als deze in zijn eigen voormalige OS is gestart en deze zich zelf domweg laat overschrijven van binnenuit. Je moet dan wel de enige kennis van FREEBSD hebben en een root wachtwoord om het kastje in te komen.

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 in gebruik 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.

Wel zou de image dan met een hex editor moeten zijn bewerkt om de optie "console" uit het boot bestand te verwijderen, of de soekris zou de optie ConMute op enabled moeten hebben staan in comBIOS. Beide twijfelachtige procedures leiden waarschijnlijk tot een niet started systeem dus de laatste en beste permanente optie is de soekris via comBIOS inregelen en laten netwerkbooten in tftp / PXE in een livesessie van het OS en dan via het netwerk een image dd'en en vervolgens herstarten van de interne flash i.p.v. pxe.

Voor het recoveren / installeren van openwrt op soekris boarden zonder CF-kaart moet naast een werkende serial console verbinding met comBIOS, een tftp / pxe / bootpserver worden opgezet. Via serial interface tussen PC en Soekris kan deze vanuit comBIOS geinstrueerd worden om met PXE op te starten. Wanneer de toetsen CTRL + P tijdens de comBIOS bootstrap worden ingetoetst kun je met het commando "boot F0" de soekris naar een PXE boot forceren.

De tftp server die ik in debian heb opgezet heeft de volgende paketten en instellingen nodig: "isc-dhcp-server + tftp-hpa".

grub bootloader

De openwrt images gebruiken "grub" als bootloader wel de oude legacy versie, ondanks dat je het weinig of wellicht nooit zal zien in het gebruik van openwrt is het gemakkelijk om bootopties te wijzigen of toe tevoegen bijvoorbeeld 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+ 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 je kan daarna eenvoudig de soekris op brak ram geheugen laten testen indien gewenst.

title memtest86+
root (hd0,0)
kernel /boot/memtest86+.bin console=ttyS0,38400n8
boot

wifi senao cards

Naast bedrade interfaces kunnen configureren is natuurlijk de draadloze interface opzetten ook een must. Door de generieke mini-pci aansluiting op de soekris en de uitgebreide ondersteuning van openwrt voor diverse wireless chipsets zijn er eindeloos veel wifi mogelijkheden. Oud doch bruikbaar zijn de senao wifi b only kaartjes van W.L., zelfs met WPA2 CCMP in AP mode, tenminste als je weet hoe. 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".

Naast dat er legio aan firmware versies / combinaties zijn voor deze kaarten is van eerste belang om te weten dat de pcmcia versie 16bit is en daarom het pakket "pcmciautils" nodig heeft om op moderene distributies probleemloos herkent te worden. 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. Verwarrend is wel de naam "hostap" aangezien dit naast driver ook de service is die op vele routers het opzetten van een AP + WPA aanstuurt. Als derde zullen de meeste van deze antieke kaartjes uit de kast van W.L. wel een firmware update nodig hebben. Minstens station firmware 1.5.6/1.6.3 om uberhaupt goed aangestuurd te worden door hostap 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 in AP modus / master / infrastructure gestart en zal daarom niet met andere AP's kunnen connecten totdat je de modus van de kaart omzet naar "iwconfig wlan0 mode managed".

De benodigde firmware is beschikbaar in twee vormen namelijk een AP/master en client/station firmware. Beide bestanden zijn vereist om tegelijk en betrouwbaar te kunnen flashen. De AP firmware is 1.1.1 de STA firmware is 1.8.2. details om te flashen via windows xp volgen nog, een oude linksys driver en het programma winflash 0.7 is voldoende. Inmiddels is gebleken dat deze kaartjes met de "hostap-pci/hostap-cs" niet alleen instaat zijn WPA TKIP in station/client mode maar zelfs WPA2 CCMP in AP/master/infrastructure modus.

  • pcmciautils
  • kmod-pcmcia-core
  • kmod-pcmcia-yenta
  • kmod-hostap-cs
  • kmod-hostap-pci

Wanneer in Openwrt na installatie de wifi kaarten niet direct in de webinterface van luci herkent worden, moet je ze zelf even in het volgende configuratie bestand zetten en zorgen dat de macadressen van de kaarten 0/1 overeen komen met die van de config. Zie ifconfig voor de macadressen voor juiste kaart.

Tevens als het goed is zou het commando "wifi detect > /etc/config/wireless" (pas wanneer alle drivers pcmcia hostap-etc) aanwezig zijn, een default wireless bestand kunnen aanmaken om de interfaces op te configureren. Zo niet neem het volgende voorbeeld voor deze oude wifi kaarten en pas de mac adressen aan

# example code # /etc/config/wireless

config wifi-device 'radio0'
        option type 'prism2'
        option macaddr '00:02:6F:xx:xx:xx'
        option channel '6'
        option diversity '0'

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

config wifi-iface
        option device 'radio0'
        option mode 'ap'
        option encryption 'none'
        option ssid 'http://wirelessleiden.nl/cp'
        option network 'lan1'

config wifi-iface
        option device 'radio1'
        option mode 'ap'
        option encryption 'none'
        option ssid 'http://wirelessleiden.nl/splash'
        option network 'lan2'

wifi atheros upgrade/patch

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 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 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.

Direct aan de slag!

manual / handleiding

Openwrt heeft een unieke en uiterst volledig consistente doch gedecentraliseerde versnipperde handleiding, sorry kon het niet laten ;-). Her en der zul je het een en ander bij elkaar moeten googlen via wiki en forum pagina's op hun eigen website en voorbeelden van andermans blogs en creaties zoals deze hier. Naast het laden van een openwrt image, is net dat ene kleine beetje inzicht nodig om het vaak werkend op een bepaald apparaat waar het niet voor ontworpen is werkend te krijgen. Dit kan vaak wel op 3 verschillende manieren. Via de webinterface (als je daar al bij kan) via de cli met programmeer taal uci en direct in de cli met bestandjes editen.

soekris 4501

Werkt met standaard image ook prima, net als de 4521 tevens net zo traag ;-).

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 geld 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 afwezig, ondanks dat de soekris standaard over twee ethernet adapters beschikt eth0(poe+lan) eth1(). Daarom moet er eerst een "wan" interface worden toegevoegd en "eth0" bij de lan vervangen worden door "eth1" en "eth0" bij de "wan" plaatsen. Vervolgens nog firewall rules toevoegen zodat je via diezelfde wan interface kan managen met ssh/http. 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
wget http://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/openwrt-x86-generic-combined-squashfs.img

#warning dd will overwrite anything!!!
#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 following 3 steps

#1#mount the first partition on the CF-CARD
sudo mkdir /mnt/booooot
sudo mount /dev/sdX1 /mnt/booooot
#2#remove the word "console" from the file /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/boooot

Plaats de CF-CARD in de soekris, en sluit een losse lan/poe kabel aan op de eth0 port van de soekris (verst verwijderd vanaf de pcmcia-sloten) direct op je PC aan. Je PC zal via dhcp automatisch een ip van de soekris krijgen, de port is namelijk ingesteld als lokaal LAN en de tweede ethernet port werkt nog niet!

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

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

# 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

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 eenkeer 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 pcmciautils pciutils kmod-hostap-cs kmod-pcmcia-core kmod-pcmcia-yenta ipcalc iperf nmap tcpdump nano luci-app-olsr nodogsplash tinyproxy openvpn wpad

De PCMCIA sloten waar de wifi adapters opzitten moeten tijdens de boot worden aangezet. Dat kan door in /etc/init.d/pcmcia* enable te doen. Echter het S20 netwerk/wifi start al voordat de S42/41 PCMCIA sloten tot leven zijn gekomen. Een snelle Q&D fix is S20network in /etc/rc.d/ te verplaatsen naar S43network.

#enable pcmcia services on boot
/etc/init.d/pcmci* enable

#quick and dirty delay network initialization after pcmcia
mv /etc/rc.d/S20network /etc/rc.d/S43network

Stabiliteit PCMCIA bus hangt af van mogelijke bootparameters, irq bezetting en memoryranges. Voor 10.0.3.1 zorgt de boot parameter (TODO wel nog even checken of /etc/pcmcia/conf.opt speciale settings in 12.09 nodig heeft, irqpoll is no wifi). Bij de 10.03.1 kan "irqpoll" er juist voor zorgen dat de pcmcia bus het systeem niet doet freezen. Dit freezen houd in dat wanneer de pcmcia kaart verwijdert word het systeem direct weer reageert en niet is vastgelopen, dit komt uit eigen ervaring ook voor op laptops en kan met boot parameter "irqpoll" verholpen worden.

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	eth1
	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   eth0
        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.

Captive Portal

Eenvoudig in te stellen voor een lokale zelfstandige node door de /etc/nodogsplash/nodogsplash.conf te bewerken en een html splash pagina toe tevoegen in /etc/nodogsplash/htdocs/splash.html!

GatewayInterface br-lan#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 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

Proxy

Eenvoudig in te stellen door /etc/config/tinyproxy te bewerken.

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'

Routing opzet

Het aansluiten/inloggen van een laptop/tablet/desktop op de wifi van je adsl modemrouter van de internet provider leverd bij de meeste direct een werkende internet verbinding op dit werkt als volgt. Via de client apparatuur zoals een tablet kies je een SSID/hotspotnaam en vult mogelijk een wachtwoord in, vervolgens zal de wirelessnetwerk kaart via een dhcp verzoek (meestal een lokaal private) ip adress opvragen aan de dhcp server op de modem router zelf. Deze antwoord en geeft naast een private lokaal ip adres(iets in de trend 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 internet zijde van de adslmodemrouter bij de i.s.p. 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 adslmodem router van je buren bijvoorbeeld ook dezelfde interne private ip als jij gebruikt. De router aan de isp zijde 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 kan 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 kan benaderen en niet direct de apparaten er achter. Je kan 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 LAN BOOT

DHCP + TFTP ==

Met behulp van een PXE server kan een systeem zoals de soekris4826 met onboard vast gesoldeerd flashopslag, i.t.t een verwisselbare CF-card toch van een OS worden voorzien, door deze als PXE client te starten! De PXE-client laat een payload (bootloader) via het netwerk van de PXE-server (tftp-protocol met behulp van dhcp) de bootloader laad op zijn beurt weer het OS kernel/init tevens van de PXE-server, netals een normale bootstrap van CDROM/HARDDISK/USB zijn uiteindelijk alle onderdelen aanwezig/geladen om een OS/installatie te starten. Door de soekris (dat monitor/keyboard ontbreekt) met serial console te configureren om via PXE client te booten i.p.v. de interne flash opslag kun je een installatie/imaging procedure uitvoeren, zie combios paragraaf voor instructies. Naast de soekris kunnen veel moderene computers/laptops ook via lan booten doormiddel van PXE, zelfs wat oudere computers/laptops die niet via USB-sticky/CDROM booten kunnen daarentegen vaak wel via PXE booten! De naamgeving van deze feature in pc/laptops bios/(u)efi omgevingen heet vaak iets in de trend van "lan boot rom" of "onboard option rom"!

Het opzetten van de PXE-server kost wat meer inspanning dan het instellen van de PXE-client. De minimale software onderdelen die nodig zijn is een dhcp-server, tftp-server en payload/installatie bestanden waaronder bootloader(config/boot paramters),kernel(+init) voor het gewenste OS dat je wil installeren. Dit laatste word vaak in kant en klare complete pakketten aangeboden zoals een debian/ubuntu netinstall.

Openwrt gebruikt out of the box als dhcp-server het pakket "dnsmasq" dat ook direct tftp-server functionaliteit kan bieden, hierdoor hoeft maar een 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! Eerst maken we een map/bestands structuur aan met gewenste payload in dit geval debian wheezy 7.4 OS installatie.

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

/etc/config/dhcp #add tftp functionality

        option enable_tftp      1
        option tftp_root        /mnt/sda3/tftproot

/etc/config/dhcp #add dhcp additional/extended lease info

config boot linux
        option filename         pxelinux.0   #name of bootloader/payload file
        option serveraddress    10.0.0.1     #address of tftpserver, in this case on the same device/router
        option servername       pxeboot      #just a name, probably not needed
        list   dhcp_option      'option:root-path,10.0.0.1:/mnt/sda3/exports/freebsd10e' #NFS only, needed for dumb OS FREEBSD which cannot find the NFS server
/etc/init.d/dnsmasq restart

Boot Menu

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, 0=8n1 software mode
LABEL bootlocaldisk
  MENU DEFAULT
  MENU LABEL bootlocal disk
    localboot 0x80
    append SLX=0x80

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

Als OS's zullen we ubuntu 10.0.4.4 en 12.04.4 live desktop en FREEBSD 10 CDROM live/install disk nemen en zullen dit toevoegen aan het bestaande/eerdere debian install menu. Nogmaals de iso's worden in dit geval wel uitgepakt/loopmount, omdat via nfs eerder besproken bezwaren hierdoor weggenomen worden. Om iso bestanden te kunnen mounten onder openwrt moeten er wat kernel modules geladen worden, de freebsd installatie bestanden moeten echt gekopieerd worden omdat er namelijk een paar bestanden/mappen gewijzigd/toegevoegd worden voordat de PXE + NFS install functioneerd!

openwrt install iso / nfs packages

opkg update
opkg install kmod-fs-iso9660
opkg install kmod-loop
opkg install kmod-nfs-server

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=10.0.0.1:/mnt/sda3/exports/ubuntu10.04.4-i386 file=/preseed/ubuntu.seed --

    LABEL ubuntu-12.04.1-desktop-i386
  MENU LABEL ubuntu-12.04.1-desktop-i386 PAE,CMOV
    KERNEL ubuntu12041-32/vmlinuz
      APPEND initrd=ubuntu12041-32/initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=10.0.0.1:/mnt/sda3/exports/ubuntu12041-32 --

LABEL ubuntu-14.04.p-desktop-amd64
  MENU LABEL ubuntu-14.04.p-desktop-amd64 pre-release feb6tf2014
    KERNEL ubuntu1404p-64/vmlinuz.efi
      APPEND initrd=ubuntu1404p-64/initrd.lz  root=/dev/nfs boot=casper netboot=nfs nfsroot=10.0.0.1:/mnt/sda3/exports/ubuntu1404p-64 --

FreeBSD 9.2/10

prepare files FreeBSD 10 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

mkdir jails
mkdir -p conf/base/jails
mkdir conf/default
chmod -R 777 conf
chmod -R 777 jails

etc/fstab #comment FREEBSD_INSTALL mount!

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

etc/rc.conf #add following line

root_rw_mount="NO"
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

/etc/config/dhcp #additional dhcp parameter to supply nfs address

config boot linux
        ...

        ...
        list   dhcp_option      'option:root-path,10.0.0.1:/mnt/sda3/exports/freebsd10-i386' #NFS only, needed for dumb OS FREEBSD which cannot find the NFS server

/etc/exports

/mnt/sda3/exports/ubuntu10.04.4-i386 10.0.0.1/24(ro,no_root_squash,no_subtree_check,async)
/mnt/sda3/exports/ubuntu12041-32 10.0.0.1/24(ro,no_root_squash,no_subtree_check,async)
/mnt/sda3/exports/ubuntu1404p-64 10.0.0.1/24(ro,no_root_squash,no_subtree_check,async)
/mnt/sda3/exports/freebsd10-i386-disc1 10.0.0.1/24(ro,sync,no_root_squash,no_subtree_check)

Links / References

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.

Note: See TracWiki for help on using the wiki.