home

Soekris po cesku

Vladimir Kotal <vlada--at--devnull--dot--cz>

Vyber, platba, prevoz

V kvetnu 2002 jsme se se spolubydlicim rozhodli, ze nahradime stavajici hucici router/firewall, mensim boxem, ktery je absolutne tichy a plni stejne funkce. Prvni potencialni kandidat byl PIX od Cisco systems, pak jsme zjistili, ze nesplnuje nase pozadavky. (ubohy packet filter, slaba podpora IPsec, absence IPv6, mala konfigurovatelnost, vysoka cena)

Embedded box od firmy Soekris pozadavky splnoval - absolutne tiche zarizeni podporujici vetsinu open-source operacnich systemu. Behem leta se podarilo sehnat financni prostredky, ale museli jsme pockat nez budou boxy vyrobeny. Soekris je mala firma (temer one-man show), trvalo asi mesic nez byl box z nami pozadovane serie (Net 4511) vyroben. Platbu jsem provedl prevodem (wire-transfer), doprava byla zajistena pres Airborne, s kterym jsem mel celkem dobre zkusenosti.

Jakmile box dorazil do Prahy, ozval si mi clovek z Airborne, kteremu jsem nafaxoval obcanku atd. a on zaridil procleni. Clo je u pocitacu a jejich komponent 0%, takze se plati "pouze" DPH. Potize nastaly, kdyz Airborne predaly balik sluzbe PPL, ktera ho mela dorucit na moji adresu mimo Prahu. PPL se mi jevila jako naprosto neprofesionalni jak co se jednani, tak sluzeb tyce. Nakonec se diky intervenci cloveka z Airborne podarilo balik na druhy pokus dorucit.

Seznameni s hardwarem, zacatek potizi:

Mezitim jsem objednal z fotaky.cz Compact-Flash reader/writer pro USB port a 64M CF kartu. Overil jsem, ze funguji na Mac OS X, na kartu slo bez problemu nahrat mp3 soubory a prehravat primo z ni.

Soekris je defacto pocitac tridy 486, postaveny na AMD procesoru ELAN SC520 100MHz. Vykonove jej lze srovnat s obycejnym Pentiem na teze frekvenci. Net 4511 je typ, ktery ma dva sitove interfacy, jeden slot pro Cardbus kartu, 32M RAM a mini PCI slot.

Pri prvnim zapojeni jsem zjistil, ze i po delsi dobe nezhasne cervena dioda, coz indikuje problem. Zbyvalo pockat na krizeny seriovy kabel.

Nullmodem alias serial crossover kabel:

Soekris boxy disponuji pouze terminalovym vystupem na seriovou konzoli. Diky mlzeni z ruznych mist jsem mel jenom vagni predstavu o kabely, ktery vlastne shanim. Nakonec jsem vyzkousel konzolovy kabel (ten modry s sedymi konektory RJ45<->9pin serial na konci) od Cisca, ktery nefungoval diky vadnemu seriovemu portu v druhem pocitaci. Koupil jsem tedy hybridni laplink serial/paralel kabel od mironet.cz. Z lokalni pobocky jsem doloval USB radic asi 2 tydny nez jsem to vzdal, i tento kabel jsem si musel v prazske pobocce trosku 'vyprudit'. Nakonec tedy vsechno je totez (a koupeny kabel jsem mohl zahodit).

Protoze pouzivam vetsinou BSD systemy nebo systemy na nich zalozene, jsem zvykly mit po ruce misto minicomu jednoduchou utilitku tip(1), ktery se vyskytuje v defaultni instalaci na vsech BSD. Soekris boxy jsou default nastaveny na pouziti rychlosti 19200 baudu, tip tedy pustime nejak takto: tip -19200 tty00 podle toho do jakeho konektoru mame seriovy kabel zapojeny a podle zaznamu v /etc/remote. Z tipu lze vylezt tak, ze stisknete ~^D (vlnovka a control-D).

V dobe kdy jsem mel funkcni kabel a bylo videt ze Soekris bootuje, jeste byla celkem dlouha ceste k zprovozneni celeho routeru.

Potize s flashkou:

Pote co jsem sehnal USB radic, zkusil jsem do nej zapojit CF reader s kartou uvnitr (zajimave, ze se casto udava pouze reader a mysli se reader/writer), s nasledujicim vysledkem:

root on wd0a
rootdev=0x0 rrootdev=0x300 rawdev=0x302
umass0 at uhub0 port 2 configuration 1 interface 0
umass0: USB ReaderSSFDC-CF 0.74 USB ReaderSSFDC-CF 0.74, rev 1.10/0.74, addr 2
umass0: using SCSI over BBB-P
scsibus1 at umass0: 2 targets
sd1 at scsibus1 targ 1 lun 0: <, , > SCSI1 0/direct removable
sd1: mode sense (4) returned nonsense; using fictitious geometry
sd1(umass0:1:0): Check Condition on opcode 0x25
    SENSE KEY: Not Ready
sd1(umass0:1:0): could not get size
sd1: 0MB, 0 cyl, 64 head, 32 sec, 512 bytes/sec, 0 sec total
sd2 at scsibus1 targ 1 lun 1: <, , > SCSI1 0/direct removable
sd2: mode sense (4) returned nonsense; using fictitious geometry

Tento problem jsem pricital USB radici v kombinaci s OpenBSD 3.1. Jak vyzkousel muj spolubydlici o tyden pozdeji, reader nefungoval snad nikde jinde nez na Mac OS X. To se mi potvrdilo az podeji, kdy k temuz vysledku dosel Chris Cappuccio. V teto chvili (10/2002) stale neni jasne, proc tento CF reader pod OpenBSD nechodi. (pritom jeho starsi varianta fungovala)

Spolubydlici stravil celkem dost casu tim, ze zkousel USB CF reader/writer na vsech moznych systemech, patchoval jadra operacnich systemu, ale s zadnym vysledkem.

Getting it work:

Postupem casu jak se stale nedarilo prijit na to, jak rozbehat reader pod OpenBSD, jsme se pokusili preportovat bootloader GRUB na OpenBSD aby fungovalo bootovani pres PXE. Stravili jsme u toho celkem humorny vecer, ve kterem jsme se hrabali ve zbastlenych zdrojaku Grubu a grubali do nich stare OpenBSD patche a snazili se zkompilovat vse s podporou sis interfacu. Vse nakonec skoncilo vycerpanim a totalnim rozkladem :) Ba ne, Grub temer fungoval, stahnul si pres dhcp primarni bootloader a zacal neco delat, na konzoli byl vsak videt pouze rozsypany caj (podle nej se zdalo, ze to bootuje).

Kdyz uz se zdalo, ze uz nepomuze nic krome CF-IDE adapteru, nasel jsem sadu skriptu, ktere pouzivaly originalni skripty od Chrise Cappucciho, ktere instalovaly OpenBSD na flashku. Tyto skripty umoznovaly vytvoreni instalacniho image. Kdyz jsem v te chvili videl konec skriptu soekris-build.sh, velmi jsem se podivil, jak je mozne ze me to nenapadlo. Vzali jsme tedy geometrii z originalniho flashdist.sh a pustili nasledujici:

dd if=/dev/zero of=image.soekris bs=512 count=128000
vnconfig svnd0 image.soekris
./flashdist.sh svnd0 flashsmall.txt bsd /tmp/openbsd
vnconfig -u svnd0

Vysledny image jsem namontoval a upravil konfiguraci, pridal soubory jako /etc/rc, /etc/boot.conf, atd., odmontoval a na Mac OS X zapsal na flashku pomoci sudo dd if=image.soekris of=/dev/disk2 bs=512 count=128000. (pote co jsem musel odkliknout hlasku, ze chci s flashkou pracovat i kdyz neni zinicializovana na UFS) Pro build kernelu jsem pouzil upraveny konfigurak NET4521 a vysledkem je NET4511 kernel config.
System se s timto kupdivu rozbehnul a zacal bootovat, moc daleko se ale nedostal, kernel zacal vypisovat divoke hlasky ohledne wd0. usoudili jsme tedy, ze flashka bude mit poskozene sektory a pokusili se prepsat instalaci "o neco" dal pomoci zmeny offsetu v fdisk(8)u. To melo za vysledek pouze hlasku Bad magic.
Nejlepsi metoda jak instalovat, je dostat system do stavu, kdy zacne bootovat kernel a je vam tak odhalena skutecna geometrie. Do takoveho stavu jej dostanete, pokud do flashdist.sh zadate takove hodnoty, aby to "nejak fungovalo", prip. nechate defaultni.

Z hlasky wd0: 1-sector PIO, LBA, 62MB, 1001 cyl, 4 head, 32 sec, 128128 sectors tedy vyplyne nasledujici kus konfigurace flashdist.sh:

totalsize=128128        # "total sectors:"
bytessec=512            # "bytes/sector:"
sectorstrack=32         # "sectors/track:"
trackscylinder=4        # "tracks/cylinder:"
sectorscylinder=128     # "sectors/cylinder:"
cylinders=1001

Celou dobu, co jsme zkouseli ruzne instalace a geometrie, kernel obcas zacal bootovat, pripadne psal "Bad magic", jsme si mysleli, ze flashka ma vadne sektory.
Indicie, ktere nas primely myslet si, ze flashka je vadna byly ls vypisy v boot> ktere zobrazovaly adresare napr. jako
d--------- 0,0 0 etc. Tyto vadne adresare byly navic pokazde jine, coz jsme pricitali metode zapisu na flasku pres USB writer.
Spolubydlici tedy zplodil behem pulhodinky programek binary-diff.c , ktery porovnava binarni soubory. Po spusteni tohoto programku na zpetne precteny image z flashky, bylo jasne, ze image se shoduji a flashka neni vadna.

S timto se system rozjel, a zacaly problemy jineho radu. dmesg je k dispozici zde. Obrazky boxu dodam casem.

Mezitim jsem ovsem objednal IDE-CF adapter od mite.cz, ktery uz tim padem nebude tolik potreba. (i kdyz pres nej je instalace nesporne jednodussi) Pokud ma tedy nekdo zajem, necht se mi ozve.

Instalace OpenBSD:

Pri vytvareni instalacniho image, ktery se nakonec ukazal jako funkcni, jsem udelal chybu a misto funkcniho kernelu jsem nakopiroval bsd.rd. Toto slo obejit pomoci nasl. prikazu:

 
fsck_ffs /dev/wd0a
mount /dev/wd0a /mnt
echo $PATH
export PATH=/mnt/usr/bin:/sbin:/bin:/usr/bin:/usr/sbin:/
ln -s /mnt/usr/lib /usr/lib
ln -s /mnt/usr/libexec /usr/libexec
cp /mnt/usr/bin/ssh /usr/bin/ssh
export TERM=vt220
ifconfig sis1 inet 10.0.1.57 netmask 255.255.255.0           
scp techie@10.0.1.2:CF-BSD/bsd /mnt

Napajeci zdroje:

System sice bootoval, ale pote co nebehnul kernel a doslo k inicializaci PCMCIA 802.11b karty, opet spontanne rebootoval. Po dotazu do tech-soekris konference (kterou velmi doporucuji nejen pro vlastniky Soekris boxu) jsem obdrzel odpoved, ze je potreba silnejsi zdroj. Konkretne zdroj dodavajici 12V na 1A, tedy vystup 12W. Jeden zdroj od Hama mi odesel, dalsi malicky jsem koupil, ten ale nestacil. Nakonec jsem od GME cz koupil 1200mA zdroj, s kterym se rozbehla jak VPN karta, tak WiFi karta. Celkove jsem tedy k zprovozneni potreboval tri zdroje :)

WiFi:

Jednim z duvodu porizeni boxu bylo WiFi, dlouho jsem hledal kterou kartu koupit, nakonec jsem se rozhodl pro kartu s Prism2 chipsetem aby umela HostAP mod. Nakonec jsem zakoupil ZCOM XS-325 od firmy dbsoft.cz. (bez problemu, snad jen ta cena) Dnesk bych zrejme nakupoval u i4.cz diky jejich spojeni s projektem CZFree.net. Pro CZFree by se ovsem daleko vice hodil Net 4521, ktery ma dva Cardbus sloty (viz obrazky v Odkazech nize).

Pod OpenBSD 3.2 se karta chova celkem normalne, az na jisty packet-loss (pod 20%), ktery jiste pujde minimalizovat vymenou malicke anteny na karte nejakou vetsi a poladenim konfigurace.

Antenku jsem nakonec po roce sehnal od fy netgate.com. Postovne se sice blizilo cene antenky (tzv. rubber duck antenka, ktera v Cechach proste neni s potrebnym pigtailem k sehnani) a pigtailu (je potreba RP-TNC -- MMCX-R pigtail a RP-TNC antena), ale oboji perfektne sedi do soekris boxu a pracuje jak ma. antena ma zisk cca -5dBi. Zasilku jsem si nakonec musel trosku popohnat, ale pak jiz slo vse jak po masle - behem tri dnu dosel via FedEx Intl. priority balicek, vse perfektne zabaleno, vcetne sroubku pro pigtail.

Live foto:

Pomoci pujceneho fotaku Olympus Camedia 380L jsem udelal par snimku pro predstavu, jak soekris vypada v realnem provozu. Obrazky jsem natahal pomoci Itojunova camediaplay, port z FreeBSD do OpenBSD lze provest behem par minut.

Ceny, nakup:

Rozhodne musim priznat, ze celkem jsem do Soekris boxu investoval vic nez jsem chtel, ale ted kdyz vse bezi, neni ten pocit zase tak strasny. Navic tim, jak se vse rozbihalo pres delsi casove obdobi, nebyla financni zatez tak strasna.

Provest objednavku a platbu neni jeste tak tezke, v Soekris company jsou vsichni velmi vstricni. Zaroven je ale dobre rozmyslet si, co vsechno chcete objednat, protoze jit podruhe do banky pouze proto, abyste si objednali malinky VPN akcelerator, zaplatili podruhe poplatky za prevod z uctu na ucet do USA (wire transfer) a nechali cviciciho ze skoly aby vam mezitim delal oci na vasi pritelkyni cekajici na vas za to rozhodne nestoji.
Wire transfer lze vyridit na pobocce vasi banky celkem bez problemu, je potreba mit nasledujici udaje: adresu spolecnosti ktere penize posilate, adresu cilove banky (!), bank routing number.

Nasledujici tabulka vse rozebira. Zaverecna suma zamerne chybi, tezko spocitat celkove vydaje, nicmene pokud by se u nas nasel jedinec, ktery by sel do neceho podobneho, muzu zodpovedne rici, ze jsem schopen poskytnout radu. Z hypoteticke celkove sumy je jeste potreba odecist 5000Kc, kterymi prispel spolubydlici.

net4521 box $265
vpn1211 crypto akcelerator $85
Airborne Express (doprava) $51
exportni dokumentace $10
ZCOM XI-325 WiFi PCMCIA karta cca 4300 Kc
wire transf. poplatky cca $20
lokalni doprava (AirBorne, PPL) + DPH + celni odbaveni cca 3000 Kc
CF reader/writer iTec 1500 Kc
Compact Flash PRETEC 64M cca 1000 Kc
Napajeci zdroje (3 x) cca 1000 Kc
Nullmodem (serial crossover) kabel 200 Kc
CF-ATA adapter + doprava 2000 Kc

Pouziti:

Soekris net 4511 lze pouzit jako jednoduchy router/firewall pro mensi sit, pripadne jako access point pro WiFi (box ma v sobe otvory pro pigtaily k externim antenam), nebo chete-li, bez problemu zvladne oboji zaroven.

Box jsem zkonfiguroval s OpenBSD 3.2 se stavovym packet filtrem pf, demonem rtadvd pro IPv6 autokonfiguraci, dhcpd demonem, altqd demonem pro efektivnejsi usporadani packetovych front ne jednotl. interfacech (uprednostnuje interaktivni ssh traffic pred neint. ssh a ostatnim trafficem), isakmpd demonem pro vystavbu VPN siti a vybavili ho dalsimi utilitami pro spravu.

Odkazy: