
Era bem sabido que o NetworkManager não funciona bem com dnsmasq
(ref:aqui). Eu folheei o longodiscussão aquimas ainda não tenho certeza de qual é a maneira recomendada de lidar com a situação.
Tudo o que eu quero é usar dnsmasq
parafornecer DNS e DHCP para minha rede local. Qual seria a forma recomendada neste caso?
Parece que o problema permanece até mesmo para o Ubuntu 14.04, mesmo oerroé reivindicado como corrigido.
Como solução alternativa, as pessoas estão desabilitando os escravos NM dnsmasq-base
pelos seguintes motivos:
O escravo NM dnsmasq
usa opções codificadas (em C) que fornecem funcionalidade extremamente limitada.
- Ele não escuta no ethX (
--listen-address=127.0.0.1
). Portanto, não podemos usar nossos servidores como servidores DNS para nossos PCs de rede local, ou seja, é completamente inútil para LANs. - Ele não armazena solicitações em cache (
--cache-size=0
). Sem cache ==> sem aceleração de consultas DNS. Novamente, isso é muito significativo para 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 incluísse um servidor DNS real, teríamos que executar outro dnsmasq
Mas não tenho certeza se eles ainda se mantêm e/ou como a correção resolveu o(s) problema(s). Além disso, nenhum deles sabe exatamente o que fizeram e como fizeram para resolver seu problema. Ou seja, a parte da solução está faltando nolonga discussão. Alguém pode preencher os espaços em branco, por favor? Ou seja,
O dnsmasq
fornecido imediatamente pelo Ubuntu não está funcionando, no lado do servidor, pelos motivos acima. E também, do lado do cliente,"o dnsmasq instalado nesses laptops Ubuntu não pode fazer consultas LAN DNS do meu servidor DNS", porque"o NetworkManager (laptops Ubuntu) está fazendo com que eles tenham uma configuração estranha 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 perfeitamente com o NetworkManager, de modo a fornecer DNS e DHCP (e TFTP) para minha rede local, tanto no lado do servidor quanto no lado do cliente?
TL'dr
para aqueles que buscam a resposta. De todas as respostas abaixo, descobri que a solução mais simples é a do @brad, para olado do servidor(ainda não há uma boa resposta para o lado do cliente):
a única solução para o problema é desabilitar o dnsmasq da unidade NM..., instalar o dnsmasq "padrão" e configurá-lo por meio de seu
/etc/dnsmasq.conf
arquivo de configuração padrão.
Responder1
Eu também tenho seus problemas.
Em princípio, depoiswiki.archlinux, parece que para habilitar o cache deveria 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, após reiniciar o NM, 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: não consegui configurar nenhuma opção usando este procedimento.
Resumindo, parece que o dnsmask escravizado por NM em 14.04 (que é fornecido pelo pacote dnsmasq-base) está completamente bloqueado, portanto não é possível habilitar o cache, nem qualquer outra coisa (dhcp, tftp).
Se estiver certo, acho que, como você disse, a única solução para o problema é desabilitar o dnsmasq do drive NM comentando a linha
dns=dnsmasq
no arquivo /etc/NetworkManager/NetworkManager.conf
e instale o dnsmasq "padrão" e configure-o através de seu /etc/dnsmasq.conf
arquivo de configuração padrão.
Responder2
É 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 sinalizadores de linha de comando. Eles são aplicados quando o NetworkManager inicia o dnsmasq. Corra sudo service network-manager restart
para se inscrever novamente. (Se houver alguma dúvida: a resposta de Brad perdeu o fato que ps ax | grep dns
mostra um --conf-dir
argumento)
Por exemplo:
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Pelo que me lembro, o NetworkManager desativa o cache dnsmasq por padrão devido a preocupações com envenenamento de cache. Para uma máquina onde todos os usuários são confiáveis, isso pode não ser um problema.
O NetworkManager não se integra ao resolvconf
, e o servidor do NM 127.0.1.1
não será usado localmente se o pacote resolvconf estiver instalado. resolvconf faz parte das instalações padrão e mínimas do Ubuntu; O NetworkManager reimplementa essa funcionalidade de uma forma mais integrada e menos baseada em scripts.
O NetworkManager certifica-se de não interferir em uma instância dnsmasq global (ligação a um IP de loopback secundário e configuração bind-interfaces
por meio de /etc/dnsmasq.d/network-manager
). Se você instalar uma instância dnsmasq global e manter a instância do NM, verifique novamente /etc/resolv.conf
qual delas o host usará por padrão.
Embora você possa personalizar a instância dnsmasq do NetworkManager conforme mostrado acima, se desejar um servidor DNS que se vincule a interfaces públicas, você deve instalar o dnsmasq
pacote (o NetworkManager usa apenas dnsmasq-base
, que não configura uma instância global) e colocar sua configuração em /etc/dnsmasq.d/*.conf
. A instância escrava do NetworkManager destina-se apenas à ligação à interface de loopback e configurá-la além desse escopo correria o risco de quebrá-la.
Em resumo, para alguém que deseja apenas cache 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 configurada de forma personalizada, 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
Responder3
Além das respostas anteriores a este post, gostaria de acrescentar que a dnsmasq-base
instância do Network-manager também seguirá a addn-hosts
diretiva (colocada em um arquivo de configuração criado abaixo de /etc/NetworkManager/dnsmasq-shared.d/), forçando o dnmasq -base para ler o /etc/hosts
arquivo local, apesar do dnsmasq ser chamado com a --no-hosts
opção pelo Network-Manager
Dessa forma, consegui configurar com sucesso um servidor DNS local em meu laptop Mint 20.1. Não há necessidade de mexer com endereços IP (uma configuração adequada /etc/hosts
é fornecida...)
Encontre um exemplo de trabalho abaixo...
# /etc/NetworkManager/dnsmasq-shared.d/local-DNS.conf
domain=local.wifi // specify the (local) DNS-domain
addn-hosts=/etc/hosts // force dnmasq to read /etc/hosts despite --no-host
bogus-priv // do not forward private reverse lookups to upstream server (not needed if there is none...)
dhcp-option=6,[IP-OF-WIFI_IF] // tell client to use [IP-OF-WIFI_IF] as DNS-Server
Responder4
Eu queria atribuir um MAC específico a um endereço IP específico e, para fins de estabilidade, usar o Network Manager/dnsmasq padrão tanto quanto possível.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.ctem o comentário sobre o uso de --conf-file para ignorar configurações, mas mais tarde no arquivo 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, após configurar um Hot Spot 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 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 na obtenção do endereço IP apropriado pelo meu dispositivo.
Sim, isso está errado porque significa que todas as invocações do dnsmasq pelo NetworkManager receberão esta declaração, mas neste caso é inofensivo porque 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 como é proposto emhttps://gist.github.com/magnetikonline/6236150
A solução certa seria modificar como o dnsmasq é invocado para usar corretamente os arquivos de configuração do dnsmasq. Eu entendo o desejo de que o Network Manager "simplesmente funcione", mas tornar as ferramentas à prova de idiotas significa que somente idiotas podem usá-las.