Instalei recentemente o dnsmasq para atuar como servidor DNS na minha rede local. O dnsmasq escuta na porta 53, que já está em uso pelo ouvinte de stub DNS local em systemd-resolved .
Apenas parar o systemd-resolved e depois reiniciá-lo após a execução do dnsmasq resolve esse problema. Mas ele retorna após uma reinicialização: systemd-resolved é iniciado com preferência e o dnsmasq não inicia porque a porta 53 já está em uso.
A primeira pergunta óbvia, eu acho, é como fazer com que o resolvido pelo systemd entenda que ele não deve iniciar o ouvinte de stub do DNS local e, assim, manter a porta 53 para uso pelo dnsmasq?
Uma questão mais interessante, no entanto, é como os dois serviços geralmente devem trabalhar juntos. Eles são feitos para trabalhar lado a lado ou são resolvidos pelo sistema apenas da maneira que alguém usa dnsmasq?
sudo systemctl disable systemd-resolved
? dnsmasq se configurado corretamente deve lidar com a resolução de domínio, eu acho.sudo systemctl stop systemd-resolved
se estiver em execução. Usesudo systemctl status systemd-resolved
para verificarRespostas:
A partir do systemd 232 (lançado em 2017), você pode editar
/etc/systemd/resolved.conf
e adicionar esta linha:Isso desativará a ligação à porta 53.
A opção é descrita em mais detalhes na página de manual resolved.conf .
Você pode encontrar a versão do systemd com a qual seu sistema está executando:
fonte
Você pode desativar o
systemd-resolved
carregamento na inicialização usandosudo systemctl disable systemd-resolved
.Se você quiser executar os dois juntos, poderá redirecionar o
systemd-resolved
para usar o host local como o servidor de nomes principal. Isso garantirá que todas as consultas sejam direcionadas ao dnsmasq para resolução antes de atingir o servidor DNS externo. Isso pode ser feito adicionando a linhanameserver 127.0.0.1
na parte superior do seu/etc/resolv.conf
arquivo. Isso também desativará o cache local do systemd.Você pode ler mais no wiki do Arch Linux . Copiei isso de lá e ele cobre muito bem.
No entanto, isso não evita confiavelmente o erro no momento da inicialização, ou seja, o dnsmasq ainda falhará se o resolvido pelo systemd for iniciado primeiro. Se a sua versão
systemd
for nova o suficiente, use a resposta de Malvineous . Se sua versão dosystemd
é muito antiga, você pode solucionar esse problema modificando a unidade dnsmasq: na[Unit]
seção, incluaBefore=systemd-resolved
.Depois disso, se quiser, você pode criar um separado
/etc/dnsmasq-resolv.conf
arquivo para os servidores de nomes a montante e passá-lo usando o-r
ou--resolv-file
opção, ou adicionar os servidores de nomes de upstream para o arquivo de configuração dnsmasq e usar o-R
ou--no-resolv
opção. Dessa forma, você só tem o host local no seu/etc/resolv.conf
e tudo passa pelo dnsmasq.fonte
Before=systemd-resolved
na[Unit]
seção Dessa forma, o dnsmasq sempre será iniciado primeiro.A julgar pelas páginas de manual do systemd, não se destina a ser capaz de desativar manualmente o servidor DNS stub. Curiosamente, só notei o problema descrito após a atualização do systemd de 230 para 231.
Desabilitar o systemd-resolved não era uma opção para mim, porque eu preciso lidar com servidores DNS upstream recebidos por meio do DHCP.
Minha solução foi fazer o dnsmasq parar o systemd-resolved antes de iniciar e iniciá-lo novamente novamente.
Eu criei uma configuração drop-in em
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:Parece ser uma solução bastante hackeada, mas funciona.
fonte
DNSStubListener
no manual resolved.conf: "Observe que o ouvinte de stub do DNS é desativado implicitamente quando seu endereço de escuta e porta já estão em uso." É por isso que esse método funciona bem, eu acho.Acabei de ativar a opção "bind-interfaces" removendo '#' no início da linha em /etc/dnsmasq.conf.
Consegui iniciar o dnsmasq novamente:
Fui apontado para esta solução por esta discussão resolvida: adicione uma opção para desativar o resolvedor de stub
fonte
Haverá uma opção na
systemd
versão232
para desativar o ouvinte de stub. Consulte https://github.com/systemd/systemd/pull/4061 .fonte
Se você estiver usando uma instalação padrão do Ubuntu 18.04, isso pode ser causado por um conflito entre
systemd-resolved
(o servidor DNS padrão) ednsmasq
. Se vocêdnsmasq
se instalou deliberadamente porque o queria explicitamente, uma das outras respostas a esta pergunta, explicando como desabilitarsystemd-resolved
, provavelmente será útil para você. Se você não instalou explicitamentednsmasq
, é provável que esteja no lugar porque você está usandolxd
. Pode ser porque você realmente usalxd
para gerenciar contêineres, mas é mais provável que os snaps usemlxd
para protegê-lo quando os aplicativos são instalados. Da minha perspectiva, quero manterdnsmasq
(porquelxd
quer), mas também quero mantersystemd-resolved
como servidor DNS (porque é o que a equipe do Ubuntu escolheu e eu confio neles mais do que em mim).Então, isso parece ser um
lxd
problema no coração. Em caso afirmativo, a maneira como eu o corrigi , de acordo com uma postagem da lista de discussão lxd-users , é esta:$ lxc network edit lxdbr0
Isso editará sua configuração em um editor de terminal. Vai parecer algo assim:
Adicione três linhas a ele:
e isso deve causar
dnsmasq
, que está sendo executadolxd
, detectar loops de DNS. Isso, pelo menos para mim, resolveu o problema e parousystemd-resolved
ednsmasq
usando 100% da CPU.fonte
Aqui está a solução para (X) Ubuntu 18.04 Bionic.
Instale o dnsmasq
Desative o ouvinte resolvido pelo sistema na porta 53 (não toque em /etc/systemd/resolved.conf, pois pode ser substituído na atualização):
e reinicie
(alternativamente, desative-o completamente por
$ sudo systemctl disable systemd-resolved.service
)Exclua /etc/resolv.conf e crie novamente. Isso é importante, porque resolv.conf é um link simbólico para /run/systemd/resolve/stub-resolv.conf por padrão. Se você não excluir o link simbólico, o arquivo será substituído pelo systemd na reinicialização (mesmo que tenhamos desabilitado o systemd-resolved!). O NetworkManager (NM) também verifica se é um link simbólico para detectar a configuração resolvida pelo sistema.
Desative a substituição do /etc/resolv.conf pelo NM (também existe uma opção rc-manager, mas não funciona, apesar de ser descrito no manual do NM):
e reinicie-o:
Diga ao dnsmasq para usar o resolv.conf do NM:
e reinicie-o:
Use dnsmasq para resolver:
fonte
Eu resolvi assim:
Adicione ou remova o comentário da seguinte linha em / etc / default / dnsmasq :
Crie seu próprio arquivo de resolução (/etc/resolv.personal) para definir servidores de nomes. Você pode usar qualquer servidor de nomes aqui. Tirei duas de https://www.opennic.org
No /etc/dnsmasq.conf, adicione ou descomente a seguinte linha:
Em seguida, reinicie o dnsmasq e desative o resolvedor padrão: systemd-resolved.
fonte
Não sei por que os dois serviços estão tentando usar o mesmo endereço. Talvez você possa organizá-los como no meu caso no Xubuntu 18.04.1, onde a configuração deles é a seguinte:
Para resolver o systemd usando meu dnsmasq, basta definir:
Na minha configuração do dnsmasq, defino meus servidores de nomes externos:
Depois de reiniciar tudo:
systemd-resolved definirá o servidor DNS padrão como dnsmasq em:
fonte
/etc/resolv.conf
é um link simbólico para/run/systemd/resolve/resolv.conf
. Aparentemente, este é um dos quatro (!) Possíveis modos diferentes em que o systemd-resolvido pode estar operando. Acho que depende de como a sua distribuição o configura, ou seja, é verdade para o seu Xubuntu 18.04.1, mas pode ser diferente em outros sistemas.Não consegui que o dnsmasq começasse a usar as soluções encontradas online, ou seja, desabilitando o systemd-resolved, alterando o dnsmasq.conf para fazer "bind dynamic" em vez de "bind interfaces". Consegui fazê-lo iniciar na inicialização com o dnsmasq start After network-online.service em vez de network.service:
fonte
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetAqui está o que funcionou para mim (depois de horas de dor) no Ubuntu 18.10 Cosmic Cuttlefish. Fiz isso para aproveitar
dnsmasq
o mecanismo de armazenamento em cache comparativamente mais robusto e evitar as vulnerabilidades do resolver NGINX . Observe que estou usando a edição Ubuntu Server (noNetworkManager
/nmcli
, justsystemd-networkd
) e ela está sendo executada no AWS EC2, então eu também precisava manter o DNS e o DHCP trabalhando com o domínio de pesquisa padrão do EC2. Não queria desabilitarsystemd-resolved
completamente, porque não tenho idéia de como isso pode afetar as atualizações futuras. Tudo aqui é executado como root / sudo, a menos que seja indicado de outra forma (isso acontece por padrão quando transmitido como Dados do Usuário do EC2).Verifique se
127.0.0.1#53
está sendo usado para resolução e se o DNSSEC está funcionando com algo comodig +trace facebook.com
fonte
DNSStubListener=no
?