DHCP

A Unix/Linux szerverek üzemeltetése wikiből

Írta: Téchy Zoltán, 2007. márciusában

Tartalomjegyzék

1 DHCP

A Dynamic Host Configuration Protocol elsősorban arra szolgál, hogy hostok egyedi címeket kaphassanak a hálózaton. Pillanatnyi levegővétel után el lehet azon merengeni, hogy jelen esetben a 'host' elnevezés alatt mi minden is érthető: érthetünk alatta egy PC-t, IP-telefont, Access Pointot stb. Egyre kevésbé lepődünk meg a különféle hálózati interfészekkel végrehajtott mutatványokon, és így egyre hálátlanabb feladat lenne ékes anyanyelvünkön mindent lefedő kifejezést találni. Gyakorlati jelentősége úgyis inkább az egyediségnek van: a kézi konfiguráció a hostok számának növekedésével egyre körülményesebbé, a hibák elkerülésének a szempontjából pedig egyre bizonytalanabbá válik.

A protokoll lehetővé teszi, hogy ún. opciók segítségével további információkat is közöljünk a hostokkal; a használhatóság nem kis részben innen fakad. Opciók lehetnek az általában elvárt default gateway, névfeloldáshoz használandó DNS szerver IP-címei; érdemes tudni, hogy a lista meglepően hosszú, és például arra is "megkérhetünk" hostot, hogy az ip forwarding bekapcsolásával kezdjen el routerként üzemelni.

1.1 A felhasználás leggyakoribb módja

Legegyszerűbb esetben annyit szoktunk egy DHCP szervertől elvárni, hogy IP-címet, default gateway IP-címét, DNS szerver IP címét legyen képes átadni egy hostnak. Ha precízek akarunk lenni, akkor tartsuk észben: a DHCP kliensnek, amit a host futtat.

1.2 A működés elve

A DHCP broadcast-alapú protokoll, leegyszerűsítve úgy működik, hogy a host "belekiabál" (=broadcast) a hálózatba, hogy címet kér. A DHCP szerver feladata az ilyen kérésekre figyelni, és IP-címet, továbbá -nem kötelező, de praktikusan mindig használt- opciókat ajánlani a hosztnak.

A címek kiosztása csak bizonyos ideig érvényes, ezt az időt a szerver(t konfiguráló személy) határozza meg. Ha az ún "dhcp lease" érvényessége lejárt, akkor a kliensnek el kell dobnia az IP-címét, és újat kell igényelnie.

1.3 A három fontos szereplő: szerver, kliens(ek), relay agent

A DHCP szervert a dhcp csomag tartalmazza. Azért felel, hogy a DHCP kliensek kéréseire figyeljen és a konfigurációnak (erről lesz még szó) megfelelően kiszolgálja azokat.

Kliensből többféle közül válogathatunk: dhcpcd, pump, udhcpc, dhclient. Amennyiben nincs semmi speciális igényünk, akkor válasszuk a dhcpcd-t, esetleg a pump-ot.

Magyarázatot a relay agent igényelhet. Fontos tudni, hogy a DHCP broadcast-alapú protokoll, következésképp a DHCP szerver csak egy broadcast domainen belül képes a kéréseket kiszolgálni. Broadcast domainek a hálózatnak azok a részei, ahol érvényesek a broadcast üzenetek. Broadcast üzeneteket routerek nem továbbítanak; egyszerűen összekötött switchek viszont broadcast domaineket fognak alkotni. (Kitérő: a hálózatok annál hatékonyabban működnek, minél kisebbek a broadcast domainek. Egyre népszerűbb sportág a LAN-okat VLAN szegmensekre szegmentálni -ha kell, ha nem-. Fontos tudni, hogy a VLAN-ok külön broadcast domaineket alkotnak.)

Térjünk vissza a relay agent magyarázatára. A hálózatunk nagyon könnyen állhat több különálló broadcast domainből, például távoli fiókirodák vagy VLAN-okra szegmentált helyi hálózat esetén általában ez a helyzet. (Kivéve, ha L2TP vagy "tap" drivert használó VPN megoldást használunk. Ez általában nem cél.) Az egyes broadcast domainekbe telepíthetünk külön DHCP szervereket, vagy alkalmazhatjuk a "dhcp relay" néven ismert technikát: a relay agent azért felel, hogy a DHCP kéréseket unicastként továbbítsa a -számára ismert- DHCP szerver felé. A szerver az agentnek fog válaszolni (címet, opciókat ajánlani), aki a kérést elindító hostnak továbbadja a választ. A DHCP relaying elegánsabb megoldás, mint külön DHCP szervereket alkalmazni; központilag adminisztrálható lesz a címek kiosztása, a hálózatüzemeltetők is nyugodtabbak (az egy -fogalmi- hálózaton elhelyezett második DHCP szerver sokakban babonás félelmeket kelt), a hálózati aktív eszközök "dhcp relay" vagy "ip helper" néven szoktak relay agentet tartalmazni. A dhcp csomag is tartalmaz egy relay agentet, ennek neve dhcrelay.

1.4 Szerver telepítése

A szerver telepítésére kérjük meg a csomagkezelőt: Debianon ez az
 apt-get install dhcp3-server 
parancs kiadásával történik, Gentoo alatt az
 emerge dhcp 
jár hasonló eredménnyel. Fontosabb tudnivaló, hogy a lease-eket tartalmazó file-t kézzel kell létrehoznunk, ne felejtsük el!
touch /var/lib/dhcp/dhcpd.leases
A szerver telepítésével végeztünk is, két lépés maradt hátra: konfigurálnunk kell azt (ehhez rövid bevezetést a következő fejezet tartalmaz), továbbá érdemes megoldani, hogy a szerver (ettől a ponttól nevezzük is nevén: dhcpd, a.k.a. dhcp daemon) automatikusan fusson a szerver-PC indításakor. Ezt Gentoo-specifikusan az
 rc-update add dhcpd default 
paranccsal érhetjük el.

Kitérő: a Gentoo Linux init-rendszere nagyon egyszerűen kezelhető a fentebb leírt rc-update parancs segítségével. Ha ennél kicsit kifinomultabbat szeretnénk (például daemontoolst), akkor sem bonyolult a dolgunk:

 
emerge daemontools 
rc-update add svscan boot 

Innentől ha azt szeretnénk, hogy egy adott szolgáltatást a daemontools felügyeljen, akkor átadhatjuk annak.

1.5 Példa-konfiguráció

A konfiguráció szerkesztése az /etc/dhcp/dhcpd.conf fileban történik. Egyszerűbb, mint gondolnánk; a következőkben alapesetekre foguk példát látni.

 

# dhcpd.conf
#
# option definitions common to all supported networks...
# option domain-name "example.org";
# option domain-name-servers ns1.example.org, ns2.example.org;



ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

#### Eddig tartott a globalis konfiguracio 

A különböző kiosztandó tartományokra vonatkozó információkat a subnet felkiáltással kezdve, fűzzük hozzá ugyanehhez a filehoz.

 
# Subnet for AP 2620's.

subnet 26.20.1.0 netmask 255.255.255.0 {
        host AP1 {hardware ethernet 00:0F:BB:09:10:91;
                  fixed-address 26.20.1.1;      }
        host AP2 {hardware ethernet 00:0F:BB:09:10:92;
                  fixed-address 26.20.1.2;      }
#       host T_NB {hardware ethernet 00:A0:D1:29:23:39;
#                 fixed-address 26.20.1.3;      }

        range 26.20.1.100 26.20.1.150;
        option routers 26.20.1.254;
        option slp-directory-agent true 10.1.1.4;
}

Mi is történt itt? Kijelöltük a 26.20.1.0/24 alhálózatot (innen osztunk címeket), majd ebben definiáltunk három hostot, akiknek fixen akarunk címeket osztani, a MAC-címük alapján. Ebből a harmadik ki van kommentezve. Ezen felül kijelöltük (a range felkiáltással) egy tartományt a 26.20.1.100-tól 26.20.1.150-ig, ahová nagy szeretettel várjuk a további hostokat. Látunk példát két opció használatára is: routers alatt adhatjuk át a default gateway IP-címét (de egynél többet is megadhatunk). Az SLP directory agent opció esetén általánosan is látjuk egy opció felvételének menetét:

Az option után kötőjelekkel leírjuk az opció nevét. Ezt követik az opciónak megfelelő értékek, amik lehetnek flagek (true/false), boolean értékek (ismét true/false), stringek, IP-címek, számok (uint). Erről szerencsére elég jól érthető man oldalt találunk:

man dhcp-options

Érdemes megnézni, meglepő mennyiségben állnak rendelkezésre opciók. Megkérhetünk vele hostot, hogy váltson router üzemmódba, felvetethetünk statikus route-okat, smtp és pop szerverek címeit adhatjuk át stb.

A következőkben három kijelölt subnetet láthatunk (amiből az egyik ki van kapcsolva). Általános esetben ennél részletesebb konfigurációra nincs is szükség.

## Subnet for optiPoint telephones
#
#subnet 15.1.1.0 netmask 255.255.255.0 {
#  range 15.1.1.1 15.1.1.253;
#  option routers 15.1.1.254;
#}


# Subnet wireless experiments
subnet 192.168.3.0 netmask 255.255.255.0 {
        range 192.168.3.1 192.168.3.250;
        option routers 192.168.3.254;
        option domain-name-servers 192.168.5.1;
}


# Home, sweet home
subnet 192.168.5.0 netmask 255.255.255.0 {
        range 192.168.5.1 192.168.5.250;
        option routers 192.168.5.254;
}

1.6 Biztonság

DHCP spoofing

Mindenképpen tartsuk észben, hogy a DHCP szerver egyszerűen használható eszköz és gyakorlatilag egyedül képes a hostok interfészeit L3 szinten konfigurálni. Így egy címet kérő hostnak nyugodtan lehet olyat mondani, hogy a -normálisan használt- x.x.x.0 hálózat helyett ő legyen csak az x.x.y.0 hálózatban, a default gateway pedig majd a gonosz támadó PC-je lesz. Esetleg a DNS szerver is. Erre point'n click eszköz is létezik, ilyen például az ettercap. Nagyon kellemetlen lehet.

Személyes eszközök