Jak vyplývá z názvu, bezdiskové stanice nemají zrovna moc možností, kde si lokálně pamatovat konfiguraci a další informace. Řešením je bootování ze sítě s využitím serverů, které stanicím při startu konfiguraci sdělí (BootP/DHCP), které jim poskytnou zavaděč a jádro (TFTP) a které jim zpřístupní část svého diskového prostoru (NFS).
I když stanice disk má, je vhodné konfiguraci sítě uchovávat a spravovat centralizovaně. Pokud je taková stanice navíc mobilní, chce se od ní, aby si sama zjistila konfigurace sítě, ve které se právě nachází (DHCP/IPv6).
Protokol BootP (RFC 951, 1532 a 1542) slouží k získaní konfigurace. Klient ve svém požadavku (BOOTREQUEST) uvádí svou hardwarovou adresu a volitelně svou IP adresu, jméno serveru a požadovaný boot soubor. Server v odpovědi (BOOTREPLY) pošle požadovanou IP adresu, IP adresu gateway, svou IP adresu a jméno.
Protokol DHCP (RFC 2131 a řada dalších) rozšiřuje starší protokol BootP, zachovává stejný formát zpráv. Slouží také k získaní konfigurace, navíc má informace jako: maska podsítě, broadcastová adresa, adresa routeru, doména, adresa DNS serveru atd.
Komunikace:
začíná klient broadcastem požadavku DHCPDISCOVER
server(y) odpovídají svou nabídkou DHCPOFFER
klient si vybere a příjme nabídku posláním DHCPREQUEST
server potvrdí DHCPACK nebo zamítne DHCPNAK
Platnost přidělené IP adresy je většinou omezená, před jejím vypršením musí klient požádat o prodloužení. Když už klient přidělenou IP adresu nepotřebuje, posílá DHCPRELEASE zprávu.
Protokol TFTP (RFC 783 a 1350) slouží pro přenos dat po síti. Jedná se o odlehčené FTP, neumožňuje např. listování adresářů a authentizaci. Spojení se naváže na portu 69 (UDP) a pokračuje na náhodně zvoleném portu.
Typy paketů:
RRQ žádost o čtení, obsahuje jméno souboru a mód (netascii, octet, mail)
WRQ žádost o zápis, obsahuje jméno souboru a mód (netascii, octet, mail)
DATA přenášená data, součástí číslo bloku
ACK potvrzení přijatého paketu, součástí číslo bloku
ERROR chyba, obsahuje kód chyby a zprávu
Ke konfiguraci slouží soubor /etc/dhcpd.conf,
který není vytvářen automaticky při instalaci. Nejjednodušší je zkopírovat
nějaký konfigurační soubor (třeba vzorový
/usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample) a upravit jej
pro vlastní potřebu. Důležité je mít subnet sekci pro každé rozhraní.
Dále je vhodné vytvořit prázdný soubor /var/lib/dhcp/dhcpd.leases, ve kterém
si server při běhu uchovává informace o přidělených IP adresách.
# cat /etc/dhcpd.conf
authoritative;
ddns-update-style none;
subnet 10.0.40.0 netmask 255.255.255.0 {
range 10.0.40.100 10.0.40.199;
default-lease-time 21600;
max-lease-time 43200;
option domain-name "lab.fi.muni.cz";
option routers 10.0.40.1;
option ip-forwarding off;
option broadcast-address 10.0.40.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.40.1;
next-server 10.0.40.1;
filename "pxelinux.0";
host speo-beta {
allow booting;
hardware ethernet 00:01:02:19:09:F6;
fixed-address 10.0.40.2;
}
}
subnet 10.0.0.0 netmask 255.255.255.0 {
}
Konfiguračním souborem je /etc/dhclient.conf, většinou postačí defaultní
nastavení (prázdný soubor). Získané informace jsou uloženy v souboru dhclient.leases, jsou
použivány například při nedostupnosti DHCP serveru. Dále uvedený obsah
souboru /etc/sysconfig/network-scripts/ifcfg-eth0 nastavuje použití DHCP
pro konfiguraci sítě při bootování.
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
# cat /usr/share/doc/dhclient-3.0pl2/dhclient.conf.sample
send host-name "andare.fugue.com";
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
send dhcp-lease-time 3600;
supersede domain-name "fugue.com home.vix.com";
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name;
require subnet-mask, domain-name-servers;
timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;
script "/etc/dhclient-script";
media "-link0 -link1 -link2", "link0 link1";
reject 192.33.137.209;
alias {
interface "ep0";
fixed-address 192.5.5.213;
option subnet-mask 255.255.255.255;
}
lease {
interface "ep0";
fixed-address 192.33.137.200;
medium "link0 link1";
option host-name "andare.swiftmedia.com";
option subnet-mask 255.255.255.0;
option broadcast-address 192.33.137.255;
option routers 192.33.137.250;
option domain-name-servers 127.0.0.1;
renew 2 2000/1/12 00:00:01;
rebind 2 2000/1/12 00:00:01;
expire 2 2000/1/12 00:00:01;
}
/etc/xinetd.d/tftp. Důležité je
službu povolit a nastavit dobře adresář pro chrootovaný běh.
# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
PXELinux funguje na principu postupného zavádění. Bootující stanice nejdříve
zjistí konfiguraci sítě, s ní i jméno souboru zavaděče
(pxelinux.0), který stáhne použitím TFTP. Následně je stáhnuto
a spuštěno jádro. Konfigurační soubory jsou v adresáři pxelinux.conf,
jejich jména jsou hexadecimálním zápisy adres stanic (nebo část adresy), jejichž konfiguraci
obsahují. Pokud se pro stanici nenajde odpovídající soubor, použije se nastavení z
default.
# ktera konfigurace sa ma spustit defaultne DEFAULT nfs # cekej 3 sekundy pred natahovanim jadra TIMEOUT 30 # zobraz boot prompt PROMPT 1 LABEL disk # cesty jsou relativne k TFTP server root KERNEL 10.0.40.2/bzImage # parametry jadra APPEND root=/dev/hda3 # pripojit k parametrum jadra i informace o siti # IP stanice,bootserver,gateway,netmask, IPAPPEND 1 LABEL nfs KERNEL 10.0.40.2/bzImage APPEND root=/dev/nfs rw nfsroot=10.0.40.1:/tftpboot/10.0.40.2 IPAPPEND 1