DHCP a BOOTP

Jan Andrýsek, xandrys@fi.muni.cz


Obsah


BOOTP a DHCP

BOOTP (Bootstrap Protocol) je definován v RFC 951. Slouží k nastavování síťových parametrů s pomocí serveru bez zásahu uživatele. To umožňuje centralizovanou správu síťových adres, bez nutnosti vytvářet na každém počítači v síti konfigurační soubor.

DHCP (Dynamic Host Configuration Protocol) je definován v RFC 2131 (starší verze v RFC 1541). DHCP je založený na BOOTP, který rozšiřuje o další možnosti, a je s BOOTP zpětně kompatibilní.


DHCP klient

V současné době existují tři různí DHCP klienti pro Linux: dhcpcd, pump a dhclient.

Dhcpcd je možné najít na /ftp://ftp.phystech.com/pub/.

Kompiluje se standardně: ./configure, make a make install.

Po kompilaci můžeme dhcpcd spustit. Dhcpcd defaultně pracuje s rozhraním "eth0", takže stačí napsat dhcpcd. Dhcpcd by měl získat od DHCP serveru IP adresu a některé další údaje, nakonfigurovat rozhraní "eth0" a přepnout se na pozadí. Jestli všechno proběhlo správně zjistíme pomocí ifconfig, kde by měla ve výpisu být u eth0 v položce inet adr smysluplná IP adresa. Pokud všechno funguje jak má, můžeme přidat dhcpcd do startovacích skriptů.

Jak to funguje ?

Po spuštění pošle klient do sítě broadcast s žádostí o IP. DHCP server podle ethernetové adresy vybere IP adresu, kterou zašle zpátky klientovi.


DHCP Server

V současné době existuje mnoho implementací DHCP serveru. Na adrese
ftp://ftp.isc.org/isc/dhcp/ lze stáhnout ISC DHCPd.

Po rozbalení archivu se zkompiluje pomocí ./configure, make a make install.

Konfigurační soubor dhcpd je /etc/dhcpd.conf

Příklad konfiguračního souboru:

# Sample /etc/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}
Tato konfigurace znamená, že DHCP sever přidělí klientovi IP adresu z rozsahu 192.168.1.10-192.168.1.100 nebo 192.168.1.150-192.168.1.200. Dále mu sdělí, že by měl používat 255.255.255.0 jako masku podsítě, 192.168.1.255 jako adresu pro všesměrové vysílání, 192.168.1.254 jako router/gateway a 192.168.1.1 a 192.168.1.2 jako DNS servery.

Pokud chceme přidělit specifickou IP adresu na základě ethernetové adresy použijeme:

host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}

Network Booting

Protokol BOOTP je možné použít pro zavedení operačního systému po síti na bezdiskovou pracovní stanici.

Pro svůj chod pořebuje bezdisková stanice:

  1. Identitu (IP adresu)
  2. Obraz operačního systému
  3. Souborový systém

Pro získáni identity lze použít protokol BOOTP (nebo DHCP), K přenosu operačního systému se používá TFTP (Trivial File Transfer Protocol). TFTP je protokol pro přenos souborů jako FTP, ale proti FTP je hodně zjednodušený. Neobsahuje autentizaci a běží nad UDP. Kořenový systém souborů lze připojit pomocí NFS.

Síťová karta na bezdiskové stanici musí podporovat bootování po síťi. Typicky obsahuje paměť ROM, ve kreré je program (Net Loader), který obsluhuje BOOTP dotazy a TFTP a pak předá řízení operačnímu systému.

Konfigurace serveru

BOOTP

BOOTP se spouští většinou přes inetd přidáním řádku

 bootps dgram   udp     wait    root    /usr/sbin/in.bootpd    bootpd   
do /etc/inetd.conf.

Dále je potřeba namapovat ethernetové adresy na IP adresy. Toto mapování obsahuje soubor /etc/bootptab.

Příklad /etc/bootptab

 global.prof:\
            :sm=255.255.255.0:\
            :ds=192.168.1.5:\
            :gw=192.168.1.19:\
            :ht=ethernet:\
            :bf=linux:
    machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140
    machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141
    machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142
global.prof obsahuje společné nasavení, kde Pro každý počítač musí být uvedena řádka, kde

TFTP

Tftpd se normálně startuje přes inetd přidáním řádku

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot
do /etc/inetd.conf.

Protože TFTP neobsahuje autentizaci je bezpečnější spouštět tftpd v chrootovaném prostředí (parametr -s se jménem adresáře).

NFS

Z mnoha důvodů není dobrý nápad používat na klientech kořenový adresář serveru jako kořenový adresář. Doporučuje se vytvořit nový kořenový adresář pro každou bezdiskovou stanici zvlášt do nějakého podadresáře (např. /export/ip_počítače).

Pak stačí vytvořit soubor /etc/exports, který bude obsahovat řádky jako například tento:

/export/192.168.1.100 aldebaran.foo.com(rw,no_root_squash)