Il file /etc/resolv.conf in cloud
Su un server virtuale in cloud (ad esempio presso Hetzner) generalmente il file /etc/resolv.conf viene generato automaticamente, ed eventualmente anche aggiornato ad ogni reboot.
Poiché il server in questione offre il servizio di DNS server, si vuole indicare localhost come prima scelta di nameserver:
nameserver 127.0.0.1
Invece l'host ad ogni riavvio presentava l'elenco dei DNS server del provider cloud.
Causa del problema
La modifica del file /etc/resolv.conf può dipendere da vari sottosistemi:
- cloud-init
- systemd-resolved
- ifupdown o NetworkManager
- DHCP client
Si è provveduto a verificare che alcuni sottosistemi NON sono attivi, quindi non sono responsabili del problema:
dpkg --list | grep cloud-init systemctl is-active systemd-resolved systemctl is-active NetworkManager
Il sottosistema di ifupdown invece è attivo:
systemctl is-active networking active
I comandi ifup e ifdown leggono il file di configurazione in /etc/netword/, nel nostro caso avevamo il file /etc/network/interfaces.d/50-cloud-init.cfg che conteneva:
auto eth0
iface eth0 inet dhcp
dns-nameservers 213.133.99.99 213.133.98.98 213.133.100.100
Tuttavia le impostazioni dns-nameservers non corrispondevano a quanto si trovava in /etc/resolv.conf.
Il motivo è che le impostazioni ricevute via DHCP client hanno la precedenza e venivano impostate su di esso.
Per ovviare al problema è necessario modificare il file /etc/dhcp/dhclient.conf, aggiungendo una riga
supersede domain-name-servers 127.0.0.1, 8.8.8.8, 185.12.64.1;
