DNS & DHCP – DHCP
Installeremo ora i servizi DHCP sui nostri server; il servizio DHCP fornirà tramite protocollo DHCP a quegli apparati che ne fanno richiesta, un indirizzo IP facente parte del nostro network.
Il DHCP non fornisce solo l’indirizzo IP, ma anche altri parametri, quali:
- la netmask (altrimenti non potrei identificare la rete e l’host);
- il gateway
- i DNS server
- l’NTP server
- … altro
Vediamo brevemente cosa succede quando un PC senza indirizzo IP preassegnato vuole un indirizzo IP:
- Il client effettua una richiesta in broadcast (con indirizzo sorgente 0.0.0.0 e indirizzo di destinazione 255.255.255.255) per cercare un servizio DHCP che possa offrirgli un indirizzo IP; tale fase è chiamata DHCPDISCOVER;
- la richiesta effettuata dal client viene ricevuta da tutti i DHCP presenti nella rete il server DHCP, i quali rispondono alla richiesta del client comunicandogli i propri indirizzi IP. Tale fase è chiamata DHCPOFFER;
- il computer invia una richiesta di assegnazione di indirizzo IP al server che per prima gli ha comunicato il proprio indirizzo IP; non esiste una priorità di DHCP, per cui solo il primo DHCP server che risponde avrà la priorità di richiesta del client. La richiesta è in ogni caso inviata a tutti i DHCP server presenti nella rete; in tale richiesta il campo “server identifier” conterrà l’indirizzo del server prescelto dal client. Tale fase viene chiamata DHCPREQUEST;
- Il DHCP server invia in dati contenenti anche l’indirizzo IP al client che ne ha fatto richiesta. Tale fase, denominata DHCPACK chiude la sessione.
Installiamo i package relativi al nostro dhcp client ed abilitiamo il servizio:
# yum -y install dhcp # systemctl enable dhcpd
Gli obiettivi che vogliamo raggiungere con il nostro servizio DHCP sono i seguenti:
- deve essere autoritativo per il network della mia rete;
- fornire ai client l’indirizzamento IP (IP address, netmask, DNS server);
- fornire ai client in maniera automatica le regole di proxy da utilizzare;
- il servizio deve essere in failover con quello installato su server02;
- permettere l’aggiornamento dinamico del DNS server in base all’indirizzo IP assegnato;
Modifichiamo il file /etc/dhcp/dhcpd.conf, che è il file relativo alla configurazione del servizio, in questo modo:
# Definisco il mio server come autoritativo per le informazioni pubblicate sul network authoritative; ping-check true; one-lease-per-client on; default-lease-time 600; max-lease-time 7200; # Permetto aggiornamenti dinamici del DNS-Server tramite il DHCP ddns-update-style interim; # Se il mio dominio ha un proxy server, indico al client dove scaricare il wpad.dat # Commentare le 2 righe seguenti se non esiste un proxy server option wpad code 252 = text; option wpad "http://server01.anthesia.lan/wpad/wpad.dat"; # Definiamo le chiavi per gli aggiornamenti della zona del DNS server: # La stessa chiave dovremo inserirla nella zona del nostro DNS server. key server01-server02 { algorithm hmac-md5; secret "vMRWHTEuqhlhd7KOfgnu8iVN9xX7Dqfh/83HeDh4o620kzrqhe6OyEkHL/3F++jMDByKpWjVGzPG5a5o9K62Ng=="; }; zone anthesia.lan { primary 172.28.0.200; key server01-server02; } # Costruiamo il servizio di failover tra server01 e server02: failover peer "anthesia-failover" { primary; address 172.28.0.200; port 519; peer address 172.28.0.201; peer port 520; max-response-delay 30; max-unacked-updates 10; load balance max seconds 3; mclt 1800; split 128; } # Definiamo la rete nella quale risiede il nostro DHCP server: subnet 172.28.0.0 netmask 255.255.252.0 { default-lease-time 86400; max-lease-time 86400; #Definiamo gli indirizzi IP che devono essere assegnati all'interno della subnet: option subnet-mask 255.255.252.0; option broadcast-address 172.28.3.255; option routers 172.28.0.0; option domain-name "anthesia.lan"; option domain-name-servers 172.28.0.200, 172.28.0.201; option ntp-servers 172.28.0.200, 172.28.0.201; option netbios-name-servers 172.28.0.200, 172.28.0.201; option netbios-node-type 8; # Definiamo il range degli IP che possono essere assegnati e mettiamoli nel failover pool { deny dynamic bootp clients; failover peer "anthesia-failover"; range 172.28.2.0 172.28.3.254; allow unknown-clients; } }
Vediamo cosa accade nel file di log quando attivo il servizio; chiaramente, non essendo ancora attivo il DHCP secondario, avrò un errore ed il servizio apparirà in errore:
# systemctl start dhcpd
Aug 7 14:26:49 localhost systemd: Started DHCPv4 Server Daemon. Aug 7 14:26:49 localhost dhcpd: Internet Systems Consortium DHCP Server 4.2.5 Aug 7 14:26:49 localhost dhcpd: Copyright 2004-2013 Internet Systems Consortium. Aug 7 14:26:49 localhost dhcpd: All rights reserved. Aug 7 14:26:49 localhost dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Aug 7 14:26:49 localhost dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Aug 7 14:26:49 localhost dhcpd: Wrote 0 leases to leases file. Aug 7 14:26:49 localhost dhcpd: Listening on LPF/eno33584934/07:4c:29:3f:33:7b/172.28.0.0/22 Aug 7 14:26:49 localhost dhcpd: Sending on LPF/eno33584934/07:4c:29:3f:33:7b/172.28.0.0/22 Aug 7 14:26:49 localhost dhcpd: Aug 7 14:26:49 localhost dhcpd: Sending on Socket/fallback/fallback-net Aug 7 14:26:49 localhost dhcpd: failover peer anthesia-failover: I move from recover to startup Aug 7 14:27:04 localhost dhcpd: failover peer anthesia-failover: I move from startup to recover Aug 7 14:28:19 localhost dhcpd: failover peer anthesia-failover: unexpected error
Installiamo in maniera analoga il servizio DHCP su server02; modifichiamo solo la sezione relativa al failover (tutto il resto rimane uguale):
# Costruiamo il servizio di failover tra server02 e server01: failover peer "anthesia-failover" { secondary; address 172.28.0.201; port 520; peer address 172.28.0.200; peer port 519; max-response-delay 30; max-unacked-updates 10; load balance max seconds 3; }
Abbiamo specificato che questo è il DHCP secondario, abbiamo invertito le porte di ascolto (519 e 520) ed abbiamo specificato che il peer è in questo caso il primario. Avviando il servizio sul secondario e controllando i file di log di entrambi i server vediamo che:
Aug 7 15:06:16 localhost dhcpd: failover peer anthesia-failover: peer moves from unknown-state to recover Aug 7 15:06:16 localhost dhcpd: failover peer anthesia-failover: requesting full update from peer Aug 7 15:06:16 localhost dhcpd: Sent update request all message to anthesia-failover Aug 7 15:06:16 localhost dhcpd: Update request all from anthesia-failover: sending update Aug 7 15:06:17 localhost dhcpd: failover peer anthesia-failover: peer update completed. Aug 7 15:06:17 localhost dhcpd: failover peer anthesia-failover: I move from recover to recover-done Aug 7 15:06:17 localhost dhcpd: Sent update done message to anthesia-failover Aug 7 15:06:17 localhost dhcpd: failover peer anthesia-failover: peer moves from recover to recover-done Aug 7 15:06:17 localhost dhcpd: Both servers have entered recover-done! Aug 7 15:06:17 localhost dhcpd: failover peer anthesia-failover: I move from recover-done to normal Aug 7 15:06:17 localhost dhcpd: balancing pool 7fa1919a8690 172.28.0.0/22 total 511 free 511 backup 0 lts 255 max-own (+/-)51 Aug 7 15:06:17 localhost dhcpd: balanced pool 7fa1919a8690 172.28.0.0/22 total 511 free 256 backup 255 lts 0 max-misbal 77 Aug 7 15:06:17 localhost dhcpd: Sending updates to anthesia-failover. Aug 7 15:06:17 localhost dhcpd: failover peer anthesia-failover: peer moves from recover-done to normal Aug 7 15:06:23 localhost dhcpd: peer anthesia-failover: disconnected Aug 7 15:06:23 localhost dhcpd: failover peer anthesia-failover: I move from normal to communications-interrupted Aug 7 15:06:28 localhost dhcpd: failover peer anthesia-failover: peer moves from normal to normal Aug 7 15:06:28 localhost dhcpd: failover peer anthesia-failover: I move from communications-interrupted to normal Aug 7 15:06:28 localhost dhcpd: balancing pool 7fa1919a8690 172.28.0.0/22 total 511 free 256 backup 255 lts 0 max-own (+/-)51 Aug 7 15:06:28 localhost dhcpd: balanced pool 7fa1919a8690 172.28.0.0/22 total 511 free 256 backup 255 lts 0 max-misbal 77
I due server si sono sincronizzati, hanno visto che possono rilasciare 511 IP e si sono divisi 256 ip sul primario e 255 sul secondario.
Quindi il mio servizio è pronto a rilasciare indirizzi IP all’interno del suo network; vediamo cosa accade quando un client effettua una richiesta dhcpd al mio server:
Aug 7 15:25:26 localhost dhcpd: DHCPDISCOVER from 00:0c:29:3a:5c:7a via eno33554984 Aug 7 15:25:27 localhost dhcpd: DHCPOFFER on 172.28.2.255 to 00:0c:29:3a:5c:7a (mioclient) via eno33554984 Aug 7 15:25:27 localhost dhcpd: DHCPREQUEST for 172.28.2.255 (172.28.0.200) from 00:0c:29:3a:5c:7a (mioclient) via eno33554984 Aug 7 15:25:46 localhost dhcpd: DHCPINFORM from 172.28.2.255 via eno33554984 Aug 7 15:25:46 localhost dhcpd: DHCPACK to 172.28.2.255 (00:0c:29:3a:5c:7a) via eno33554984
Il mio DHCP server ha passato tutti i dati in suo possesso al client, per cui questo è pronto ad utilizzare il network.