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?


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

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.