Bezdiskové stanice (BootP, DHCP, TFTP)

Jaromír Dobiáš, jaromir.dobias(na)mail.muni.cz

Obsah

Základní idea bezdiskových stanic

V době sálových počítačů a mainframů bylo potřeba distribuovat výpočetní výkon obřích a drahých zařízení mezi více operátorů, aby bylo maximalizováno využití výpočetního výkonu. Typickým řešením, jak bylo tohoto cíle dosaženo, byl přístup k hlavnímu počítači pomocí vzdálených či lokálních terminálů. Terminál se vyznačoval tím, že sloužil zejména k zadávání příkazů a dat ke zpracování. Jednalo se tedy o jednoduchou stanici, jejímž hlavním cílem bylo přijímat povely operátora a zobrazovat relevantní informace na výstupní zařízení. Samotný terminál nebyl však určen k řešení výpočetní úlohy a nebyl tedy vybaven nadbytečnými hardwarovými komponentami. Pro potřebu minimalizace hardwarových komponent nebyl terminál vybaven pevným diskem a veškeré informace potřebné ke svému chodu získával během startování prostřednictvím počítačové sítě. Aby bylo možné tohoto cíle dosáhnou byla vytvořena sada pomocných protokolů. Ty umožňovaly automatickou konfiguraci síťového rozhraní a zavedení operačního systému pro příjem, zasílání a interpretaci informací mezi operátorem a hlavním počítačem.

Protokoly pro podporu bezdiskových stanic

BootP

BootP neboli Bootstrap Protocol původně definován v RFC 951 byl vytvořen k automatické konfiguraci IP adresy síťové karty terminálu a k získání jména souboru, který má být zaveden a spuštěn v paměti jako první. K samotnému zavedení iniciálního souboru do paměti slouží protokol TFTP, s kterým protokolem BootP spolupracuje stejně jako s dalšími transportními protokoly jako např. SFTP nebo FTP. Protokol BootP bývá na straně klienta typicky přítomen v jednorázově programovatelné paměti typu PROM a bývá běžnou součástí síťových karet.

Protokol BootP používá klasického přístupu klient-server. Na straně serveru jsou uložena nastavení jednotlivých stanic, která jsou vázána na MAC adresy jednotlivých strojů. Databáze je uložena v textovém souboru a administrátor jí konfiguruje ručně. Při požadavku klienta o získání konfiguračních údajů zasílá klient všesměrovou zprávu všem strojům na daném síťovém segmentu. Klient zasílá svou žádost ve formě UDP segmentu bootrequest do sítě se zdrojovým portem 68. Server naslouchající na portu 67 zasílá po nalezení údajů odpovídajících zdrojové MAC adrese tazatele odpověď, která bootreply. V této odpovědi je uvedena IP adresa dotazovaného stroje, maska podsítě, adresa DNS serveru, cesta k serveru s iniciálním souborem jenž startuje operační systém. Každý stroj využívající tuto službu má tyto údaje pevně nastavené.

Dostupnou implementací BootP serveru je například verze CMU bootp, která je vylepšením původního BootP serveru vytvořeného Billym Croftem na Stanfordské univerzitě. Pro distribuci Slackware je možné v době psání tohoto příspěvku získat balíček s tímto serverem na této adrese. V současné době je však používání protokolu BootP zastíněno protokolem DHCP, který však není s protokolem BootP zpětně kompatibilní.

Příklad konfiguračního souboru /etc/bootptab:

# Sample bootptab file (domain=andrew.cmu.edu)


            .default:\
                 :hd=/usr/boot:bf=null:\
                 :ds=netserver, lancaster:\
                 :ns=pcs2, pcs1:\
                 :ts=pcs2, pcs1:\
                 :sm=255.255.255.0:\
                 :gw=gw.cs.cmu.edu:\
                 :hn:to=-18000:

            carnegie:ht=6:ha=7FF8100000AF:tc=.default:
            baldwin:ht=1:ha=0800200159C3:tc=.default:
            wylie:ht=1:ha=00DD00CADF00:tc=.default:
            arnold:ht=1:ha=0800200102AD:tc=.default:
            bairdford:ht=1:ha=08002B02A2F9:tc=.default:
            bakerstown:ht=1:ha=08002B0287C8:tc=.default:

            # Special domain name server and option tags for next host
            butlerjct:ha=08002001560D:ds=128.2.13.42:\
                 :T37=0x12345927AD3BCF:\
                 :T99="Special ASCII string":\
                 :tc=.default:

            gastonville:ht=6:ha=7FFF81000A47:tc=.default:
            hahntown:ht=6:ha=7FFF81000434:tc=.default:
            hickman:ht=6:ha=7FFF810001BA:tc=.default:
            lowber:ht=1:ha=00DD00CAF000:tc=.default:
            mtoliver:ht=1:ha=00DD00FE1600:tc=.default:

Popis atributů:

Spuštění démona:

přidáním následujícího řádku do /etc/inetd.conf

	bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
    

RARP

Protokol RARP, definován původně v RFC 903 se používá k získání IP adresy stanice na základě její MAC adresy. Stanice zasílá všesměrovou (na úrovni ISO OSI L2) zprávu na daný segment. RARP server ve své odpovědi zasílá zpět unicastovou zprávu (L2), která obsahuje IP adresu dotazující se stanice. Nevýhodou je, že jelikož komunikace probíhá na úrovni L2, není možné dotaz přeposlat na jiný síťový segment. Další nevýhodou je, že v odpovědi nejsou zasílány údaje o IP adrese brány nebo maska podsítě. V praxi se tento protokol tudíž pro účel autokonfigurace prakticky nepoužívá, jelikož služby BootP a DHCP jsou pro to vhodnější.

Zdrojový kód služby RARP je možné nalézt na této adrese, nicméně jeho kompilace nemusí být přímočará.

TFTP

Protokol TFTP, původně definován v RFC 783, slouží k datovým přenosům malých souborů (do 32 MB) prostřednictvím protokolu UDP. Používá se například k stažení souboru operačního systému poté, co stanice obdržela prostřednictvím BootP nebo DHCP potřebnou L3 konfiguraci a je schopná síťové komunikace. Implicitně komunikuje služba TFTP prostřednictvím portu 69. Výhodou této služby je, že díky své odlehčenosti zabírá málo prostoru a je tedy možné její implementaci nahrát do integrovaných čipů.

Zdrojový kód služby TFTP je možné stáhnout zde.

Spuštění démona:

přidáním následujícího řádku do /etc/inetd.conf

	tftp  dgram   udp     wait    nobody  /usr/sbin/tcpd  in.tftpd -s
/tftpboot
  

Parametr '-s' zabezpečí, že démon poběží v chrootovaném adresáři /tftpboot

Přenos souboru do/z počítače přes TFTP:

TFTP [-i] cíl [GET | PUT] zdroj [umístění]

DHCP

Služba DHCP vznikla oficiálně publikací RFC 1531. Možno jí považovat za nástupce služby BootP. Pro komunikaci jsou použité stejné porty jako používá služba BootP (klient-UDP port 68; server-UDP port 67). Komunikace prostřednictvím DHCP probíhá ve čtyřech krocích:

  1. Klient odešle všesměrový dotaz DHCPDISCOVER
  2. DHCP server odpoví na dotaz paketem DHCPOFFER s nabídkou potenciálních volných IP adres
  3. Klient si z nabídnutých adres vybere jednu a svou volbu oznámí v paketu DHCPREQUEST
  4. DHCP server volbu potvrdí pakete DHCPACK

Nastavení IP adresy při použití DHCP může mít jednu ze 3 podob:

  1. Ruční nastavení-každá stanice má pevně nastavenou a uloženou IP konfiguraci
  2. Statická alokace-DHCP server má nastaveno mapování MAC adres na příslušné IP adresy
  3. Dynamická alokace-stanicím je vymezen dynamický rozsah adres, které mohou být přidělovány neregistrovaným

K dispozici existuje celá řada různých DHCP serverových a klientských programů. Osobně preferuji klientský program dhcpcd jehož zdrojový kód ke možné stáhnout zde.

Jako DHCP server můžeme použít například zdrojový kód vyvíjen pod subjektem Internet System Consorium. Kód je možné stáhnout zde.

Získání adresy od DHCP serveru:

Natavení automatické konfigurace IP adresy prostřednictvím DHCP klienta bývá ve většině Linuxových distribucí implicitně zapnuto. Pokud však z nějakého důvodu potřebujeme získat IP adresu na požádání, použijeme příkaz dhcpcd, kterému jako argument zadáme jméno požadovaného síťového rozhraní (např.eth0, eth1, wlan0). Výpis všech síťových rozhraní systému, které máme k dispozici obdržíme zadáním příkazu ifconfig -a. Pokud nepoužijeme přepínač '-a', obdržíme seznam síťových rozhraní, které jsou ve stavu "up" neboli aktivní. Obdržená IP konfigurace od DHCP serveru se ukládá do adresáře /etc/dhcpc.

Příklad nastavení DHCP serveru:

allow unknown-clients; # povol pristup neregistrovanym zadatelum default-lease-time 1800; # 30 minut max-lease-time 7200; # 2 hodiny subnet 172.16.107.0 netmask 255.255.255.0 { range 172.16.107.128 172.16.107.254; option broadcast-address 172.16.107.255; option domain-name-servers 172.16.107.2; option domain-name "localdomain"; option routers 172.16.107.2; }
Podle výše uvedeného nastavení budou adresy přidělovány z IP adresního rozsahu 172.16.107.128-172.16.107.254. Broadcastová adresa dané sítě bude nastavena na hodnotu 172.16.107.255. Adresa DNS serveru bude nastavena na hodnotu 172.16.107.2. Jméno aktuální domény bude nastaveno na řetězec localdomain. Adresa brány bude nastavena na hodnotu 172.16.107.2.

NFS

Poskytuje sdílené prostředky uživatelům (diskový prosto, tiskárny), které se jeví, jako by byly dženy výlučně danými uživateli. Oběcně je doporučeno vytvořit kořenový adresář pro každou bezdiskovou stanici jako samostatný podadresář na zdrojovém stroji (např. /export/ip_stroje). Pak do souboru /etc/exports vložíme řádky ve tvaru:

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

Zdrojový kód je možné stáhnout zde. K správnému fungování NFS je žádoucí nainstalovat také Portmap, který je možné stáhnout zde.

Literatura