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.
