En el archivo de configuración de la interfaz de red local (un archivo que coincide con el patrón de nombre /etc/systemd/network/*.network
) tenemos que especificar que queremos obtener la dirección del servidor DNS local del servidor DHCP usando DHCP=
opción:
[Network]
DHCP=yes
o especifica su dirección explícitamente usando DNS=
opción:
[Network]
DNS=10.0.0.1
Además necesitamos especificar (en la misma sección) dominios locales usando Domains=
opción
Domains=domainA.example domainB.example ~example
Especificamos dominios locales domainA.example domainB.example
para obtener el siguiente comportamiento (de systemd-resolved.service, systemd-resolved página man):
Las búsquedas de un nombre de host que termina en uno de los dominios por interfaz se enrutan exclusivamente a las interfaces coincidentes.
De esta manera hostX.domainA.example
se resolverá exclusivamente por nuestro servidor DNS local.
Especificamos con ~example
que todos los dominios que terminan en example
deben tratarse como dominios de solo ruta para obtener el siguiente comportamiento (de la descripción de esta confirmación):
Los servidores DNS que tienen dominios de solo ruta solo deben usarse para los dominios especificados.
De esta manera hostY.on.the.internet
se resolverá exclusivamente por nuestro servidor DNS global y remoto.
Nota
Idealmente, al usar el protocolo DHCP, los nombres de dominio locales deben obtenerse del servidor DHCP en lugar de especificarse explícitamente en el archivo de configuración de la interfaz de red anterior. Ver UseDomains=
opción. Sin embargo, todavía hay problemas pendientes con esta característica:consulte el problema de la opción de dominios de búsqueda DHCP de systemd-networkd.
Necesitamos especificar el servidor DNS remoto como nuestro servidor DNS global para todo el sistema. Podemos hacer esto en /etc/systemd/resolved.conf
archivo:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
No olvide volver a cargar la configuración y reiniciar los servicios:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
¡Cuidado!
Las garantías anteriores se aplican solo cuando los nombres están siendo resueltos por systemd-resolved – consulte la página del manual para nss-resolve, libnss_resolve.so.2 y página de manual para systemd-resolved.service, systemd-resolved.
Véase también:
- La descripción de las solicitudes de búsqueda de enrutamiento en las páginas man relacionadas con systemd no está clara
- ¿Cómo solucionar problemas de DNS con systemd-resolved?
Referencias:
- Página man para systemd-resolved.service, systemd-resolved
- Página del manual para resolve.conf, resolve.conf.d
- Página man para systemd-network
Solo para ampliar la excelente respuesta de @piotrDobrogost, no olvide configurar /etc/nsswitch.conf
usar systemd-resolved
como fuente de resolución de DNS. Tu hosts
La directiva debería tener el siguiente aspecto para su caso de uso particular:
/etc/nsswitch.conf
hosts: files resolve dns
Entonces, si limita la resolución a solo aquellos dominios especificados en el Domains
directiva en /etc/systemd/resolved.conf
como Piotr detalla arriba, el DNS debe consultarse a continuación en el orden de las fuentes de resolución de nombres especificadas /etc/nsswitch.conf
cuando los dominios son NO encontrado en Domains
directiva:
El siguiente enlace hace referencia al requisito de especificar resolver en /etc/nsswitch.conf
entonces systemd-resolved
se consulta durante la resolución de nombres:
https://github.com/systemd/systemd/issues/940
La documentación de SystemD que he encontrado es nefasta. Tuve que armar un entendimiento de varios enlaces, incluida la respuesta de Piotr anterior;-)