Nel file di configurazione per l'interfaccia di rete locale (un file che corrisponde al modello di nome /etc/systemd/network/*.network
) dobbiamo specificare che vogliamo ottenere l'indirizzo del server DNS locale dal server DHCP utilizzando DHCP=
opzione:
[Network]
DHCP=yes
o specificare esplicitamente il suo indirizzo usando DNS=
opzione:
[Network]
DNS=10.0.0.1
Inoltre dobbiamo specificare (nella stessa sezione) i domini locali usando Domains=
opzione
Domains=domainA.example domainB.example ~example
Specifichiamo i domini locali domainA.example domainB.example
per ottenere il seguente comportamento (da systemd-resolved.service, systemd-resolved pagina man):
Le ricerche di un nome host che termina con uno dei domini per interfaccia vengono indirizzate esclusivamente alle interfacce corrispondenti.
In questo modo hostX.domainA.example
sarà risolto esclusivamente dal nostro server DNS locale.
Specifichiamo con ~example
che tutti i domini che terminano con example
devono essere trattati come domini di sola rotta per ottenere il seguente comportamento (dalla descrizione di questo commit):
I server DNS con domini di solo instradamento devono essere utilizzati solo per i domini specificati.
In questo modo hostY.on.the.internet
sarà risolto esclusivamente dal nostro server DNS globale e remoto.
Nota
Idealmente, quando si utilizza il protocollo DHCP, i nomi di dominio locali dovrebbero essere ottenuti dal server DHCP invece di essere specificati esplicitamente nel file di configurazione dell'interfaccia di rete precedente. Vedi UseDomains=
opzione. Tuttavia, ci sono ancora problemi in sospeso con questa funzione:vedi il problema relativo all'opzione domini di ricerca DHCP systemd-networkd.
Dobbiamo specificare il server DNS remoto come nostro server DNS globale a livello di sistema. Possiamo farlo in /etc/systemd/resolved.conf
file:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Non dimenticare di ricaricare la configurazione e riavviare i servizi:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Attenzione!
Le garanzie di cui sopra si applicano solo quando i nomi vengono risolti da systemd-resolved – vedi la pagina man per nss-resolve, libnss_resolve.so.2 e pagina man per systemd-resolved.service, systemd-resolved.
Vedi anche:
- La descrizione delle richieste di ricerca di instradamento nelle pagine man relative a systemd non è chiara
- Come risolvere i problemi DNS con systemd-resolved?
Riferimenti:
- Pagina man per systemd-resolved.service, systemd-resolved
- Pagina man per resolve.conf, resolve.conf.d
- Pagina man per systemd-network
Solo per espandere l'eccellente risposta di @piotrDobrogost, non dimenticare di configurare /etc/nsswitch.conf
per usare systemd-resolved
come sorgente di risoluzione DNS. Il tuo hosts
direttiva dovrebbe apparire come segue per il tuo particolare caso d'uso:
/etc/nsswitch.conf
hosts: files resolve dns
Quindi, se limiti la risoluzione solo ai domini specificati nel Domains
direttiva in /etc/systemd/resolved.conf
come indicato sopra da Piotr, il DNS dovrebbe essere successivamente consultato nell'ordine delle fonti di risoluzione dei nomi specificate /etc/nsswitch.conf
quando i domini sono NON trovato in Domains
direttiva:
Il collegamento seguente fa riferimento al requisito per specificare resolve in /etc/nsswitch.conf
quindi systemd-resolved
viene consultato durante la risoluzione dei nomi:
https://github.com/systemd/systemd/issues/940
La documentazione di SystemD che ho trovato terribile. Ho dovuto mettere insieme una comprensione da più collegamenti, inclusa la risposta di Piotr sopra;-)