Konfigurace DHCP Serveru
DHCP server, tedy dynamické přidělování adres, je služba, která je součástí většiny dnešních Catalyst switchů (nebo lépe řečeno dnešních verzí IOSu) a také routerů. V defaultním nastavení je tato služba zapnuta, ale nemá nastaveny žádné parametry, takže adresy nepřiděluje.
SWITCH(config)#service dhcp // zapne DHCP server (defaultně je zapnutý)
Konfigurace adresního poolu
Aby se mohly přidělovat adresy, tak musíme vytvořit DHCP Pool a nastavit mu požadované parametry. Těchto Poolů můžeme vytvořit několik, běžně pro každou VLAN, v které chceme přidělovat adresy.
SWITCH(config)#ip dhcp pool net1 // vytvoří pool se jménem net1
Vytvořením pojmenovaného Poolu se dostaneme do DHCP konfiguračního módu a nastavujeme jeho parametry.
SWITCH(dhcp-config)#network 192.168.190.0 255.255.255.0 // nastaví adresní rozsah, můžeme zadat nejen pomocí masky, ale i pomocí CIDR (takže třeba /24) SWITCH(dhcp-config)#default-router 192.168.190.1 // adresa brány SWITCH(dhcp-config)#domain-name mydomain.tld // nastavení DNS jména domény na mydomain.tld SWITCH(dhcp-config)#dns-server 192.168.190.9 192.168.190.8 // adresy DNS serverů (můžeme zadat 1 až 8 adres) SWITCH(dhcp-config)#netbios-name-server 192.168.190.9 // adresy WINS serverů (opět jich můžeme zadat až 8) SWITCH(dhcp-config)#netbios-node-type h-node // typ pro Netbios, pro MS klienty musíme zadat Hybridní SWITCH(dhcp-config)#lease 30 // pronájem adresy na 30 dní, pokud chceme zadat menší čas, tak je formát den hodina minuta (tedy třeba 0 0 10 = 10 minut) SWITCH(dhcp-config)#option 150 ip 192.168.190.20 // můžeme definovat take libovolnou ze speciálních vlastností, které může přidělovat DHCP server klientovi, zde příklad adresy TFTP serveru pro Cisco IP telefonii
Vyloučení adres
Většinou nechceme přidělovat adresy z celého rozsahu subnetu, proto můžeme nastavit vyloučené (nepřidělované) adresy.
SWITCH(config)#ip dhcp excluded-address 192.168.190.0 192.168.190.10 // vyloučí adresy 0 až 10 z přidělování
Rezervace adresy
Další běžnou vlastností DHCP serveru je možno rezervovat nějakou adresu pro určitý počítač podle jeho MAC adresy, ten když si pak zažádá o IP adresu, dostane vždy tuto rezervovanou. Na Ciscu se musí pro každou rezervaci vytvořit vlastní Pool.
SWITCH(config)#ip dhcp pool client1 // vytvoří pool se jménem client1 SWITCH(dhcp-config)#client-name wbouskap // nepovinné jméno klienta bez domény SWITCH(dhcp-config)#host 192.168.190.9 255.255.255.0 // adresa pro klienta spolu se subnetem (maska nebo CIDR) SWITCH(dhcp-config)#hardware-address 0012.1759.b073 ieee802 // MAC adresa a typ protocol, slouží pro BOOTP žádosti // nebo klientský identifikátor pro Microsoft klienty (DHCP) SWITCH(dhcp-config)#client-identifier 0100.1217.59b0.73 // MAC adresa před kterou je typ media, 01 je pro Ethernet a tečka se posouvá
Pozn.: Protože se informace dědí, tak nemusíme při rezervaci zadávat všechny parametry, ale automaticky se doplní ty z patřičného poolu.
Jak se přiřazuje Pool k VLANě
Někdo by se mohl zamýšlet nad tím, když mám několik DHCP Poolů, tak podle čeho se přiřazují adresy různým žádostem. Používá se jednoduchá a běžná metoda (podobně jako třeba u MS DHCP serveru).
Server se podívá na adresu interfacu, z kterého přišla žádost a podle ní dohledá odpovídající Pool, z něj pak přidělí adresu. Pokud by takový neexistoval, tak je žádost ignorována. Z toho plyne důležitá vlastnost. Každá VLANa, v které chceme přidělovat adresy, musí mít nastavenu svoji IP adresu (na switchi, kde běží DHCP služba).
Informace z DHCP serveru
Když se přidělí IP adresa nějakému počítači, tak se o tom vytvoří záznam, který se označuje jako DHCP Binding a obsahuje IP adresu a MAC adresu (a další parametry).
SWITCH#show ip dhcp bindings // seznam přidělených adres SWITCH#clear ip dhcp bindings // vymaže seznam SWITCH#show ip dhcp conflicts // seznam konfliktů SWITCH#clear ip dhcp conflicts // vymaže seznam konfliktů SWITCH#show ip dhcp pool // informace o poolu SWITCH#show ip dhcp server statistics // statistiky serveru
V případě problémů můžeme ladit komunikaci zapnutím debuggingu.
SWITCH#debug ip dhcp server packets SWITCH#debug ip dhcp server events
Posloupnost zasílaných paketů je:
- klient DHCPDISCOVER
- server DHCPOFFER
- klient DHCPREQUEST
- server DHCPACK
Adresa switche z DHCP
Trošku bokem, ale patřící k DHCP, je i možnost, aby si switch požádal o adresu z DHCP serveru. V praxi bych však doporučoval nastavovat adresu napevno.
SWITCH(config-if)#ip address dhcp // interface dostane adresu z DHCP
DHCP Relay Agent
Žádost o adresu z DHCP probíhá pomocí broadcastu, to znamená, že DHCP server musí být na stejném subnetu jako klient. Což je v praxi často nepohodlné (například chceme mít pouze jeden centrální DHCP server). Proto je možno využít DHCP Relay Agenta, který běží typicky na routeru (což je v lokální síti většinou switch). Ten přijme DHCP požadavek a již jako unicast jej pošle určenému DHCP serveru. A opačně zpracuje odpověď.
Pozn.: Aby fungoval DHCP Relay Agent, tak samozřejmě musí běžet DHCP server, ten je defaultně zapnutý.
Takže Relay Agent nám běží, ale aby začal skutečně fungovat, tak mu musíme nastavit adresu DHCP serveru, kterému má přeposílat požadavky. Této adrese se na Ciscu říká helper address. A protože můžeme mít několik DHCP serverů nebo pro některé subnety provozovat server na switchi, tak tuto adresu nenastavujeme globálně, ale pro interface, což je nejčastěji VLANa. Důležitým požadavkem je, aby tento interface (VLANa) měl nastavenu IP adresu.
SWITCH(config-if)#ip helper-address 192.168.10.10 // adresa serveru, kterému se budou přeposílat DHCP dotazy nebo síťová adresa
Helper address slouží k přeposílání UDP broadcastů, které jsou přijaty na interfacu. Může fungovat pro libovolný UDP port, defaultně pro BOOTP (obsahuje DHCP 67, 68), DNS (53), time service (37), TFTP (69), TACAS (49), NetBIOS (137, 138), IEN-116 name (42).
DHCP Snooping
DHCP Snooping je součástí novějších verzí IOSu. Jedná se o bezpečnostní funkci, která filtruje nedůvěryhodné DHCP zprávy.
Myšlenka je taková, že po zapnutí jsou všechny porty brány jako nedůvěryhodné (untrusted) a my nastavujeme některé jako důvěryhodné (trusted). Jako důvěryhodný musíme nastavit port kam je připojen DHCP server a pak porty, kterými jsou propojeny switche (trunky). Pokud přijde například přidělení adresy (nebo jakýkoliv paket z DHCP serveru) z nedůvěryhodného portu, tak je paket zahozen.
Zároveň se může vytvářet DHCP Snooping Binding Database, která obsahuje informace o všech přidělených IP adresách spolu s MAC, VLAN, časem pronájmu a informacemi o interfacu. Když pak přijde komunikace na nedůvěryhodném interfacu, tak se kontroluje oproti této databázi a v případě nesouhlasu se zahazuje.
Nejprve je třeba zapnout funkci DHCP Snooping na switchi
SWITCH(config)#ip dhcp snooping
Potom specifikujeme, na kterých VLANách bude funkce zapnuta
SWITCH(config)#ip dhcp snooping vlan 1 - 999 // můžeme definovat jednu VLANu, seznam oddělený čárkou nebo rozsah
Dále (spíše asi dříve, než funkci zapneme) pak musíme určit důvěryhodné porty, to provedeme přímo na daném portu.
SWITCH(config-if)#ip dhcp snooping trust
Pokud bychom chtěli využít DHCP Snooping Binding Database, tak musíme tuto funkci zapnout a určit, kde se bude ukládat.
SWITCH(config)#ip dhcp snooping database flash:/dhcpbind.txt // určení místa ukládání DB, zde do souboru ve flash paměti, dále může být FTP, TFTP, web, RCP
Abychom následně blokovali na portech nepovolené IP (a případně i MAC) adresy, tak využijeme funkci IP Source Guard, který se konfiguruje na switchovaný port.
SWITCH(config-if)#ip verify source // filtruje zdrojové IP adresy SWITCH(config-if)#ip verify source port-security // filtruje zdrojové IP a MAC adresy
Pozn.: Pro konfiguraci DHCP Snoopingu je ještě celá řada dalších příkazů.
Zobrazení informací
SWITCH#show ip dhcp snooping SWITCH#show ip verify source
Zajímavé odkazy
Více informací můžete nalézt v následujících článcích.
Komentáře
Zajímalo by mě jak jste to myslel s tím DHCP Relay? Na switchi přece není potřeba povolovat nějaké broadcasty,ty zastavují jen L3 zařízení, nebo máte na mysl L3 switch?
(cituji "Proto je možno využít DHCP Relay Agenta, který běží typicky na routeru (což je v lokální síti většinou switch).") ??????
shortty@seznam.cz
odpověď na [1]shortty: No myslím, že je to v článku popsáno dost jasně a vy si v dotazu i sám odpovídáte.
Pokud používám switch pro routování (což je dnes mnohem běžnější než použití routeru, který je příliš pomalý), tak na něm využiji DHCP Relay Agent. A ano myslím L3 switch (pokud použijeme takovéto označení).
A co kdyz mam sit, rozsahlou, bezdratovou, kde switche jsou mezi sebou propojeny PtP spoji, ale jsou na stejnem subnetu. Na te siti je cca 500 useru, a obcas se stane ze nejaky nouma "obrati" routr do vnitrni site a tim pusti dhcp server do me site. Pomuze tomu nejak dhcpd agent ? aby bylo pravidlo ze duveryhodny je jen TEN SERVER a vse co jde jinam zahod ...?
odpověď na [3]georgo23: No nevím, jestli tomu dobře rozumím. Ale podle popisu se na to krásně hodí DHCP Snooping, ten zabrání fungování DHCP serveru na portu, na kterém jej nechci.
Jak zapnout DHCP kdyz ho mam vyplej?nvm kde se zapina :(
odpověď na [5]pedro: Je to napsáno hned na začátku článku. Ale pokud není vytvořený patřičný pool do dané VLANy, tak se adresy přidělovat nebudou.
Nastal mi problem. Potrebuji bootovat Macbook s OS X pres sit. Je nejaka moznost, jak nastavit DHCP pool aby vedel o serveru, ktery je v jinem subnetu a poskytuje image? Mohlo by to jit pres option ale nejak jsem zatim nikde nezjistil jak to provest.
odpověď na [7]Joe: Jestli jsem správně pochopil dotaz, pak odpověď je ano.
DHCP server přiděluje IP adresy a zároveň předává informace o různých důležitých serverech (adresách). Standardně se jedná o DNS (option 6), gateway (option 3), WINS (option 44) a další. Různá čísla Option jsou přiřazena různému použití, takže jde o to, aby tuto funkci aplikace podporovala a četla určitou Option.
Například Cisco IPT používá Option 150, kde se předává adresa TFTP serveru CallManageru.
PS: Jeste bych pripsal, ze u ciloveho zarizeni se nastavi: "ip address dhcp"
Není mi jasné za jakých podmínek se DHCP Snooping Binding Database vytvoří. Přesto že jsem ji na switchi zapnul (a to na switchi kde je připojen i DHCP server, tak se žádný soubor ve flash: nevytvořil. Ani když to pošlu na TFTP server.
Co se tyka dhcp snooping db, tak doporucuju nejdriv si vytvorit prazdny soubor na tom tftp umisteni (nekdy se stane, ze ho ten tftp proces neumi vytvorit, ale prepsat ano).
Do flash nezapisovat, protoze si ji zbytecne likvidujete.
Ja osobne pouzivam ftp server, pro zalohu databaze.
V konfiguraci je nastaveno:
ip dhcp snooping vlan 1-999
ip dhcp snooping database tftp://172.24.44.89/dhcpbind.txt
ip dhcp snooping database write-delay 100
ip dhcp snooping database timeout 100
ip dhcp snooping
Trusted porty jsou nadefinovány
TFTP server je funkční, soubor dhcpbind.txt je vytvořen a je prázdný.
Přesto se do souboru ni nezapíše.
debug:
DHCP Snooping packet debugging is on
DHCP Snooping event debugging is on
DHCP Snooping database agent debugging is on
A kromě DHCP komunikace se vypisuje hlášení:
switch#
.Mar 13 14:36:32: Safe write timer expired.
.Mar 13 14:36:32: Trying to open url in safe write mode..
.Mar 13 14:36:32: Restarting safe write timer.
switch#
Na Ciscu jsem nic podobného nenašel.