Usando o dnsmasq com o NetworkManager

14

Era bem conhecido que o NetworkManager não joga bem com dnsmasq (ref: aqui ). Analisei a longa discussão aqui , mas ainda não tenho certeza do que é recomendado maneira de lidar com a situação é.

Tudo que eu quero fazer é usar dnsmasq para fornecer DNS e DHCP à minha rede local. Qual seria o caminho recomendado neste caso?

Parece que o problema permanece mesmo para o Ubuntu 14.04, mesmo o bug é reivindicado ser fixo.

À medida que o trabalho gira, as pessoas estão desativando o dnsmasq-base escravizado pelo NM, devido às seguintes razões:

O dnsmasq escravizado por NM usa opções codificadas (em C) que fornecem funcionalidade extremamente limitada.

  • Ele não escuta no ethX ( --listen-address=127.0.0.1 ). Então não podemos usar nossos servidores como servidores DNS para nossos PCs de rede local, ou seja, completamente inútil para LANs.
  • Não faz cache de solicitações ( --cache-size=0 ). Sem cache == > nenhuma aceleração de consultas DNS. Novamente, isso é muito significativo para as LANs, pois há muitos usuários simultâneos.
  • Finalmente, também precisamos da funcionalidade DHCP e TFTP do dnsmasq, portanto, mesmo que o NM + dnsmasq inclua um servidor DNS real, teremos que executar outro dnsmasq

Mas não tenho certeza se eles ainda são válidos e / ou como a correção resolveu o (s) problema (s). Além disso, nenhum deles é muito claro exatamente o que eles fizeram e como eles fizeram para resolver seu problema. Ou seja, a parte da solução está ausente da longa discussão . Alguém pode preencher os espaços em branco por favor? Ou seja,

O dnsmasq fornecido pelo Ubuntu não está funcionando, do lado do servidor, pelas razões acima. E também, do lado do cliente, "o dnsmasq instalado nesses laptops do Ubuntu não pode fazer a consulta DNS da LAN do meu servidor DNS" , porque "o NetworkManager (laptops do Ubuntu) está fazendo com que eles tem uma estranha configuração de servidor de nomes 127.0.1.1 " (ref: Solução DNS para LAN ou rede doméstica local

Como fazer com que o dnsmasq funcione sem problemas com o NetworkManager, de modo a fornecer DNS e DHCP (e TFTP) à minha rede local, tanto no servidor quanto no lado do cliente?

TL'dr

para quem procura a resposta. De todas as respostas abaixo, achei que a solução mais simples é a do @brad, para o lado do servidor (ainda não há uma boa resposta para o lado do cliente):

the only solution to the problem is to disable the NM-drive dnsmasq..., and install the "standard" dnsmasq and then configure it via its standard /etc/dnsmasq.conf configuration file.

    
por xpt 29.11.2013 / 05:46

5 respostas

3

Eu também tenho seus problemas.

Em princípio, depois de wiki.archlinux , parece que para habilitar o cache deve ser suficiente criar um arquivo /etc/NetworkManager/dnsmasq.d/cache contendo simplesmente

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

Eu tentei isso, mas, depois que o NM reiniciou, ainda não tenho cache:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

Observe que o arquivo conf citado está sempre vazio: Eu não consegui configurar nenhuma opção usando este procedimento.

Em suma, parece que o dnsmask em 14.04 (que é fornecido pelo pacote dnsmasq-base) é completamente bloqueado, então não é possível habilitar o cache, nem qualquer outra coisa (dhcp, tftp).

Se isso está certo, eu acho que, como você disse, a única solução para o problema é desabilitar o dnsmasq da unidade NM, comentando a linha

dns=dnsmasq

no arquivo /etc/NetworkManager/NetworkManager.conf e instale o dnsmasq "padrão" e configure-o através do arquivo de configuração /etc/dnsmasq.conf padrão.

    
por 10.09.2014 / 13:30
6

É possível substituir as configurações colocando-as em /etc/NetworkManager/dnsmasq.d/*.conf . As configurações do arquivo de configuração têm precedência sobre os sinalizadores de linha de comando. Eles são aplicados quando o NetworkManager inicia o dnsmasq. Execute sudo service network-manager restart para reaplicar. (Se houver alguma dúvida: a resposta do brad perdeu o fato de que ps ax | grep dns mostra um argumento --conf-dir )

Por exemplo:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Se bem me lembro, o NetworkManager desabilita o cache do dnsmasq por padrão devido a preocupações com envenenamento de cache. Para uma máquina na qual todos os usuários são confiáveis, isso pode não ser um problema.

O NetworkManager não se integra com resolvconf e o servidor do NM em 127.0.1.1 não será usado localmente se o pacote resolvconf estiver instalado. O resolvconf faz parte das instalações Debian ubuntu-minimal e standard; O NetworkManager reimplementa essa funcionalidade de maneira mais integrada e menos baseada em script.

O NetworkManager não interfere em uma instância global dnsmasq (ligação a um IP de loopback secundário e configuração bind-interfaces a /etc/dnsmasq.d/network-manager ). Se você instalar uma instância global do dnsmasq e manter a instância do NM, verifique novamente em /etc/resolv.conf para ver qual deles o host usará por padrão.

Enquanto você pode personalizar a instância do dnsmasq do NetworkManager como mostrado acima, se você quiser um servidor DNS vinculado a interfaces públicas, instale o pacote dnsmasq (o NetworkManager usa apenas dnsmasq-base , que não configura uma instância global ) e coloque sua configuração em /etc/dnsmasq.d/*.conf . A instância escrava do NetworkManager destina-se apenas a vincular-se à interface de loopback e configurá-la além desse escopo arriscaria quebrá-la.

Em resumo, para alguém que deseja apenas o armazenamento em cache do DNS local:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Para uma LAN simples, o compartilhamento de conexão do NetworkManager ainda deve ser suficiente. Mas para uma LAN customizada, com TFTP e assim por diante:

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart
    
por 01.12.2014 / 13:44
0

Eu queria atribuir um MAC em particular a um endereço IP específico e, para fins de estabilidade, manter o Network Manager / dnsmasq padrão o máximo possível.

link tem o comentário sobre o uso de - conf-file para ignorar configurações, mas depois no arquivo que temos

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

No Ubuntu 16.04 LTS, depois de configurar um ponto de acesso Wi-Fi e compartilhar outra conexão, ps auxgww | grep dnsmasq mostra que o último argumento da linha de comando de cada um dos processos do dnsmasq é:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Assim, é possível criar arquivos de configuração nesse diretório que são compartilhados entre todas as invocações do dnsmasq iniciadas pelo Network Manager.

Eu criei /etc/NetworkManager/dnsmasq-shared.d/Hue

dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221

e reiniciado, embora executando

sudo service network-manager restart

teria funcionado.

Isso resultou no meu dispositivo recebendo o endereço IP apropriado.

Sim, isso está errado porque significa que todas as invocações do dnsmasq pelo NetworkManager receberão essa declaração, mas, neste caso, é inofensiva, pois só importa se o MAC aparecer na rede em questão. Se a rede não for 192.168.1, haverá problemas.

Isso é mais robusto do que substituir / usr / sbin / dnsmasq por um script, conforme proposto no link

A solução correta seria modificar como o dnsmasq é chamado para usar corretamente os arquivos de configuração do dnsmasq. Eu entendo o desejo de ter o Network Manager "apenas funcione", mas tornar as ferramentas idiotas significa que apenas os idiotas podem usá-las.

    
por 21.01.2018 / 19:03
0

Minha solução pode quebrar o Network Manager e manter tudo simples. Com a maneira quebrada de lidar com o dnsmasq do NM, eu simplesmente o substituo pelo método abaixo.

Uma solução para o problema foi simplesmente fazer o seguinte:

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Edite o arquivo ~/dnsmasq.conf em seu diretório de usuários como você quer que ele seja e salve-o.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

Eu criei um alias simples e coloquei na parte inferior do meu arquivo ~ / .bash_aliases para facilitar a edição do arquivo dnsmasq.conf. Aqui está o alias:

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

Claro, você pode escolher qualquer editor ao seu gosto para o segundo comando sudo no alias, mas eu usei nano lá para facilitar a todos. Salve o arquivo, feche e reabra sua guia / janela do terminal de comando. Isso deve permitir que o alias esteja disponível para abas / janelas de terminal recém-abertas.

Basta executar eddmc da sua conta de usuário e solicitar sua senha para realizar os comandos elevados.

Observe que sempre chattr +i o arquivo. Isso é para que o Network Manager não substitua sua configuração por conta própria.

Em conexões Ethernet com fio não deve haver nenhum problema. Eu encontrei desde que eu uso dnsmasq para cache de DNS em laptops com wireless que eu tenho que reiniciar manualmente o dnsmasq.service depois de se conectar a um ponto de acesso. Acho que o Network Manager pode realizar tarefas como reiniciar os serviços ao se conectar, mas ainda não examinei isso.

    
por 12.02.2018 / 05:24
0

Apesar das alegações aqui e em outros lugares em contrário, o NetworkManager ignora completamente todos e quaisquer arquivos de configuração do dmsmasq - mesmo aqueles em seu próprio diretório /etc/NetworkManager/dnsmasq-shared.d. A prova está no código-fonte do NetworkManager ... Aqui está o comentário relevante:

/* dnsmasq may read from it's default config file location, which if that location is a valid config file, it will combine with the options here and cause undesirable side-effects. Like sending bogus IP addresses as the gateway or whatever. So tell dnsmasq not to use any config file at all. */

Aqui é o link para as informações relevantes código fonte

    
por 30.10.2017 / 19:24