Comment puis-je configurer la résolution de domaine générique local (127.0.0.1) le 18.04?

18

Sur Ubuntu 14.04, j'utilise dnsmasq pour résoudre les domaines wildcard example.com sur la machine locale (ordinateur de bureau à la maison).

Après de nombreuses lectures, je ne peux pas pour la vie de trier la même chose sur une installation propre de 18.04.

Tout ce que je veux réaliser pour le moment, c'est:

  • pour ping example.com envoyer une requête ping à 127.0.0.1 et non à 93.184.216.34;
  • pour ping anysubdomain.example.com également envoyer une requête ping à 127.0.0.1;
  • et pour ping google.com cingler le vrai google.com via le routeur / IP DNS.

Cela doit sûrement être simple, voire insignifiant?

Mais je suis perplexe. Je peux obtenir la résolution de example.com mais seulement au détriment de tout casser.

Comment puis-je faire ceci?

Nick Rice
la source
1
Pourquoi ne pas simplement installer dnsmasq comme vous l'avez fait le 14.04?
vidarlo
1
@vidarlo Bien sûr, c'était la première chose que j'ai faite, comme je l'ai indiqué dans ma question. Mais contrairement à la version 14.04, il en résulte une erreur «échec de création de socket d'écoute pour le port 53: adresse déjà utilisée». La réponse que j'ai acceptée fonctionne bien sans installer explicitement dnsmasq.
Nick Rice

Réponses:

30

Voici les étapes pour ubuntu 18.04. C'est un peu long car systemd-resolvedne fonctionne pas très bien avec une NetworkManagerconfiguration avec dnsmasq.

Pourtant , je recommande toujours à partir dnsmasqde NetworkManager, parce que les changements de connectivité réseau (WIFI, câblé, ...) seront traitées de manière transparente.

Activer dnsmasq dans NetworkManager

Modifiez le fichier /etc/NetworkManager/NetworkManager.confet ajoutez la ligne dns=dnsmasqà la [main]section, cela ressemblera à ceci:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Laissez NetworkManager gérer /etc/resolv.conf

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

Configurer example.com

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

Recharger NetworkManageret tester

NetworkManager doit être rechargé pour que les modifications prennent effet.

sudo systemctl reload NetworkManager

Ensuite, nous pouvons vérifier que nous pouvons accéder à un site habituel:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

Et enfin, vérifiez que les example.comsous-domaines et sont résolus comme 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
la source
que voulez-vous dire par "résolu par systemd ne fonctionne pas très bien avec NetworkManager"?
Sebastian Stark
1
Lorsque NetworkManager utilise dns = dnsmasq, il doit indiquer à systemd-resolution d'utiliser dnsmasq, peut être automatique.
pim
1
Merci, cela a parfaitement fonctionné! Il semble que je ne puisse pas vous donner la prime pendant encore une heure, et comme il est parti une heure du matin ici, je vais me coucher maintenant et je le ferai quand je reviendrai demain.
Nick Rice
2
Impressionnant. J'ai lu de nombreuses techniques différentes. C'est celui qui a finalement fonctionné.
Redsandro
3
Pour ceux qui préfèrent revenir à la résolution de systemd, /etc/resolv.confpointe /run/systemd/resolve/stub-resolv.confpar défaut.
Pothi Kalimuthu du
2

Assurez-vous d'abord que /etc/NetworkManager/NetworkManager.confla ligne suivante n'est pas présente ou mise en commentaire:

dns=dnsmasq

Redémarrez NetworkManager:

sudo systemctl restart NetworkManager

Assurez-vous que le dnsmasq contrôlé par NetworkManager ne fonctionne plus, soit en arrêtant le processus, soit en redémarrant votre système.

Installez ensuite dnsmasq:

sudo apt install dnsmasq

Ajoutez ce qui suit à /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Redémarrez dnsmasq:

sudo systemctl restart dnsmasq

Maintenant, vous devriez avoir un remplacement DNS générique pour example.com.

Sebastian Stark
la source
1
Je n'ai pas pu faire fonctionner ça. Immédiatement après une installation minimale propre (avec l'option «effacer le disque»), le sudo apt install dnsmasqmessage d'erreur «Échec de la création du socket d'écoute pour le port 53: adresse déjà utilisée» s'affiche. J'ai quand même continué jusqu'à la fin au cas où une étape ultérieure résoudrait cela, mais cela n'a pas fonctionné et cela n'a pas fonctionné.
Nick Rice
Ensuite, le dnsmasq qui est démarré par NetworkManager était toujours en cours d'exécution. Donc, il doit d'abord être désactivé, éventuellement tué, et alors seulement le package dnsmasq doit être installé.
Sebastian Stark
Merci, Sebastian. Cependant, j'ai déjà accepté la réponse de pim qui fonctionnait parfaitement, donc je peux continuer maintenant sans plus jouer avec.
Nick Rice
@NickRice Pas de problème avec ça, mais peut-être que d'autres veulent essayer
Sebastian Stark
Oui bien sûr, Sebastian. J'ai essayé votre réponse en premier parce qu'elle était la plus simple, et si tout ce dont elle a besoin est une étape initiale supplémentaire, elle est très bonne.
Nick Rice
0

Ce ne sera pas aussi simple que de modifier le fichier hosts. Vous avez plusieurs options:

Ce proxy DNS python qui gérera les caractères génériques dans / etc / hosts

Utilisation de DNSmasq

Harikrishnan R
la source
Merci. Votre lien vers la question DNSmasq est ce que je fais en 14.04. Faire de même dans une nouvelle installation 18.04 ne fonctionne pas en raison d'un conflit de port. Par conséquent, quelque chose d'autre doit être fait par rapport à cela. En regardant tout ce code nécessaire pour le proxy DNS python, je ne peux pas croire tout ce qui est nécessaire. Ce n'était pas avant, sauf, je suppose, pour ceux qui ont insisté pour utiliser / etc / hosts.
Nick Rice
Pouvez-vous faire netstat -tulpnpour vérifier ce qui utilise le port? EDIT: Nevermind, a vu la réponse acceptée. le problème est résolu par systemd.
Harikrishnan R