Bezdiskové stanice

Martin Hradil, xhrad1@fi.muni.cz


Obsah


Protokoly

Bezdiskova stanice je stanice pro svuj provoz zavisla na siti. Takoveto stanice tedy zavadi system bud z nejakeho ROM image nebo ze site, v kteremzto pripade vyuziji BOOTP a TFTP. Nutno podotknout ze touto cestou byva zpravidla stazen a bootovan ne treba image linuxu ale nejaky konfigurovatelnejsi mezizavadec, napr. PXElinux. Tak ci tak, chceme-li aby cilovy system byl linux, bud pouzijeme jadro s initrd ktery potom pripoji nejaky sitovy filesystem a nebo jadro s zakompilovanou podporou pro NFS a autokonfiguraci IP adresy. V kazdem pripade dale potrebuji ziskat svoje oznaceni na siti, tedy nejspis IP adresu, coz je zpravidla delano pomoci DHCP, prestoze i BOOTP ma v omezene mire tuto schopnost. V pripade IPv6 siti jiz DHCP vetsinou netreba (existuje, viz RFC 3315) ale to je mimo scope tohoto referatu, stejne jako sitove filesystemy typicky vyuzivane na takovych stanicich.

Existuji samozrejme i dalsi alternativy, pro zjisteni IP adresy na zaklade MAC adresy se da pouzit i RARP protokol, ten ovsem neni routovatelny ani neumoznuje predat adresu boot image. Alternativou k TFTP je treba SFTP (Simple FTP).


BOOTP - Bootstrap Protocol

BOOTP, definovan v RFC 951 je velice jednoduchy protokol, coz vedlo k tomu ze jej nyni podporuji BIOSy nekterych sitovych karet ci PC. Zprava ma pevny format, prvni byte urcuj zda se jedna o request ci reply. Klient vysle BOOTREQUEST na z UDP portu 68 na broadcast adresu 255.255.255.255, port 67, ve zprave je mimo hlavicky vyplnena jen HW adresa (MAC) a pocet sekund a klientova IP na 0.0.0.0. Server odpovi BOOTREPLY ve ktere jsou vyplnena chybejici pole, zejmena IP adresa klienta, serveru, gatewaye a cesta k boot image. Presna struktura viz napr. www.comptechdoc.org/independent/networking/guide/netbootpdhcp.html. Dalsi informace jsou potencialne dostupne v poli vendor extensions.

Standardni BOOTP server se jmenuje bootp a je dostupny v kazde distribuci (debian/ubuntu: bootp, gentoo: netkit-bootp). Konfigurace je v /etc/bootptab , kazdy radek je skupina dvojteckou oddelenych hodnot, kde prvni hodnota je hostname *klienta* (bez whitespace na zacatku) a dalsi hodnoty jsou ve formatu tg=hodnota kde tg je dvojpismeny tag. Pokud hostname zacina teckou, jedna se o polozku zavadejici pouze konfiguraci spolecnou pro dalsi zaznamy, includovanou pomoci tagu tc. Mezi dulezitejsi tagy patri bf=bootfile, gw=gateways oddelene mezerou, ht=hw type, ha=host hw address, ip=host ip address, sa=tftp server address, sm=subnet mask. Radky jsou ukoncene dvojteckou. Tag ha musi byt urcen az po ht ktery urcuje typ adresy, nejjednodussi konfigurace je tedy:

agaue-beta:ht=ethernet:ha=000476D1C37E:ip=10.0.20.2:gw=10.0.20.1:


TFTP - Trivial FTP

Pak prichazi na radu TFTP, nejnoveji definovano v RFC 1350. Jedna se o zjednoduesnou verzi FTP, je stateless, pres UDP port 69 a umi v podstate jen ekvivalenty FTPkovych GET a PUT. Klient stahne z jiz zname cesty na serveru boot image a zacne jej bootovat. Alternativne muze take vysilat multicastove pro vice klientu na UDP portu 1758.

TFPT klientu existuje vice, ale vzhledem k moznostem TFTP se az tak nelisi, jako priklad uvedme tftp-hta (debian/ubuntu: tftpd-hta, gentoo: tfpt-hta). Konfigurace je trivialni, daemon se pousti s parametrem zdrojoveho adresare, do ktereho se chroot(2)ne. TFTP nema zadna bezpecnostni omezeni, zpravidla jej tedy neni dobre poustet nad adresarem s soubory ktere by mohly obsahovat sensitivni informace.


DHCP - Dynamic Host C Protocol

DHCP je rozsirena verze BOOTP, definovana zejmena v RFC 2131 (a dalsich, list napr. v www.networksorcery.com/enp/protocol/dhcp.htm). Od BOOTP se lisi obsahem a velikosti (312B) pole options na konci zpravy (v BOOTP oznacovaneho Vendor Extensions). Asi nejdulezitejsi zmena je moznost omezit dobu na kterou je IP adresa pridelena, tzv. lease time, a to, ze soucasti DHCP odpovedi je i maska site a adresy DNS serveru. Take umoznuje vice DHCP klientu na siti, klient posle na multicast adresu DHCPDISCOVER, DHCP servery ktere se mu rozhodnou odpovedet odpovi (opet multicast) DHCPOFFER (s jiz vyplnenymi udaji), klient si jednu moznost vybere, posle DHCPREQUEST uz primo danemu serveru a nebo nevybere a zasle DHCPDECLINE. Odpovedi serveru na DHCPREQUEST je bud potvrzeni DHCPACK ci zamitnuti DHCPNAK (treba v pripade ze dana IP jiz byla mezitim nekomu pridelena). Po vyprseni lease time je klient povinen znovu cely cyklus opakovat. V pripade ze se rozhodne uvolnit adresu drive, posle serveru DHCPRELEASE.

DHCP klientu je cela rada, napr. dhcpd od ISC, jeho fork dhcpd3 a minimalisticka udhcpd. Typickou variantou je dhcp3 (debian/ubuntu: dhcp3-server; gentoo: dhcp), pouziji tedy tuto. Konfigurace se nachazi v /etc/dhcp{,3}/dhcpd.conf a vyrazne se lisi od bootptab. Format je jedna option na radek, ukoncena strednikem, a nebo specifikace subnet, host, class, etc., nasledovana viceradkovym blokem prikazu specifickych pro dany subnet, etc., uzavrenym v {}. Blok dedi nastaveni nadrazeneho bloku mimo tech ktere jsou uvnitr prepsany. Prikladem dhcpd.conf je tedy:

option domain-name "lab.fi.muni.cz";
default-lease-time 600;
max-lease-time 3600;
option domain-name-servers agaue-beta, erigona;
option routers 10.0.20.1;

host agaue-beta {
	hardware 00:04:76:D1:C3:7E;
	filename "/tftpboot";
	option domain-name-servers erigona;
	server-name "agaue-alpha";
	fixed-address 10.0.20.2;
}

subnet 10.0.20.0 netmask 255.255.255.0 {
	range 10.0.20.3 10.0.20.254;
}
, ktery defaultne priradi IP adresu na 10 minut, ale uvoli se i k 1 hodine kdyz pozadan, pro zadanou HW adresu vrati cestu k boot image, DNS erigonu a pevnou IP 10.0.20.2 zatimco pro ostatni vrati adresy z rozsahu 10.0.20.3 - 10.0.20.254 a DNS agaue-betu a erigonu.

Konfigurace DHCP klienta je zpravidla trivialni, jedna se o soubor dhclient.conf. Dale klient vyuziva dhclient.leases (/var/lib/dhcp3/dhclient.leases), kam uklada obdrzene IP adresy a jejich vypujcni lhuty aby je mohl pokracovat pouzivat po rebootu, pokud stale jeste plati. Poslednim souborem je dhclient-script ktery je volan v pripade zmeny IP adresy a ktery muze byt zavisly na distribuci stejne jako nastavit pouzivani DHCP (radek "iface eth0 inet dhcp" v /etc/networking/interfaces v distribucich zalozenych na debianu).


Zdroje