Cisco IOS 13 - DHCP služby na switchi

Zdroj seriálu: https://www.samuraj-cz.com/serie/cisco-ios/
Tentokrát více praktický díl, který se věnuje službám okolo DHCP. Jako hlavní službu nám Catalysty nabízí možnost provozovat DHCP server. Nebudu se zabývat úvahami nad nasazením takovéhoto DHCP serveru v ostrém provozu, ale minimálně se jedná o užitečnou vlastnost pro různé testování a laboratoře. Další užitečná a často používaná funkce je DHCP Relay Agent, tedy předávání DHCP požadavků na server. A za povšimnutí určitě stojí, zajímává bezpečnostní funkce DHCP Snooping.

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