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:

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;