Upgrade at home lan

03.04.2006 12:50

Tak som sa aj ja rozhodol popisat vam nieco, z coho si mozno nieco odnesiete. Rozhodol som sa pre upgrade rychlosti domaceho konektu na megabit, kedze som zistil, ze vela casu stravim tahanim pomerne velkych balickov (viac-menej na pracu, ked instalujem masiny). Cakanie ma zacalo pomerne dost unavovat. Pri tej prilezitosti som sa rozhodol vyriesit viacero problemov v domacnosti: zakupenie 100Mbps switchu (10Mbps je uz dost out of date), postavenie servera s dostatocnym storidzom na data, router, zalohovane pripojenie do internetu, moznost pristupu zvonka na masinu (aj ked mam dynamicku ipcku), prehravanie hudby v kuchyni, moznost chatovania a pisania z kuchyne (co prave prevadzkujem, sedim v kuchyni, pijem caj a pisem na VT420).

Hardware
Momentalne nemam peniaze na hluposti, tak som zobral komp, co sa valal brachovi pod stolom, napchal do neho disky, co som doma ponachadzal. Z hardveru som dokupil len jednu 100Mbps sietovku, 100Mbps switch a par kablov (predlzovacky, jacky, ...).

Router
Prva a zakladna funkcia je routovanie. Nainstaloval som Debian Sarge (popis instalacie bude neskor, v sekcii storage). Z lartc.org som zobral a trosku upravil skript ktory by mal zlepsit vlastnosti pripojenia po asymetrickej linke. Funguje fantasticky -- bez neho pri stahovani plneho kotla bud ostatne pocitace nevladzu tahat nic (je to strasne pomale) alebo mi minimalne nejde rozumne SSH. Po zvyseni priority ACK packetov a rozumneho shapovania uplinku (aby sa nezaplnila queue) som dosiahol to, ze aj pri tahani plneho kotla ide SSH idealne. Pouzivam HTB verziu skriptu.

Storage
Pouzil som 80, 20 a 6GB disk. System vyuziva masivne LVM. Vytvoril som primarne dva volume groupy: jednu raidovanu a jednu neraidovanu. System je na raidovanej
(/ je cisto na raide, vsetko ostatne v LVM). Cize mam 26GB raidovaneho space (20GB disk a 20GB particia z 80GB disku je jeden raid1, 6GB disk a 6GB particia je druhy sw raid1, tie su pouzite ako physical volume pre lvm). Zvysok je VG, ktora je pouzita na nedolezite data (storage). Debian mal v case, ked som to robil trosku problem s LVM, ktore ako physical storage pouzivaju RAID1. Cize som system nainstaloval na cisty RAID1 (do /dev/md0), spravil LVM tak ako som chcel a potom presunul usr a var.

S tymto rozlozenim mam trosku problem, z casu na cas sa mi pri velkom zapise na disky masina sekne. Neviem, ci je to sposobene prehriatim alebo tym, ze jeden z diskov je vadny, este to potrebujem odsledovat. Zapis na neraidovany LVM storage je v pohode.

Bootovanie zo softveroveho raidu je tiez fajn, ked vypadne ktorykolvek z diskov.

Treba lilu dat extra parameter:

boot = /dev/md0
raid-extra-boot=mbr

Tym sa zabezpeci, ze sa mbr zapise na vsetky zucastnene disky. A system bootne aj v pripade, ze z primarneho disku sa bootnut neda.

S LVM som mal este mensi problem, ze mi nechcel pouzivat raid disky ako storage a autodetekcia vzdy nasla /dev/hdaX namiesto /dev/mdX ako physical volume. Trebalo zapnut v /etc/lvm/lvm.conf:

md_component_detection = 1

VT420 a prehravanie hudby
Z hladiska audiofilie je toto, co som spravil naozaj uchylnost, ale na pocuvanie mp3ojek pri ranajkovani a pri cajovani to vcelku staci. Z internej zvukovky som vyviedol 5m jack predlzovaci kabel k minireprakom, ktore su na policke nad chladnickou.

VT bolo najjednoduchsie rozbehat. Do inittabu stacilo pridat:

T0:23:respawn:/sbin/getty -L ttyS2 19200 vt100

a spustit init q.

Potom treba osefovat lilo, aby pouzivalo VT aj ako boot konzolu (nech nemusim mat pripojeny ziadny monitor, v chodbe by mi dost zavadzal):

serial=0,19200
install=text
image=/vmlinuz
label=Linux
root=/dev/md0
initrd=/initrd.img
append="console=tty0 console=ttyS2,19200"

Takto mozem davat prikazy aj lilu. (BTW: vie niekto ako toto spravit s grubom? Aj bootovanie z raidu by tam ale malo chodit, osobne mam radsej grub, ale nenasiel som nejaky vhodny navod na vsetko, co potrebujem, tak som viac-menej z lenivosti ostal pri lile).

Povodne som mal s VT420 problem, ze mi nesli sipky. Poriesit mi to nakoniec pomohol sn0wcrash, ktory mi povedal, ze treba v menu vt420 nastavit vt100 mod. S nim uz vsetko fici tak ako ma. To bol spociatku trosku problem, pretoze som chcel ako player pouzivat mp3blaster (konzolovy s textovou grafikou, vie playlisty a tak). Nakoniec som skusal mpg321, ale future mi zase poradil, ze madplay ma lepsi kodek a nakoniec som si nan zvykol uplne najviac. Takze prave hra v screene v druhom okne Anal Staircase a ja mozem takto v prijemnej atmosfere pisat moje zazitky s instalaciou masiny.

(BTW: sn0wcrash ma doma teraz tiez podobny setup, vratane VTcka v kuchyni, z coho som bol milo prekvapeny minuly aj tento vikend, ked som u neho bol, myslim, ze mame v tejto oblasti dost podobne zmyslanie... Dokonca ked som si dal v jeho adresari s hudbou ls, tak som mal fakt pocit, ze som doma, pretoze nielenze ma pomerne rovnake mp3, ale aj rovnake nazvy -- male/velke pismena,
konkretne tie iste releasy a tak dalej :))).

wifi
Wifi konekt po dome pouziva kartu 802.11g od SMC. Fici na tom drajver z prism54.org. Musim ale povedat, ze karta z casu na cas zblbne a treba zhodit wifi, unloadnut modul a znova ho loadnut. Dalej mam celkom problem, pretoze masina je v chodbe v skrini a zrovna na miestach, kde by sa mi wifi signal najviac zisiel (miesto, kam si davam notebook a balkon) je signal dost nanic. Zatial som na mieste, kam si davam notebook zaviedol ethernet, ale asi by bolo dobre zohnat nejaku malu vsesmerovu antenku. Poradte ako mate poriesene wifi v celej domacnosti.

Inac pouzivam wep a lockovanie na mac adresy, kazdopadne s takym signalom aky mam je to viac-menej jedno, pretoze uz ani pred dverami nemam ziadny signal.

Internet
Kedysi som na tomto fore slubil, ze popisem trosku ako funguje pouzitie dvoch uplinkov v linuxe. Doma to mam vyriesene trosku inak (hlavne preto, ze na mikrovlnku je potrebny dalsi stroj, kedze antena trci z miesta, ktore
je o dost dalej ako server a tu masinu nechcem mat stale zapnutu. Tak sem napisem par vychytavok, ktore pouzivam uspesne aj na inych miestach. V prvom rade, pri DSL konektoch sa mi osvedcila takato entry v crontabe:

*/3 * * * * /sbin/ifconfig | grep '^ppp0' || (/usr/bin/poff>&aml;/dev/null; /usr/bin/pon dsl-provider;) > /dev/null 2>&1

Castokrat sa stane, ze sa pppd nejak zruti alebo zasekne, odkedy som tam dal toto, nemam s tym ziadny problem, casom sa vzdy zobudi. poff a pon su asi debian-specific, takze pripadne ine sposoby pomozu asi lepsie.

Problem pripojenia cez dvoch providerov ukazem na priklade mikrovlnky a dslka. DSLko je rychlejsie a pouziva sa s vyssou vahou.

V prvom rade som si spravil subor /etc/iptables/ifnames, ktory obsahuje nazvy interfacov a dolezite ip adresy, nech v pripade zmeny alebo pridania dalsej sietovky nemusim robit zmeny v niekolkych skriptoch.

Mikrovlnka sa kontroluje z cronu skriptom mw-check, ktory pinguje nejaku ipcku vonku (najlepsie nie len gateway ale nieco bud uz u providera alebo najlepsie v sixe). K tejto masine je staticka route cez mikrovlnku.
Skript vyzera nejak takto:

if ping -c 4 -i 10 $TESTIP >/dev/null 2>&1; then

/etc/iptables/mw-up

else

/etc/iptables/mw-down

fi

Skripty mw-up
a mw-down riesia dve rozne situacie s mikrovlnkou (ked sa zdvihne a ked spadne).

Este ostava vyriesit situaciu, ked bezi iba mikrovlnka a nabehne ppp. Na to sluzi skript ppp-access spustany z /etc/ppp/ip-up.d.

Dynamicke IPcky
Aj moja masina doma aj tato masina, ktora robi konekt cez dve rozne masiny ma jednu ipcku dynamicku. Spominam to preto, lebo sem poskytnem dve mozne riesenia. Prve--najjednoduchsie-- je vyuzit sluzby dyndns.org. Staci tam vytvorit konto, zvolit nazov a pouzit program ipcheck, ktory je mozne spustat napriklad /etc/ppp/ip-up.d aby updatol info o ip adrese. Tak dany hostname ukazuje vzdy na aktualnu adresu (a ta sa da zase pouzit ako CNAME v realnej domene). Takto je mozne mat napriklad v pripade dvoch konektov mail.domena.sk
a mail1.domena.sk, primarny MX pripadne moze ukazovat na staticku ipcku (davat sekundarny MX na druhu ipcku je diskutabilne, lebo maily mozu poputovat k niekomu inemu). V pripade vypadku jedneho konektu sa tam vsak da vzdy dostat a mozem si vybrat, cez ktoru linku tam pojdem (a tak napriklad mozem riesit problem s jednym pripojenim na dialku).

Doma som zvolil ine riesenie -- rozhodol som sa, ze si podobnu vec spravim sam. Cez program /usr/sbin/dnssec-keygen som si vygeneroval shared key. Vytvoria sa sice dva subory, ale ja potrebujem pouzit len private, kedze to bude zdielani tajomstvo. Do konfiguraku bindu na mojom dns serveri som dal nasledovne:

key update_key {

algorithm HMAC-MD5;

secret "tutojezdielanykluckonciacisadvomiznakmirovnasa==";

};

zone "dynamic.domena.sk." {

type master;

file "/etc/bind/masters/dynamic.domena.sk";

allow-update { key update_key; };

};

Na klientskej strane sa spravi nasledovna vec:

IPCKA=`ip addr show eth0|grep "inet "|sed -e 's/.*inet //'|sed -e 's//.*//'`

cat << EOF | sed -e "s/IP/$IPCKA/g" | nsupdate -k /etc/bind/keys/Kupdate_key.+157+57588.private

server 192.168.9.5

update delete dynamic.domena.sk. A

update add dynamic.domena.sk. 50 A IP

send

EOF

(namiesto 192.168.9.5 treba dat ipcku DNS servera samozrejme).

Toto s pouzitim daneho kluca updatne DNS na serveri. 50 je cas expiracie.

(inak, odporucam pouzivat DNSSec aj na zonove transfery z master serverov na slave, postup je obdobny, akurat namiesto allow-update sa pouzije allow-transfer. Takto nie je potrebne davat allow-transfer na ipcku, ale pre tych, ktori maju spravny kluc. Cele updaty su podpisane, takze aj sekundarny dns vie, ci transfer pochadza od primarneho nameservera. Na sekundari sa okrem definicie
kluca nastavi este toto:

server 192.168.9.5 {

keys { xfer_key; };

};

(ak sa predtym hore zadefinuje xfer_key). Inak, co sa tyka dynamickych adries, mam pre danu adresu osobitnu zonu, ktora ma v zone domena.sk len jeden NS zaznam. Takto nemusim riesit synchronizaciu mastra a slavea a vzdy sa na aktualnu ipcku pytam primarneho dns servera. Je mozne este ako backup pouzit aj sluzby dyndns, kazdopadne toto chodi spolahlivo a este som nemal problem s tym, ze by som mal nejaku neaktualnu ip adresu.

V pripade ppp spojeni (napr. DSL) je dobre dat toto do /etc/ppp/ip-up.d, v pripade, ze sa ziskava cez dhcp, tak dhcpcd vie po ziskani IPcky spustit nejaky konkretny skript s parametrami, ze co sa udialo.

Veci na doriesenie
V prvom rade mam pocit, ze je masinke v skrini trosku teplo. Sem-tam zatuhne a je fakt horuca. Ak mate nejake napady na efektivnejsie chladenie (sn0wcrash vravel, ze najlepsie bude asi vyvrtat do zadu skrine velku dieru na mieste, kde bude fucat ventilator, aby vyfukoval smerom von). Dalej musim nejak estetickejsie pozliepat kable.

Dalej -- na serveri som si rozbehal FreeNX server, zatial len velmi pokusne. Jedna sa o ekvivalent VNC, akurat je fakt vyrazne rychlejsi a bezpecnejsi. Problem mam zatial hlavne s pisanim diakritiky. Skusal som to cez 128micku linku a citil som sa viac-menej ako keby som bol priamo doma. Po chvili pouzivania, ked sa vybuduje cache s beznymi bitmapami to ide este rychlejsie. Udajne s hotovou cache nie je problem pouzivat KDEcka aj cez GPRS. Da sa taktiez pripojit na windowsy (FreeNX server bude na linuxe a odtial pojde
VNC na klientske stanice), len este cely princip velmi nechapem. Okrem toho NX klient pre maca mi dost blbne (biju sa tam nejake symboly v libkach), co je dost onicom, lebo prave maca pouzivam. Cize este chvilu budem musiet vydrzat pri VNC na niektore konkretne zalezitosti.

Dalsia vec, co by som chcel doriesit je etherwake. Zatial nemam na druhej masine sietovku, ktora by vedela zobudit masinu (a nie som si isty, ci to bios podporuje), kazdopadne je tam jednak zalozny konekt a okrem toho aj pripojena tlaciaren, takze by bolo dobre, keby som vedel prikazom zo servera zapnut druhu masinu a pripadne ju pouzit na tlac.

No a posledna vec, ktoru chceme doriesit s viacerymi a o ktorej by som na tomto fore chcel rozprudit nejaku debatu je SIP-based ip telefonia. Napad sme mali s potmehoodom, momentalne sa k nemu pridali ludia ako sn0wcrash, future a ciastocne oryon a slash. Ked uz mame doma tie broadbandy, preco neskusit telefonovanie cez Internet. Chceli by sme spravit nejaku SIP ustrednu s autentifikaciou a alokaciou telefonnych cisel. Dolezita je moznost pouzit bud SIP telefon, quicknet kartu (do ktorej sa zapoji klasicky analogovy telefon) ale aj klasicke softverove telefonovanie (mikrofon a sluchatka). Preto by ma zaujimali vase napady, postrehy na tuto temu. Hlavne otazka vyberu softveru (pod Win future pozna nejaky sip ip telefon, co je vhodne pouzit
pod linuxom)? Odpovede asi linkujte do specialnej nody o ip telefonii (prvy clovek moze vytvorit:).

Tot vsio, na pripadne otazky rad zodpoviem.

Ostatne fotoze tu

autor: juraj bednar