DHCP & spol

Tomáš Kotrla, xkotrla(at)fi.muni.cz


Obsah


Bezdiskové stanice a mobilní zařízení

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).


Protokoly

BootP (Bootstrap Protocol)

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.

DHCP (Dynamic Host Configuration Protocol)

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.

TFTP (Trivial File Transfer Protocol)

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


Konfigurace

Autorem protokolu DHCP je
Internet System Consortium, na jeho stránkách lze nalézt i volně šiřitelnou implementaci. Ve většině distribucí je k dispozici DHCP package. Instalace je tradiční, tak se jí zde ani nebudu více věnovat.

DHCP server

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 {
}

DHCP client

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;
}

TFTP

Známou implementací TFTP je
tftp-hpa. Server nemá žádný konfigurační soubor, pro změnu nastavení je potřeba editovat spouštěcí skript /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

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

Odkazy