Cómo obtener networkmanager para configurar servidores de nombres específicos de dominio con openresolv + dnsmasq

11

A menudo me conecto a múltiples redes simultáneamente. Cada una de estas redes proporciona la configuración del servidor de nombres a través de dhcp. Ej. Red 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

Red 2 (tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# Nombres cambiados

Cuando se conecta a ambas redes simultáneamente:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Resolver service.company2.corp no funciona porque el servidor de nombres solo conoce los nombres de company1.corp.

Entonces, inspirado en este artículo , configuré openresolv (una implementación resolvconf) configurando un servicio dnsmasq local en mi instalación de Arch Linux.

Si configuro los servidores de nombres manualmente usando resolvconf:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

Entonces puedo resolver nombres de company1.corp y company2.corp (el servidor local dnsmasq maneja esto).

Tenga en cuenta que después de la configuración manual, resolveconf -l muestra las 2 configuraciones por separado:

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

Sin embargo, al permitir que el administrador de red haga la configuración, las 2 configuraciones no están separadas, como lo sería si el administrador de red escribiera en /etc/resolve.conf

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Mi pregunta es cómo puedo hacer que el administrador de red llame correctamente a resolveconf para que los servidores de nombres de cada interfaz se registren por separado. (Desafortunadamente, buscar en Google esto es inútil porque Google piensa que "resolveconf" == "resolve.conf")

Gary van der Merwe
fuente
2
En Google, busca "resolvconf"con las comillas. Siempre ponga comillas alrededor de los nombres propios en Google.
Gilles 'SO- deja de ser malvado'

Respuestas:

14

NetworkManager tiene la funcionalidad para administrar un servidor dnsmasq local integrado. No es necesario usar resolvconf / openresolv para hacer esto.

Para habilitar esto:

  • Deshabilite la configuración resolvconf / openresolv dnsmasq si estaba habilitada previamente y asegúrese de que no haya instancias de dnsmasq en ejecución.
  • Asegúrese de que dnsmasq esté instalado
  • Añadir dns=dnsmasqa /etc/NetworkManager/NetworkManager.conf.
  • Reiniciar NetworkManager

Una vez que haya hecho esto, verá que NetworkManager ha iniciado un proceso dnsmasq:

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.conf debería apuntar a la instancia local de dnsmasq:

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

y podemos ver qué servidores está usando dnsmasq:

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239
Gary van der Merwe
fuente
muy bien, gracias! solución muy sencilla y sencilla, pero lamentablemente no muy conocida, no pude resistir, lo siento
akostadinov
Esto parece funcionar cuando se combina una conexión local con una o dos VPN. Parece que no funciona con dos conexiones locales. Actualmente estoy conectado a la red de la oficina a través de Ethernet, donde lamentablemente ha fallado la conexión a Internet. También estoy conectado a través de USB Ethernet (mi teléfono) a un Internet que funciona. No puedo hacer que NetworkManager aplique el nombre de dominio al servidor DNS de la oficina.
Oskar Berggren
@OskarBerggren: en el ethernet de su oficina, en la pestaña IPv4, marque "Usar esta conexión solo para recursos en su red".
Gary van der Merwe
@GaryvanderMerwe Eso es exactamente lo que intenté, olvidé escribirlo. Parece que hay una solicitud de error / función relacionada: bugzilla.gnome.org/show_bug.cgi?id=685962
Oskar Berggren
Para su información, no hay una opción para usar, uboundpor lo que DNSSEC también está funcionando, vea fedoraproject.org/wiki/Networking/NameResolution/DNSSEC
akostadinov
0

Parece que NetworkManager simplemente está sobrescribiendo /etc/resolv.confy no está usando openresolv. De acuerdo con FS # 24635 , NetworkManager tiene soporte para openreslov, pero inicialmente no estaba habilitado en la compilación. ¿Qué versión de Arch Linux está ejecutando y cuál es la versión del paquete networkmanager?

mgorven
fuente
networkmanager 0.9.4.0-6 NetworkManager está llamando a resolveconf y no escribe en /etc/resolev.conf. El problema es que NetworkManager está fusionando la información dns y pasándola a resolveconf como una interfaz, y no como información para las interfaces separadas.
Gary van der Merwe
0

Haz lo que respondió Gary van der Merwe, pero en

/etc/NetworkManager/NetworkManager.conf

Tuve que agregar

[main]
dns=dnsmasq

al archivo No solo

dns=dnsmasq

Esto se debe a que todas las configuraciones en ese archivo deben estar bajo una sección, y mi distribución, manjaro (archlinux), la versión del paquete NetworkManager no llena el archivo de configuración. (Supongo que la distribución de Gary lo hace ya que su línea sugerida funcionó para él y otros)

Otra nota, cualquier configuración de dnsmasq debe ir en un archivo de configuración en este

/etc/NetworkManager/dnsmasq.d/

directorio. Puede ser un directorio diferente en su máquina. Aprendí el directorio que se está usando mirando la línea que NetworkManager usa para iniciar el demonio dnsmasq. Puedes ver esta línea corriendo ps aux|grep dnsmasq. Debe esperar para ejecutar esto hasta después de modificar la configuración de NetworkManager y reiniciar su servicio.

Leyenda del sultán
fuente