En el archivo de configuración para la interfaz de red local, tenemos que especificar si queremos obtener la dirección del servidor DNS local del servidor DHCP usando la DHCP=
opción :
[Network]
DHCP=yes
o especifique su dirección explícitamente usando la DNS=
opción :
[Network]
DNS=10.0.0.1
Además, necesitamos especificar (en la misma sección) dominios locales usando la Domains=
opción
Domains=domainA.example domainB.example ~example
Especificamos dominios locales domainA.example domainB.example
para obtener el siguiente comportamiento (de systemd-resolve.service, página de manual de systemd-resolve ):
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
será resuelto exclusivamente por nuestro servidor DNS local.
Especificamos ~example
que todos los dominios que terminan en example
deben ser tratados como dominios de solo ruta para obtener el siguiente comportamiento (de la descripción de este commit):
Los servidores DNS que tienen dominios de solo ruta solo deben usarse para los dominios especificados.
De esta manera hostY.on.the.internet
, nuestro servidor DNS remoto global lo resolverá exclusivamente .
Nota
Idealmente, cuando se usa 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 función: consulte el problema de la opción de dominios de búsqueda DHCP systemd-networkd .
Necesitamos especificar el servidor DNS remoto como nuestro servidor DNS global de todo el sistema. Podemos hacer esto en el /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
¡Precaución!
Las garantías anteriores se aplican solo cuando systemd- resolve resuelve los nombres ; consulte la página de manual para nss-resolve, libnss_resolve.so.2 y la página de manual para systemd- resolve.service , systemd-resolve .
Ver también:
Referencias
.local
en este ejemplo? Ciertamente, con avahi, se suponía que esto estaba reservado para MDNS y su mal uso era un gran no-no. Sería más claro para mí usarexample.com
o .ejemplo ..local
se define como dominio especial en RFC 6762 - DNS de multidifusión en la sección Nombres de DNS de multidifusión . Gracias, arreglado./etc/systemd/network/*.network
¿ verdad ? Encontrado aquí superuser.com/a/1365864Solo para ampliar la excelente respuesta de @piotrDobrogost, no olvide configurar
/etc/nsswitch.conf
para usarsystemd-resolved
como fuente de resolución DNS. Suhosts
directiva debería tener el siguiente aspecto para su caso de uso particular:/etc/nsswitch.conf
Por lo tanto, si limita la resolución solo a los dominios especificados en la
Domains
directiva/etc/systemd/resolved.conf
como se detalla anteriormente en Piotr, se debe consultar DNS en el orden de las fuentes de resolución de nombres especificadas/etc/nsswitch.conf
cuando los dominios NO se encuentran en laDomains
directiva:El siguiente enlace hace referencia al requisito de especificar resolución en el
/etc/nsswitch.conf
quesystemd-resolved
se consulta durante la resolución de nombre:https://github.com/systemd/systemd/issues/940
Documentación de SystemD que he encontrado ser grave. Tuve que reconstruir un entendimiento de múltiples enlaces, incluida la respuesta de Piotr anterior ;-)
fuente
/etc/resolve.conf
es un enlace simbólico al/run/systemd/resolve/stub-resolv.conf
archivo que a su vez contiene la dirección de la systemd-determinación talón de resolución de DNS que no hay necesidad de colocarresolve
Directiva en/etc/nsswitch.conf
archivo como las solicitudes de DNS serán dirigidos (debido a la norma denss-dns
la Directiva) a Stub resolver que actúa de acuerdo con las reglas de systemd-resolve ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" archivos ") se verificaría para IP estática : asignaciones de nombres y, si no se encuentra, se consultará el código resuelto resuelto por systemd. . No puedo ver cómo sería posible, por lo tanto, organizar las fuentes de resolución DNS sin usar/etc/nsswitch.conf
. ¿Me estoy perdiendo un truco aquí?/etc/nsswitch.conf
sea necesario. Estoy diciendo que cuando uno usa la resolución DNS de código auxiliar de systemd- resolve, entonces es suficiente tener ladns
directiva en la listahosts:
(presumiblemente después de lafile
directiva). No hay necesidad deresolve
directivas allí, ya que es el stub resolver el punto de entrada a la lógica de systemd-nss-resolve
resolve
directiva ➟ nss-resolve NSS plug-in module ➟ systemd- resolve o a través de ladns
directiva ➟ nss-dns NSS plug-in module ➟ systemd-resolve's 'stub DNS resolver ➟ systemd-files
continuaciónresolve
cosita en el/etc/nsswitch.conf
de la segunda parte de su pregunta. Al volver a leerlo, parece que solo estabas hablando de verificar la memoria caché local para una IP: asignación de nombre y luego contactar a un reenviador si no se encuentra. Por lo general, configuro lafiles
primera fuente de resolución de DNS para omitir el DNS y permitirme probar y no golpear los hosts de producción. T