Pokročilé možnosti DHCP serveru v Cisco IOS Vladimír Jarotek Abstrakt: Cílem tohoto projektu je prozkoumání možností DHCP serveru a relay agenta v CISCO IOS Klíčová slova: Cisco, IOS, DHCP server, relay agent 1 Cisco IOS.........................................................................................2 2 CISCO IOS DHCP server.................................................................2 2.1 Backup DHCP server.................................................................3 2.2 Manuální přidělení IP adresy klientovi (manual binding).........5 3 Relay agent.....................................................................................5 Závěr...................................................................................................7
březen 2009
1/8
1 Cisco IOS IOS je zkratka pro Internetwork Operating System, což je operační systém, který používá většina přepínačů a routerů firmy Cisco. IOS je propracovaný a na míru provedený systém, nabízí velké množství možností pro konfiguraci, je to vlastně balíček směrovacích, přepínacích, propojovacích a telekomunikačních funkcí pevně integrovan do multitaskingového operačního systému. Celý IOS je uložen v jednom image souboru.
2 CISCO IOS DHCP server CISCO IOS DHCP server je úplná implementace DHCP serveru, která přiřazuje a spravuje IP adresy z konkrétního adresového poolu směrem k DHCP klientům. Jestliže CISCO IOS DHCP server nemůže vyhovět DHCP žádosti z vlastní databáze, může přeposlat požadavek k jinému DHCP serveru. Požadavek DHCP klienta na IP adresu z DHCP serveru je ukázán na obr. 1. Zdroj: http://cco.cisco.com/en/US/docs/ios/12_0t/12_0t1/feature/guide/Easyip2.html.
Obr. 1 Klient, na obrázku označený jako Host A pošle DHCPDISCOVER broadcast zprávu aby lokalizoval DHCP Server. DHCP Server nabídne nastavení (jako například IP adresu, MAC adresu, adresu DNS serveru, dobu platnosti přiřazené IP adresy, atd.) klientovi v DHCPOFFER unicastové zprávě. Celý proces přiřazování IP adresy DHCP serverem klientovi zachycený wiresharkem na obr.2.
březen 2009
2/8
Obr. 2
Jak je vidět na výpisu z wiresharku, navazování spojení probíhá tímto způsobem: 1)klient pošle DHCPDISCOVER zprávu jako broadcast 2)v případě, že je dostupný nějaký DHCP server, nabídne klientovi IP adresu, tentokrát už ale pomocí unicastu 3)klient opět pomocí broadcastu pošle žádost o nabízenou IP adresu 4)DHCP server pomocí unicastu potvrdí klientovi že mu byla tato adresa vyhrazena
2.1 Backup DHCP server Cílem bylo testovat, zda dva stejně nastavené DHCP servery na stejném segmentu budou, v případě výpadku jednoho z nich, fungovat jeden druhému jako záložní. Na topologii (obr. 3) bylo zkoušeno základní nastevení DHCP serveru. Oba routery vystupující jako DHCP servery byly připojeny na stejný segment sítě tak, aby jeden druhému vždy fungoval jako záložní a bylo zkoušeno jak se budou chovat, když náhodně jeden z nich přestane fungovat. To znamená, jestli nebude po pádu jednoho z nich ten druhý přidělovat rozsah adres, které např. už předtím přidělil ten první.
Obr. 3
Nastavení obou routerů: DHCP server RA dhcp service ip dhcp excludded address 10.0.0.1 10.0.0.2 ip dhcp pool mypool (ip-dhcp)#network 10.0.0.0 255.255.255.0 (ip-dhcp)#default-router 10.0.0.0 (ip-dhcp)#lease 0 0 5 interface fastethernet 0/0 ip address 10.0.0.1 255.255.255.0 no shutdown
březen 2009
3/8
DHCP server RB dhcp service ip dhcp excludded address 10.0.0.1 10.0.0.2 ip dhcp pool mypool (ip-dhcp)#network 10.0.0.0 255.255.255.0 (ip-dhcp)#default-router 10.0.0.0 (ip-dhcp)#lease 0 0 5 interface fastethernet 0/0 ip address 10.0.0.2 255.255.255.0 no shutdown
Příkaz dhcp service slouží pro spuštění DHCP služby na CISCO routeru, implicitně je však spuštěna. ip dhcp excludded address zajistí, že nebudou přidělovány IP adresy rozhraní, které používají oba DHCP servery. ip dhcp pool vytvoří název poolu adres, které budou pidělovány dhcp klientům. Další příkaz network určí rozsah přidělovaných adres. Default-router, v tomto případě určuje, na kterém interface bude DHCP server s klienty komunikovat. Příkazem lease určujeme dobu pronájmu IP adresy. V případě, že se zadá ve tvaru např lease 1, znamená to dobu poronájmu na jeden den. Ve formátu x y z je potom význam x – dny, y – hodiny a z - minuty. Použití tohoto příkazu však neznamenalo žádné změny, ikdyž byla doba pronájmu nastavena na 1 minutu, nedošlo po vypršení této doby k přidělení nové adresy. Průběh testování: Jako první byl připojen pouze 1 klient CA a 1 DHCP server RA. Poté, co první klient CA dostal IP adresu 10.0.0.3, byl DHCP server RA odpojen a připojen druhý DHCP server RB (proto, aby nemohl vědět, které ip adresy již přidělil první DHCP server RA) a teprve poté druhý DHCP klient CB. Druhý DHCP server správně přeskočil již přidělenou adresu a klient CB dostal 10.0.0.4. Tohle správné přidělení adres je způsobeno nastavením ip dhcp ping packets. Poté co se připojil do sítě druhý DHCP server RB, ještě před přidělením IP adresy klientovi CB vykonal ping na celý pool, neboli rozsah adres, a zjistil že adresa, kterou by za normálních okolností přidělil již přidělená je. K tomu slouží právě tyto dva zmíněné příkazy: ip dhcp ping packets – určuje kolikrát pošle DHCP server ping na celý rozsah adres, nastavuje se v rozmezí 0 – 10. Tento ping se provádí před každým DHCP OFFER (nabídnutím IP adresy klientovi) ip dhcp ping timeout – určuje jak dlouho bude DHCP server čekat na odezvu svého pingu, nastavuje se v rozmezí 100 – 10000 ms Co se týče toho, ze kterého DHCP serveru klient dostane adresu záleží pouze na tom, který odpoví jako první. Pomocí příkazu debug ip dhcp server packets na straně serveru je možné vidět také jak klient získává IP adresu z DHCP serveru: *Mar 1 00:03:01.447: DHCPD: DHCPDISCOVER received from client 0063.6973.636f.2d žel zprávu od klienta, pomocí 63.6330.352e.3063.6430.2e30.3030.302d.4661.302f.30 on interface FastEthernet0/0. zjistit, zda je dorupný nějaký *Mar 1 00:03:01.451: DHCPD: Allocate an address without class information (10.0 .0.0)
březen 2009
//DHCP server obdrkteré se klient snaží DHCP server
4/8
*Mar 1 00:03:03.451: DHCPD: Sending DHCPOFFER to client 0063.6973.636f.2d63.633 kientovi IP adresu ze svého 0.352e.3063.6430.2e30.3030.302d.4661.302f.30 (10.0.0.7). rozsahu *Mar 1 00:03:03.451: DHCPD: broadcasting BOOTREPLY to client cc05.0cd0.0000. *Mar 1 00:03:03.559: DHCPD: DHCPREQUEST received from client 0063.6973.636f.2d6 enta na nabízenou adresu 3.6330.352e.3063.6430.2e30.3030.302d.4661.302f.30. *Mar 1 00:03:03.563: DHCPD: No default domain to append - abort update *Mar 1 00:03:03.563: DHCPD: Sending DHCPACK to client 0063.6973.636f.2d63.6330. na přidělení adresy (10.0.0.7) 352e.3063.6430.2e30.3030.302d.4661.302f.30 (10.0.0.7). *Mar 1 00:03:03.563: DHCPD: broadcasting BOOTREPLY to client cc05.0cd0.0000.
//DHCP server nabízí (10.0.0.7) //DHCP požadavek kli(10.0.0.7) //Potvrzení
klientovi
Ukázka výpisu pomocí příkazu debug dhcp přidělení IP adresy na straně klienta: *Mar 1 00:03:03.135: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state t o up *Mar 1 00:03:03.507: DHCP: Received a BOOTREP pkt //Obdržení odpovědi od DHCP serveru *Mar 1 00:03:03.507: DHCP: offer received from 10.0.0.1 //Informace z jaké IP adresy nabídka přišla *Mar 1 00:03:03.511: DHCP: SRequest attempt # 1 for entry: *Mar 1 00:03:03.511: DHCP: SRequest- Server ID option: 10.0.0.1 *Mar 1 00:03:03.511: DHCP: SRequest- Requested IP addr option: 10.0.0.7 //Požadavek na přidělenou adresu 10.0.0.7 *Mar 1 00:03:03.511: DHCP: SRequest placed lease len option: 60 //Doba pronájmu IP adresy určená DHCP serverem *Mar 1 00:03:03.515: DHCP: SRequest: 313 bytes *Mar 1 00:03:03.515: DHCP: SRequest: 313 bytes *Mar 1 00:03:03.515: B'cast on FastEthernet0/0 interface from 0.0.0 .0 *Mar 1 00:03:07.711: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned //přidělení IP adresy na interface FE 0/0 DHCP address 10.0.0.7, mask 255.255.255.0, hostname Router
Ikdyž je všechno v pořádku, klient (s IP adresou 10.0.0.6) se i přesto zhruba co 30 sekund doptává DHCP serveru (s IP adresou 10.0.0.1), zda je jeho IP adresa platná. Je to vidět na výpisu z programu Wireshark, obr. 4, kde se tyto dvě zprávy opakují. Ve výpisu
Obr. 4 Několik dalších užitečných příkazů: - clear ip dhcp binding – vymaže záznamy o automaticky přidělených adresách - debug ip dhcp server events – hlásí události na serveru (přidělování adres) - debug ip dhcp server packets – zobrazí DHCP přenosy - dns-server – informace o IP adrese DNS serveru předávána klientovi - show ip dhcp binding – vypíše seznam přidělených IP adres, seznam MAC adres, čas kdy dojde k vypršení platnosti a způsob přidělení(automatické nebo ruční) - show ip dhcp conflict – v případě, že je zapnuto logování, pomocí příkazu ip dhcp conflict logging, vypíše seznam adres, u kterých došlo ke konfliktu
2.2 Manuální přidělení IP adresy klientovi (manual binding) Manuální přidělení IP adresy klientovi, je mapování mezi IP adresou a Mac adresou klienta. Klient musí být nalezen v DHCP databázi. Ta je uložena v NVRAM DHCP serveru. Nejprve se pomocí ip dhcp pool vytvoří rozsah adres. Pomocí příkazu host se nastaví ip adresa klienta. Pomocí hardware-address se nastaví mac adresa klienta, kterému bude IP adresa přidělena. Dále je možno použít volitelný příkaz client-name pomocí kterého lze přidělit řetězec znaků, popisující klienta.
březen 2009
5/8
1 Relay agent DHCP relay agent je host, který přeposílá DHCP zprávy mezi klientem a serverem. Relay agent je používán pro přeposílání požadavků a odpovědí mezi klientem a serverem, když DHCP server a klient nejsou na stejné podsíti. Když relay agent dostane na jednom interface DHCP zprávu, tak vygeneruje novou DHCP zprávu a pošle ji na jiný interface (jedná se o konkrétní interface, jako unicast, určený konfigurací). Při přeposílání DHCP požadavku, relay agent přidá informaci (option 82) do paketu a pošle ho k DHCP serveru. Odpověď DHCP serveru zpátky klientovi je poslána opět po odstranění této informace z paketu (option 82). Option 82 je definován v RFC 3046. Relay agent přidá do tohoto nastavení tři informace. 1)Circuit ID – jedná se o informaci, z jakého portu přišel požadavek. Může obsahovat další informace, například ID Vlany 2)Remote ID – je mac adresa relay agenta 3)GiAddr – je IP adresa relay agenta
březen 2009
6/8
Topologie pro testování relay agenta:
Obr. 5 Router RA vystupuje v roli DHCP serveru, router RB vystupuje v roli relay agenta. CA a CB jsou klienti. Klienti broadcastují požadavek v segmentu ve kterém se nacházejí. Router RB převezme broadcast z této sítě a vytvoří nový DHCP požadavek, který pošle, tentokrát již jako unicast, do sítě 10.0.1.0 255.255.255.0 na interface určený helper adresou. Současně vloží IP adresu interfacu (součást Option 82), ze kterého požadavek převzal. Tato informace pomůže DHCP serveru, o kterou podsíť se jedná (kombinací prvního a třetího podnastavení Option 82). V případě používíní více rozsahů na DHCP serveru, je možné určit, který použít. Nastavení routerů Router RB interface FastEthernet 0/0 ip address 10.0.1.2 255.255.255.0 no shutdown interface FastEthernet 0/1 ip helper-address 10.0.1.1 ip address 10.0.0.1 255.255.255.0 no shutdown Router RA dhcp service ip dhcp excluded address 10.0.0.1 ip dhcp pool mypool (ip-dhcp)#network 10.0.0.0 255.255.255.0 (ip-dhcp)#default-router 10.0.0.0 (ip-dhcp)#lease 0 0 5 interface fastethernet 0/0 ip address 10.0.1.1 255.255.255.0 březen 2009
7/8
no shutdown
V případě routeru RB příkaz ip helper-address je nastaven na interface, na kterém je očekáván požadavek IP adresy klientů a dále adresa DHCP serveru, kam bude tento požadavek poslán. V případě že chceme přistupovat přes jinou síť, je možné přidat na interface, odkud chodí požadavky klientů, další adresy pomocí ip address a poté pomocí příkazu ip dhcp smart-relay nastavit aby v případě 3 pokusů o dotázání DHCP serveru, byla použita další adresa rozhranní pro přeposlání požadavků, když s použitím jedné, nedostaneme z DHCP serveru žádnou zprávu. ip helperaddress můžeme nastavit buď na IP adresu rozhraní nebo na adresu sítě. Druhou možnost provedeme v případě že se na jednom segmentu nachází více DHCP serverů. Pokud je mezi klientskou sítí a DHCP serverem více než jeden relay agent, je třeba pomocí příkazu ip dhcp relay information option povolit přidávání informace (option 82) do již jednou přeposíláného požadavku.
Závěr Ověřování první části, tj. CISCO IOS DHCP server bylo prováděno ve školní laboratoři na CISCO směrovačích 2801. Problém na který jsme narazil, bylo při nastavování propůjčení adresy příkazem lease, protože při jakémkoliv nastavení nebyla nikdy adresa po uplynutí doby přidělena další. Je to možné, že bylo ještě něco zapomenuto nastavit, ale i při procházení dokumentace jsem nic nenašel. Dále bylo zvláštní že po použití příkazu clear ip dhcp binding, sloužící pro vymázání informací DHCP serveru o přidělených adresách, byla všem klientům po novém požadavku přidělena nová IP adresa z rozsahu, která dříve přidělena nebyla. Část s relay agentem byla testována pomocí emulátoru GNS3 za použití směrovačů CISCO 3600.
březen 2009
8/8