Como configurar a resolução de domínio curinga local (127.0.0.1) no 18.04?

18

No Ubuntu 14.04, estou usando o dnsmasq para resolver domínios curinga example.com na máquina local (computador desktop em casa).

Depois de muita leitura, não consigo resolver o mesmo em uma instalação limpa do 18.04.

Tudo o que quero alcançar no momento é:

  • para ping example.com executar ping em 127.0.0.1 e não em 93.184.216.34;
  • para ping anysubdomain.example.com também executar ping em 127.0.0.1;
  • e para ping google.com executar ping no google.com real via DNS do roteador / IP.

Certamente isso deve ser simples, até trivial?

Mas estou perplexo. Eu posso resolver o exemplo.com, mas apenas à custa de quebrar todo o resto.

Como posso fazer isso?

Nick Rice
fonte
11
Por que não instalar o dnsmasq como você fez no 14.04?
Vidarlo
11
@vidarlo Bem, é claro que foi a primeira coisa que fiz, como indiquei na minha pergunta. Mas, diferentemente da versão 14.04, isso resulta em um erro "falha ao criar o soquete de escuta para a porta 53: Endereço já em uso". A resposta que aceitei funciona bem sem instalar o dnsmasq explicitamente.
Nick Rice

Respostas:

30

Aqui estão as etapas para o ubuntu 18.04. É um pouco longo, já systemd-resolvedque não toca muito bem NetworkManagerquando configurado com dnsmasq.

No entanto, eu ainda recomendo começar dnsmasqa partir NetworkManager, porque as mudanças de conectividade de rede (Wi-Fi, com fios, ...) serão tratadas de forma transparente.

Habilitar dnsmasq no NetworkManager

Edite o arquivo /etc/NetworkManager/NetworkManager.confe adicione a linha dns=dnsmasqà [main]seção, ela ficará assim:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Deixe o NetworkManager gerenciar /etc/resolv.conf

sudo rm /etc/resolv.conf ; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

Configurar example.com

echo 'address=/.example.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/example.com-wildcard.conf

Recarregar NetworkManagere testar

O NetworkManager deve ser recarregado para que as alterações entrem em vigor.

sudo systemctl reload NetworkManager

Em seguida, podemos verificar se podemos acessar algum site comum:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

E, finalmente, verifique se os example.comsubdomínios e são resolvidos como 127.0.0.1:

dig example.com askubuntu.example.com a.b.c.d.example.com +short
127.0.0.1
127.0.0.1
127.0.0.1
pim
fonte
o que você quer dizer com "systemd-resolved não funciona muito bem com o NetworkManager"?
Sebastian Stark
11
Quando o NetworkManager usa dns = dnsmasq, ele deve informar ao systemd-resolved para usar o dnsmasq, podendo ser automático.
pim
11
Obrigado, isso funcionou perfeitamente! Parece que não posso lhe dar a recompensa por mais uma hora, e como já passou uma da manhã aqui, vou para a cama agora e farei isso quando ligar novamente amanhã.
Nick Rice
2
Impressionante. Eu li muitas técnicas diferentes. Este é o que finalmente funcionou.
Redsandro 26/07
3
Para aqueles que preferem voltar ao systemd-resolved, /etc/resolv.confaponte para /run/systemd/resolve/stub-resolv.confpor padrão.
Pothi Kalimuthu 8/08/18
2

Primeiro, verifique se /etc/NetworkManager/NetworkManager.confa seguinte linha não está presente ou comentada:

dns=dnsmasq

Reinicie o NetworkManager:

sudo systemctl restart NetworkManager

Verifique se o dnsmasq controlado pelo NetworkManager não está mais em execução, finalizando o processo ou reiniciando o sistema.

Em seguida, instale o dnsmasq:

sudo apt install dnsmasq

Adicione o seguinte a /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Reinicie o dnsmasq:

sudo systemctl restart dnsmasq

Agora você deve ter uma substituição de DNS curinga por exemplo.com.

Sebastian Stark
fonte
11
Não consegui fazer isso funcionar. Imediatamente após uma instalação mínima limpa (com a opção "apagar disco"), é sudo apt install dnsmasqemitido o erro "falha ao criar o soquete de escuta para a porta 53: Endereço já em uso". Continuei até o fim de qualquer maneira, caso uma etapa posterior resolvesse isso, mas não funcionou e isso não funcionou.
Nick Rice
Em seguida, o dnsmasq iniciado pelo NetworkManager ainda estava em execução. Portanto, ele deve primeiro ser desativado, eventualmente morto, e somente então o pacote dnsmasq deve ser instalado.
Sebastian Stark
Obrigado Sebastian. No entanto, eu já aceitei a resposta de pim, que funcionou perfeitamente, por isso sou capaz de seguir em frente sem brincar mais com ela.
Nick Rice
@NickRice Nenhum problema com isso, mas talvez outros querer tentar
Sebastian Stark
Sim, claro, Sebastian. Tentei sua resposta primeiro porque era a mais simples e, se tudo o que precisa é de uma etapa inicial adicional, é muito boa.
Nick Rice
0

Isso não será tão simples quanto editar o arquivo hosts. Você tem algumas opções:

Esse proxy DNS python que manipulará caracteres curinga em / etc / hosts

Usando DNSmasq

Harikrishnan R
fonte
Obrigado. Seu link para a pergunta DNSmasq é o que estou fazendo na 14.04. Apenas fazer o mesmo em uma nova instalação 18.04 não está funcionando devido a um conflito de portas. Então, fora da caixa, algo mais precisa ser feito em comparação com isso. Olhando para todo o código necessário para o proxy DNS python, não posso acreditar em tudo o que é necessário. Não era antes, exceto, suponho, para aqueles que insistiam em usar o / etc / hosts.
Nick Rice
Você pode fazer netstat -tulpnpara verificar o que está usando a porta? EDIT: Nevermind, viu a resposta aceita. o problema é systemd-resolve.
Harikrishnan R