DHCP mini-HOGYAN

Vladimir Vuksan

            vuksan@veus.hr
         

Verziótörténet
Verzió: v4.122000 október 22.Átdolgozta: vv

Tartalomjegyzék
1. Bevezetés
1.1. Általános jogi nyilatkozat
1.2. A dokumentum új változatai
1.3. Visszajelzés
1.4. Közreműködők
1.5. Szerzői jog
1.6. Magyar fordítás
2. A DHCP protokoll
3. A kliens beállítása
3.1. A kliens démon letöltése (dhcpcd)
3.2. Slackware
3.3. RedHat 6.x és Mandrake 6.x
3.4. RedHat 5.x
3.5. RedHat 4.x és Caldera OpenLinux 1.1/1.2
3.6. Debian
3.7. LinuxPPC és MkLinux
3.8. Utolsó lépés
3.9. Különféle megjegyzések
3.10. Hibaelhárítás
3.11. Alternatív DHCP kliens (ISC dhclient)
4. DHCP szerver beállítás
4.1. DHCP szerver UNIX rendszerekhez
4.2. DHCP szerver beállítás
4.3. DHCPd beállítások
4.4. A szerver indítása
4.5. Egyéb érdekes olvasnivalók

1. Bevezetés


1.2. A dokumentum új változatai

A dokumentum új változata megtalálható a következő helyen:

http://www.oswg.org/oswg-nightly/DHCP.html

A DHCP mini-HOGYAN következő fordításai érhetők el:

Az engedélyt ezennel minden olyan személynek megadom, aki szeretné lefordítani ezt a dokumentumot a saját nyelvére. Mindössze azt kérem, hogy készíts egy hivatkozást erre a dokumentumra, valamint tudasd velem a fordításod URL címét, hogy itt közölhessem azt.


1.6. Magyar fordítás

A magyar fordítást Szíjjártó László készítette (2002.07.17). A lektorálást Kilián Magdolna végezte el (2003.01.22). Bármilyen fordítással kapcsolatos észrevételt a linuxhowto@sch.bme.hu címre küldjetek. A dokumentum legfrissebb változata megtalálható a Magyar Linux Dokumentációs Projekt honlapján.


2. A DHCP protokoll

Egy dinamikus, számítógépek beállítására szolgáló (Dinamic Host Configuration) protokoll. A kliensek legfontosabb hálózati beállításainak vezérlésére szolgál, a szerver segítségével. A DHCP visszafelé kompatibilis a BOOTP protokollal. További információért olvasd el az RFC 2131 (a régi RFC 1541) és más dokumentumokat. (Például a doksi végén található Internetes Források fejezetet). Ezen kívül ajánlatos elolvasni a http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html honlapot.

Ez a mini-HOGYAN mind a DHCP _SERVER_ démonnal, mind a DHCP _KLIENS_ démonnal foglalkozik. A legtöbb felhasználónak a kliens démonra van szüksége, amit a munkaállomások használnak arra, hogy a szervertől lekérjék a hálózati információkat. A szerver démont a rendszergazdák használják, hogy ezeket az információkat közzétegyék a hálózaton belül, ezért ha hétköznapi felhasználó vagy, akkor csak a _KLIENS_ démonra van szükséged.


3. A kliens beállítása

Jelenleg három különböző DHCP kliens létezik Linuxra: a dhcpcd, a pump és a dhclient. Ez a mini-HOGYAN elsősorban a dhcpcd démonnal foglalkozik.


3.2. Slackware

A DHCPcd program legutolsó változatát letöltheted egy Metalab tükörszerverről vagy a következő helyekről:

Töltsd le a dhcpcd.tar.gz legutolsó változatát.

  • Csomagold ki

    tar -zxvf dhcpcd-1.3.18pl1.tar.gz

  • Lépj be a létrejött könyvtárba és fordítsd le

    cd dhcpcd-1.3.18pl1

    make

  • Ezek után telepítsd (a következő parancsot rendszergazdaként futtasd)

    make install

Ez a parancs létrehozza a /etc/dhcpc könyvtárat, ahol a démon az információit tárolja, a dhcpcd bináris fájl pedig a /usr/sbin könyvtárba kerül.

Ahhoz, hogy a rendszer a induláskor a DHCP szolgáltatást elindítsa, gépeld be:

cd /etc/rc.d

mv rc.inet1 rc.inet1.OLD

Ez a régi beállítószkriptet átnevezi rc.inet1.OLD-ra. Ezek után el kell készítened az új rc.inet1 szkriptet. A következő kódrészletre van szükség:

#!/bin/sh
#
# rc.inet1      Ez a shell szkript indítja az alapértelmezett INET rendszert.

HOSTNAME=`cat /etc/HOSTNAME` #Ez talán nem szükséges, de én mindig
                             #benne hagyom.

# A loopback eszköz beállítása.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# HA ETHERNET KAPCSOLATOD VAN, használd a következő sorokat az eth0
# eszköz beállítására. Ha csak a loopback-et vagy SLIP-et használsz,
# ne hagyd meg a fájl további sorait.

/usr/sbin/dhcpcd

Mentsd el és indítsd újra a gépet.

Amikor kész vagy, ugorj az utolsó lépésre.


3.3. RedHat 6.x és Mandrake 6.x

A RedHat 6+ alatt a DHCPcd beállítása nagyon egyszerű. A grafikus felületen indítsd el a Control Panelt (ha nincs menüben, akkor X terminálról a control-panel paranccsal, majd:.

Figyelem: a RedHat 6.x verziók az alapértelmezettként nem a dhcpcd démont, hanem a pump kliens programot tartalmazzák. A telepítő CD tartalmazza a dhcpcd csomagot, ezért ha nincs szerencséd a pump programmal, próbáld a dhcpcd programot. Miután telepítetted (pl. rpm -i dhcpcd-1.3.17pl2-1.i386.rpm), néhány változtatást kell eszközölnöd.

Alexander Stevenson további megjegyzései :

Nem volt szerencsém a DHCPcd démonnal. Ami végül bejött, az a RedHat 6.0 pump programja volt, ami gondolom a többi RedHat verzióban is benne van. A következő parancsot használtam:

pump -i eth0 -h hostname

Mindegy, hogy a "hostname" mi volt, de e nélkül a szerver nem fog válaszolni.

Ezek után megváltoztattam a /sbin/ifup szkriptemet, hogy tükrözze a változást; az alapértelmezett verzió nem tartalmazta a -h kapcsolót, ezért nem is működött nálam.

Alapvetően, ha a linuxconf-ot használod, és a csatoló "DHCP"-re való átállítása után az nem működik, próbáld ki, hogy a "-h hostname" kapcsolót hozzáadod a pump sorához a /sbin/ifup szkriptben. Az enyém így néz ki:

...
if [ -n "$PUMP" ]; then
    echo -n "Determining IP information for $DEVICE..."
    if /sbin/pump -i $DEVICE -h hostname; then
        echo " done."
    else
        echo " failed."
        exit 1
    fi
else ...

Egy másik, még elegánsabb módszert a hostname mező hozzáadásához Aad van der Klaauw ajánlott:

Most állítok be egy átjárót otthon, be kell állítanom a MAC address-t a '-h hostname' használata nélkül. Ezért elhatároztam, hogy *nem* változtatom meg a szkriptet, hanem a konfigurációs fájlt használom. Az /etc/sysconfig/network-scripts/ifcfg-eth0 fájlhoz hozzáadtam a következő sorokat:

DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"

Ez túl fogja élni a frissítéseket, és szerintem ez egy "tiszta" módszer.

Ennyi az egész. Indítsd újra a gépet vagy add ki a /sbin/ifup eth0 parancsot.


3.7. LinuxPPC és MkLinux

A következő részt R. Shapiro írta:

Az "1999" (R5) kiadású LinuxPPC majdnem teljesen kompatibilis a RedHat 6-tal, egy kivétellel (lásd alább). Általánosságban a beállítás ugyanaz, mint a RedHat 6.x és Mandrake 6.x esetében.

A probléma az, hogy a RedHat 6 a pump klienst használja a DHCP-hez alapértelmezettként, ami viszont nem működik megbízhatóan a LinuxPPC alatt. A megoldáshoz telepítsd a legfrissebb Sergei Viznyuk-féle dhcpcd démont, és szerkeszd át az /sbin/ifup szkriptet, hogy a dhcpcd klienst használja a pump helyett.

Változtasd meg ezt:

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
     PUMP=true
 fi

 if [ -n "$PUMP" ]; then

erre:

 if [  "$BOOTPROTO" = bootp ]; then
       echo " done."
     else
       echo " failed."
       exit 1
     fi
 elif [ "$BOOTPROTO" = dhcp ]; then
     echo -n "Determining IP information for $DEVICE..."
     if /sbin/dhcpcd -d $DEVICE ; then
       if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then
           /etc/dhcpc/dhcpcd-${DEVICE}.exe
       fi

valamint ennek megfelelően a ifdown szkriptben, ezt:

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
....
fi

erre:

if [ "$BOOTPROTO" = bootp ]; then
fi

if [ "$BOOTPROTO" = dhcp ]; then
      if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then
              kill `cat /var/run/dhcpcd-${DEVICE}.pid`
              rm -f /var/run/dhcpcd-${DEVICE}.pid
      fi
fi

Egy működő PPC rpm a dhcpcd-hez megtalálható a LinuxPPC 1999 CD-n; egy kissé későbbi rpm pedig a "contrib" könyvtárban a ftp://ftp.linuxppc.org/ címen. A forráskódot - amelyből ez a csomag készült - megtalálod a ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz helyen.


3.8. Utolsó lépés

Miután a géped újraindult, a hálózati eszközödnek már működőképesnek kell lennie. Gépeld be: ifconfig.

Valami hasonlónak kell megjelennie a képernyőn:

          lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:302 errors:0 dropped:0 overruns:0 frame:0
          TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0

eth0      Link encap:Ethernet  HWaddr 00:20:AF:EE:05:45
          inet addr:24.128.53.102  Bcast:24.128.53.255  Mask:255.255.254.0
          ^^^^^^^^^^^^^^^^^^^^^^^
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24783 errors:1 dropped:1 overruns:0 frame:1
          TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96
          Interrupt:10 Base address:0x300 

Ha valamilyen normális számot látsz az inet addr mellett, akkor készen vagy. Ha azt látod: 0.0.0.0 , ne ess kétségbe, ez egy átmeneti beállítás, mielőtt a dhcpcd lekérné az IP címet. Ha néhány perc múlva is ezt látod, kérlek nézd meg a Hibaelhárítás fejezetet. A DHCPcd egy démon, és addig fut, míg a géped működik. Három óránként kapcsolatba lép a DHCP szerverrel, és próbálja megújítani az IP cím-kérést. Minden üzenetét a rendszernaplóban tárolja ( a Slakware-nél /var/adm/syslog, RedHat/OpenLinux esetén /var/log/syslog).

Még egy dolog. Meg kell adnod a névszervereidet is. Ezt kétféleképpen teheted meg; vagy megkérdezed a szolgáltatódat, hogy adja meg, és beírod az /etc/resolv.conf fájlba (pl. egy ilyen sort kell beírni: nameserver 1.2.3.4 - a ford.), vagy a DHCPcd fogja lekérni a szervertől a listát, és készít egy resolv.conf fájlt az /etc/dhcpc könyvtárban.

Én úgy döntöttem, hogy a DHCPcd resolv.conf fájlját használom:

Készíts biztonsági másolatot az /etc/resolv.conf fájlról: mv /etc/resolv.conf /etc/resolv.conf.OLD

Ha még nincs /etc/dhcpc könyvtárad, készíts egyet: mkdir /etc/dhcpc

Készíts egy hivatkozást (link) az /etc/dhcpc/resolv.conf fájlról az /etc/resolv.conf fájlra: ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf

Ha ez nem működne, próbáld ki a következőket (a megoldást ajánlotta Henrik Stoerner közreműködésével):

"Ezt az utolsó lépést csak azért csináltam , mert az én dhcpcd csomagom nem készítette el az /etc/dhcpc/resolv.conf fájlt. Az /etc/sysconfig/network-scripts/ifup fájlban a következőket módosítottam (nem szépségdíjas, de nekem működött):

elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
    echo -n "Using DHCP for ${DEVICE}... "
    /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}
    echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh

    if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
	^^^^
        echo "failed."
        exit 1

Ezt megváltoztattam erre:

elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
    echo -n "Using DHCP for ${DEVICE}... "
    /sbin/dhcpcd
    echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh

    if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
	^^^^^^
       echo "failed."
       exit 1

Megjegyzés

Jegyezd meg, hogy ott a ! (felkiáltójel) a következő sorban: if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];

Most dőlj hátra és örülj :-).


3.10. Hibaelhárítás

Ha követted a fenti lépéseket, és mégsem tudsz a hálózaton dolgozni, akkor íme néhány lehetséges megoldás:


3.11. Alternatív DHCP kliens (ISC dhclient)

Ha sehogy sem sikerült a dhcpcd démonnal kapcsolatot létesítened, kipróbálhatod az ISC dhclient programot. A dhclient hozzáférhető az ISC által kiadott DHCP disztribúcióban, és mind kliens, mind szerverprogramot tartalmaz. Arról, hogy hogyan szerezheted meg és fordíthatod le a szervert, itt olvashatsz. Amikor kész vagy, kérlek térj vissza ide a kliens beállítását illetően.

Megjegyzés

a következő információkat Ted Lemon a dhclient szerzőinek egyike adta közre.

A DHCP kliens jelenlegi verziójához igazándiból nem kell dhclient.conf fájl. Csak meg kell hívni a programot, például: /sbin/dhclient.

Ez minden broadcast eszközt beállít. Ha ez nem működik, vagy csak egyetlen eszközt akarsz megadni, készíts egy /etc/dhclient.conf fájlt ezzel a tartalommal:

interface "eth0" {
  send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx;
  send dhcp-lease-time 86400;
}

Feltételeztük, hogy az ethernet eszköz neve eth0. Ha nem, változtasd meg. Ezen kívül írd át a xx:xx.xx.xx.xx.xx jeleket az eszköz ethernet címére. Ez a dhclient.conf nagyon hasonlóvá teszi a klienst egy Win95 klienshez.


4. DHCP szerver beállítás

4.1. DHCP szerver UNIX rendszerekhez

Többféle DHCP szerver létezik a UN*X-szerű operációs rendszerekhez, mind pénzes, mind szabad felhasználású. Az egyik legnépszerűbb szabad szoftver a Paul Vixie/ISC- féle DHCPd. Jelenleg a legutolsó verzió a 2.0 (a legtöbb felhasználó számára javasolt), de a 3.0 is bétatesztelés alatt áll. Letöltheted a ftp://ftp.isc.org/isc/dhcp/ webhelyről.

Néhány Linux összeállítás tartalmazza a bináris dhcpd csomagot, ezért átugorhatod a következő részt, ha ezen a módon telepítetted.

Miután letöltötted, csomagold ki, majd lépj be a forráskönyvtárba. Itt add ki a ./configure parancsot.

Eltart egy kis ideig, amíg beállítja a dolgokat. Amikor kész, add ki a make, majd a make install parancsokat.


4.2. DHCP szerver beállítás

Miután kész a telepítés, add ki az ifconfig -a parancsot. Valami hasonlót kell látnod:

eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210

Ha nem látható a MULTICAST szó a kiírásban, újra kell fordítanod a kerneled, hogy benne legyen a támogatás. A legtöbb rendszeren azonban erre nincs szükség.

A következő lépés az útválasztás beállítása a 255.255.255.255 címre. Részlet a DHCPd README fájlból:

A válogatós DHCP kliensekkel (pl. Win95) való korrekt együttműködés érdekében a 255.255.255.255 címre is képesnek kell lennie csomagokat küldeni. Sajnos, a Linux ragaszkodik ahhoz, hogy a 255.255.255.255-öt a helyi broadcast címként állítsa be (itt ez 192.5.5.223). Ez a DHCP protokoll megsértése, és amíg a legtöbb DHCP kliens nem veszi észre a problémát, néhány (pl. az összes Microsoft kliens) igen. Az ilyen problémával küzdő kliensek nem "látják" a szervertől érkező "DHCPOFFER" üzeneteket.

Gépeld be: route add -host 255.255.255.255 dev eth0

Ha a "255.255.255.255: Unknown host" választ kapod, akkor próbáld meg a következő bejegyzést hozzáadni az /etc/hosts fájlhoz:

255.255.255.255 all-ones

Aztán pedig:

route add -host all-ones dev eth0

vagy

route add 255.255.255.0 dev eth0

Itt természetesen az eth0 a hálózati eszköz neve, ha nálad más, változtasd meg.


4.3. DHCPd beállítások

Most konfigurálni kell a DHCPd démont. Ennek érdekében meg kell csinálnod, vagy módosítanod kell az /etc/dhcpd.conf fájlt. Van ehhez grafikus program is a KDE alatt ( http://www.kde.org/ ), amit kcmdhcpd-nek hívnak és nagyon hasonlít a Windows NT beállítóprogramjára. A KDE 2.0 kiadásakor benne lesz a csomagban vagy letölthető az ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/ webhelyről.

Ha kézzel akarod konfigurálni a démont, akkor kövesd az alábbi utasításokat.

A legáltalánosabb esetben a címeket véletlenszerűen akarod kiosztani. Ez a következő beállításokkal elérhető:

# Sample /etc/dhcpd.conf
# (add your comments here) 
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;
}

Ez azt eredményezi, hogy a szerver a 192.168.1.10-192.168.1.100 vagy 192.168.1.150-192.168.1.200 tartományból fog IP címeket kiadni. 600 másodpercig biztosítja az IP címet, ha a kliens nem kér más időkeretet. Egyébként, a maximális (megengedett) "bérleti idő" 7200 mp. A szerver ezen kívül ajánlja, hogy a kliens a 255.255.255.0 alhálózati maszkot, a 192.168.1.255-ös broadcast címet, a 192.168.1.254-et, mint a router címét és a 192.168.1.1 és 192.168.1.2 című névszervereket használja.

Ha WINS szervert kell a Windows kliensek számára megadni, akkor beszúrhatod még a netbios-name-servers beállítást is, például:

option netbios-name-servers 192.168.1.1;

Ezen kívül specifikus IP címeket adhatsz meg, amik a kliens hálókártyájának ethernet címén alapulnak, például:

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

Ez a példa a 192.168.1.122 címet osztja ki a 08:00:2b:4c:59:23 ethernet azonosítójú kártyával rendelkező kliensnek.

Ezeket keverheted is, például ha van néhány kliens aminek fix IP cím kell, másoknak pedig (pl. laptopos felhasználók) dinamikus címkiosztás. Egy csomó más lehetőség is van, például NIS szerver címek, időszerverek címei stb. Ha bármelyikre szükséged van, olvasd el a dhcpd.conf kézikönyv oldalt.


4.4. A szerver indítása

Egy dolgot kell tenned, mielőtt a szervert indítanád. A legtöbb esetben a DHCP telepítés nem készíti el a dhcpd.leases . Ezt a szerver használja abból a célból, hogy tárolja az aktuális kiosztási információkat. Ez sima szöveges formátumú, tehát a démon működése közben is megnézheted a tartalmát. A dhcpd.leases elkészítéséhez gépeld be:
touch /var/state/dhcp/dhcpd.leases

Ez egy üres fájlt készít (méret = 0). Néhány régebbi 2.0-ás szerververzió /etc/dhcpd.leases fájlt igényel. Neked nem kell semmit sem tenned a fájllal, ezt a dhcpd kezeli. Ha olyan hibaüzenetet kapsz, hogy a fájl már létezik, simán figyelmen kívül hagyhatod és menj a következő lépésre.

Most már indíthatod a DHCP szervert. Gépeld be (vagy rakd be az indítószkriptekbe):

/usr/sbin/dhcpd

Ez az eth0 eszközön elindítja a szervert. Ha más eszközre akarod felhúzni, akkor add meg a parancssorban, például:

/usr/sbin/dhcpd eth1

Ellenőrzési és hibakeresési célból először "debug" módban és előtérben futtatva indítsd el, ezt így teheted meg:

/usr/sbin/dhcpd -d -f

Ezek után indítsd el az egyik kliensedet, és figyeld a szerver konzolját. Számos hibaellenőrző üzenetet fogsz látni. Ha minden működik, akkor kész vagy :) Állítsd le a dhcpd-t és indítsd újra -d és -f paraméter nélkül. Ha rendszerinduláskor is el akarod indítani, akkor tedd be például az
/etc/rc.d/rc.local
fájlba (vagy inkább a szabványos indítási folyamatba - a ford.)


4.5. Egyéb érdekes olvasnivalók

A Linux Magazine egy nagyon jó cikket közöl egyik számában Network Nirvana: How to make Network Configuration as easy as DHCP (Hálózati Mennyország: Hogyan végezzük el hálózati beállításainkat könnyedén) címmel. ami a DHCP beállítását taglalja.