¿Cómo puedo configurar la resolución de dominio comodín local (127.0.0.1) en 18.04?

18

En Ubuntu 14.04 estoy usando dnsmasq para resolver dominios comodín example.com en la máquina local (computadora de escritorio en casa).

Después de leer mucho, no puedo resolverlo por la vida en una instalación limpia de 18.04.

Todo lo que quiero lograr en este momento es:

  • para ping example.com hacer ping 127.0.0.1 y no 93.184.216.34;
  • para ping anysubdomain.example.com también hacer ping 127.0.0.1;
  • y para ping google.com hacer ping al google.com real a través del enrutador / IP DNS.

¿Seguramente esto debe ser simple, incluso trivial?

Pero estoy perplejo. Puedo obtener la resolución de example.com pero solo a expensas de romper todo lo demás.

¿Cómo puedo hacer esto?

Nick Rice
fuente
1
¿Por qué no instalar dnsmasq como lo hizo en 14.04?
vidarlo
1
@vidarlo Bueno, por supuesto, eso fue lo primero que hice, como indiqué en mi pregunta. Pero a diferencia de 14.04 que da como resultado un error "error al crear el socket de escucha para el puerto 53: dirección que ya está en uso". La respuesta que acepté funciona bien sin instalar dnsmasq explícitamente.
Nick Rice

Respuestas:

30

Estos son los pasos para ubuntu 18.04. Es un poco largo ya systemd-resolvedque no juega muy bien NetworkManagercuando está configurado con dnsmasq.

Sin embargo, aún así, recomiendo a partir dnsmasqde NetworkManager, ya que los cambios de conectividad de red (WiFi, conexión de cable, ...) serán manejados de forma transparente.

Habilitar dnsmasq en NetworkManager

Edite el archivo /etc/NetworkManager/NetworkManager.confy agregue la línea dns=dnsmasqa la [main]sección, se verá así:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Deje que NetworkManager administre /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

Recargar NetworkManagery probar

NetworkManager debe recargarse para que los cambios surtan efecto.

sudo systemctl reload NetworkManager

Luego podemos verificar que podemos llegar a algún sitio habitual:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

Y, por último, verifique que los example.comsubdominios y se resuelvan 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
fuente
¿Qué quiere decir con "systemd-resolve no funciona muy bien con NetworkManager"?
Sebastian Stark
1
Cuando NetworkManager usa dns = dnsmasq, debería decirle a systemd-resolve que use dnsmasq, podría ser automático.
pim
1
¡Gracias, esto funcionó perfectamente! Parece que no puedo darte la recompensa por otra hora, y como ya pasó la una de la mañana, me voy a la cama ahora y lo haré cuando vuelva a encender mañana.
Nick Rice
2
Increíble. He leído muchas técnicas diferentes. Este es el que finalmente funcionó.
Redsandro
3
Para aquellos que prefieren volver al sistema resuelto, /etc/resolv.confapunta /run/systemd/resolve/stub-resolv.confpor defecto.
Pothi Kalimuthu
2

Primero asegúrese de que en /etc/NetworkManager/NetworkManager.confla siguiente línea no esté presente o comentado:

dns=dnsmasq

Reinicie NetworkManager:

sudo systemctl restart NetworkManager

Asegúrese de que el dnsmasq controlado por NetworkManager ya no se esté ejecutando, ya sea eliminando el proceso o reiniciando su sistema.

Luego instale dnsmasq:

sudo apt install dnsmasq

Agregue lo siguiente a /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Reinicie dnsmasq:

sudo systemctl restart dnsmasq

Ahora debería tener un comodín dns override para example.com.

Sebastian Stark
fuente
1
No pude hacer que esto funcione. Inmediatamente después de una instalación mínima limpia (con la opción "borrar disco") aparece el sudo apt install dnsmasqerror "error al crear el socket de escucha para el puerto 53: dirección que ya está en uso". Continué hasta el final de todos modos en caso de que un paso posterior lo resolviera, pero no funcionó y esto no funcionó.
Nick Rice
Luego, el dnsmasq que inicia NetworkManager todavía se estaba ejecutando. Por lo tanto, primero debe desactivarse, finalmente eliminarse, y solo entonces debe instalarse el paquete dnsmasq.
Sebastián Stark
Gracias Sebastian. Sin embargo, ya acepté la respuesta de Pim, que funcionó a la perfección, por lo que ahora puedo seguir adelante sin jugar más.
Nick Rice
@NickRice No hay problema con esto, pero tal vez otros quieran intentarlo
Sebastian Stark
Si por supuesto, Sebastian. Intenté su respuesta primero porque era la más simple, y si todo lo que necesita es un paso inicial agregado, entonces es muy bueno.
Nick Rice
0

Esto no será tan simple como editar el archivo hosts. Tienes unas cuantas opciones:

Este proxy DNS de Python que manejará comodines en / etc / hosts

Usando DNSmasq

Harikrishnan R
fuente
Gracias. Su enlace a la pregunta DNSmasq es lo que estoy haciendo en 14.04. Simplemente hacer lo mismo en una nueva instalación de 18.04 no funciona debido a un conflicto de puertos. Entonces, fuera de la caja, algo más debe hacerse en comparación con eso. Mirando todo ese código necesario para el proxy DNS de Python, no puedo creer todo lo que es necesario. No fue antes, excepto, supongo, para aquellos que insistieron en usar / etc / hosts.
Nick Rice
¿Puedes hacer netstat -tulpnpara verificar qué está usando el puerto? EDITAR: No importa, vi la respuesta aceptada. El problema es systemd-resolve.
Harikrishnan R