Como fazer com que o networkmanager configure servidores de nomes específicos de domínio com o openresolv + dnsmasq

8

Eu geralmente me conecto a várias redes simultaneamente. Cada uma dessas redes fornece configuração de servidor de nomes via dhcp. Por exemplo. Rede 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

Rede 2 (tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# Nomes alterados

Quando conectado a ambas as redes simultaneamente:

# 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 não funciona porque o servidor de primeiro nome só conhece os nomes company1.corp.

Então, inspirados por este artigo , eu configurei openresolv (uma implementação resolvconf) configurando um serviço dnsmasq local na minha instalação do Arch Linux.

Se eu configurar os servidores de nomes manualmente usando o 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

Em seguida, posso resolver nomes de company1.corp e company2.corp (o servidor dnsmasq local lida com isso.)

Note que após a configuração manual, o resolveconf -l mostra as 2 configurações separadamente:

~ # 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

No entanto, ao deixar o gerenciador de rede fazer a configuração, as duas configurações não são separadas, como seria se o gerenciador de rede estivesse gravando em /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

Minha pergunta é como posso obter o gerenciador de rede para chamar corretamente o resolveconf para que os servidores de nomes de cada interface sejam registrados separadamente. (Infelizmente googling para isso é inútil porque o Google pensa que "resolveconf" == "resolve.conf")

    
por Gary van der Merwe 25.04.2012 / 11:21

2 respostas

11

O NetworkManager possui a funcionalidade para gerenciar um servidor dnsmasq local embutido. Não é necessário usar o resolvconf / openresolv para fazer isso.

Para ativar isso:

  • Desative a configuração resolvconf / openresolv dnsmasq se ela estava ativada anteriormente e certifique-se de que não haja instâncias do dnsmasq em execução.
  • Assegure-se de que o dnsmasq esteja instalado
  • Adicione dns=dnsmasq a /etc/NetworkManager/NetworkManager.conf .
  • Reinicie o NetworkManager

Depois de ter feito isso, você verá que o NetworkManager iniciou um processo 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 deve estar apontando para a instância dnsmasq local:

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

e podemos ver quais servidores o dnsmasq está usando:

# 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
    
por 26.06.2012 / 13:47
0

Parece que o NetworkManager está simplesmente sobrescrevendo /etc/resolv.conf e não usando o openresolv. De acordo com FS # 24635 , o NetworkManager tem suporte para openreslov, mas não foi inicialmente ativado na compilação. Qual versão do Arch Linux você está executando e qual é a versão do pacote networkmanager?

    
por 13.05.2012 / 07:56