Wie kann ich eine lokale Wildcard (127.0.0.1) -Domänenauflösung am 18.04 einrichten?


18

Unter Ubuntu 14.04 verwende ich dnsmasq, um Wildcard-Domains von example.com auf dem lokalen Computer (Desktop-Computer zu Hause) aufzulösen.

Nach langem Durchlesen kann ich das für mein ganzes Leben bei einer Neuinstallation vom 18.04. Nicht gleich aussortieren.

Im Moment möchte ich nur Folgendes erreichen:

  • für ping example.com zu pingen 127.0.0.1 und nicht 93.184.216.34;
  • um ping anysubdomain.example.com auch 127.0.0.1 zu pingen;
  • und um ping google.com die echte google.com über den Router / IP-DNS zu pingen.

Das muss doch einfach, ja sogar trivial sein?

Aber ich bin ratlos. Ich bekomme die Auflösung von example.com, aber nur auf Kosten von allem anderen.

Wie kann ich das machen?


1
Warum nicht einfach dnsmasq wie am 14.04 installieren?
Vidarlo

1
@vidarlo Natürlich war das das erste, was ich getan habe, wie ich in meiner Frage angegeben habe. Im Gegensatz zu 14.04 führt dies jedoch zu einem Fehler "Empfangs-Socket für Port 53 konnte nicht erstellt werden: Adresse bereits verwendet". Die von mir akzeptierte Antwort funktioniert einwandfrei, ohne dass dnsmasq explizit installiert wird.
Nick Rice

Antworten:


27

Hier sind die Schritte für Ubuntu 18.04. Es ist ein bisschen lang, da systemd-resolvedes nicht sehr gut mit spielt, NetworkManagerwenn es mit konfiguriert ist dnsmasq.

Dennoch empfehle ich immer noch ausgehend dnsmasqvon NetworkManager, weil die Netzwerkverbindung ändert (WIFI, verdrahtet, ...) werden transparent behandelt werden.

Aktivieren Sie dnsmasq in NetworkManager

Bearbeiten Sie die Datei /etc/NetworkManager/NetworkManager.confund fügen Sie die Zeile dns=dnsmasqin den [main]Abschnitt ein. Dies sieht folgendermaßen aus:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Überlassen Sie NetworkManager die Verwaltung /etc/resolv.conf

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

Konfigurieren example.com

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

Nachladen NetworkManagerund testen

NetworkManager sollte neu geladen werden, damit die Änderungen wirksam werden.

sudo systemctl reload NetworkManager

Dann können wir überprüfen, ob wir eine übliche Site erreichen können:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

Stellen Sie zum Schluss sicher, dass die example.comund Subdomains wie folgt aufgelöst sind 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

was meinst du mit "systemd-resolved spielt nicht sehr gut mit networkmanager"?
Sebastian Stark

1
Wenn NetworkManager dns = dnsmasq verwendet, sollte systemd-resolved angewiesen werden, dnsmasq zu verwenden. Dies kann automatisch erfolgen.
PIM

1
Danke, das hat einwandfrei funktioniert! Es scheint, als ob ich dir das Kopfgeld für eine weitere Stunde nicht geben kann, und da es morgens um eins weg ist, gehe ich jetzt ins Bett und werde das tun, wenn ich morgen wieder einschalte.
Nick Rice

2
Genial. Ich habe viele verschiedene Techniken gelesen. Dies ist die, die endlich funktioniert hat.
Redsandro

3
Für diejenigen, die es vorziehen, wieder zu systemd aufgelöst zurückzukehren, wird standardmäßig /etc/resolv.confauf /run/systemd/resolve/stub-resolv.confverwiesen.
Pothi Kalimuthu

2

Stellen Sie zunächst sicher, dass in /etc/NetworkManager/NetworkManager.confder folgenden Zeile nicht vorhanden oder auskommentiert ist:

dns=dnsmasq

Starten Sie NetworkManager neu:

sudo systemctl restart NetworkManager

Stellen Sie sicher, dass das von NetworkManager gesteuerte dnsmasq nicht mehr ausgeführt wird, indem Sie den Prozess beenden oder das System neu starten.

Dann installiere dnsmasq:

sudo apt install dnsmasq

Fügen Sie Folgendes hinzu zu /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Starten Sie dnsmasq neu:

sudo systemctl restart dnsmasq

Jetzt sollten Sie ein Wildcard-DNS für example.com überschreiben.


1
Ich konnte das nicht zum Laufen bringen. Unmittelbar nach einer sauberen Minimalinstallation (mit der Option "Datenträger löschen") wird der sudo apt install dnsmasqFehler "Empfangs-Socket für Port 53 konnte nicht erstellt werden: Bereits verwendete Adresse" ausgegeben. Ich fuhr trotzdem bis zum Ende fort, falls ein späterer Schritt das behebt, aber es hat nicht geklappt und das hat nicht geklappt.
Nick Rice

Dann lief das von NetworkManager gestartete dnsmasq noch. Es sollte also zuerst deaktiviert und schließlich beendet werden, und erst dann sollte das dnsmasq-Paket installiert werden.
Sebastian Stark

Danke, Sebastian. Allerdings habe ich die Antwort von pim bereits akzeptiert, was einwandfrei funktioniert hat, sodass ich jetzt weitermachen kann, ohne weiter damit zu spielen.
Nick Rice

@ NickRice Kein Problem damit, aber vielleicht wollen andere es versuchen
Sebastian Stark

Ja natürlich, Sebastian. Ich habe Ihre Antwort zuerst ausprobiert, weil es die einfachste war, und wenn es nur einen zusätzlichen ersten Schritt braucht, dann ist es ein sehr guter.
Nick Rice

0

Dies ist nicht so einfach wie das Bearbeiten der Hosts-Datei. Sie haben mehrere Möglichkeiten:

Dieser Python-DNS-Proxy , der Platzhalter in / etc / hosts verarbeitet

Verwenden von DNSmasq


Vielen Dank. Ihr Link zur DNSmasq-Frage lautet, was ich in 14.04 mache. Dasselbe in einer neuen 18.04-Installation zu tun, funktioniert aufgrund eines Portkonflikts nicht. Im Vergleich dazu muss also sofort etwas anderes getan werden. Wenn ich mir den ganzen Code ansehe, der für den Python-DNS-Proxy benötigt wird, kann ich nicht glauben, dass alles notwendig ist. Ich nehme an, es war nicht vorher, außer für diejenigen, die darauf bestanden, / etc / hosts zu verwenden.
Nick Rice

Können Sie netstat -tulpnüberprüfen, was den Port verwendet? EDIT: Nevermind, sah die akzeptierte Antwort. das problem ist systemd-resolve.
Harikrishnan R
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.