Wie man dnsmasq hinzufügt und systemd aufgelöst bleibt (18.04)

10

Ich möchte mit dnsmasq eine schnelle DNS-Auflösung erhalten und die Standard-System-Auflösung beibehalten.

Auf der Suche nach einem eleganten Weg, dies zu tun

cmak.fr
quelle
Sie wissen, dass systemd-Resolution auch DNS-Lookups zwischenspeichert? Sie benötigen dnsmasq nicht auf einem System mit systemd-Auflösung. Sie sollten lesen Ist systemd aufgelöst nützlich?
Aeyoun
Ich weiß - aber es gibt ein sehr bedeutendes 'Detail' ... - dnsmasq als riesiger DNS-Cache - Der DNS-Cache mit systemd-Auflösung ist sehr klein und kann nicht optimiert werden - Die DNS-Auflösungsgeschwindigkeit wird als riesiger Cache stark verbessert von dnsmasq wurde durch Anfragen gefüllt.
cmak.fr
Der nicht konfigurierte Standardcache in systemd- Resolution
Aeyoun
Tatsächlich leistet dnsmasq viel mehr als nur systemd-aufgelöst. Siehe gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 und gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh , um nur einige zu nennen.
Julius
@Aeyoun: Wenn Sie den vom System aufgelösten Quellcode lesen, können Sie sehen, dass das DNS-Cache-Limit von 4096 Bytes und keine Einträge beträgt. dnsmasq hat eine größere und konfigurierbare DNS-Cache-Größe.
cmak.fr

Antworten:

10

Ich wollte mit dnsmasq eine schnelle DNS-Auflösung erzielen und das Standard-Systemd-aufgelöste / NetworkManager-Setup für die zukünftige Verwendung unberührt lassen. Ja, das riesige DNS-Caching von dnsmasq kann die Browsing-Geschwindigkeit verbessern. Ja, das Ziel war es, das standardmäßige DNS-Setup vom 18.04 beizubehalten

  1. Installieren Sie dnmasq
  2. Konfigurieren Sie es (Listenadresse und DNS-Server)
  3. Konfigurieren Sie NetWorkManager für die manuelle DNS-Serveradresse
  4. Überprüfen Sie überprüfen

1 - Mit Sudo

apt-get -y install dnsmasq

2 - Mit Sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - Konfigurieren Sie mit USER den NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Überprüfen Sie die Überprüfung

  • Systemd-aufgelöstes Hören auf 127.0.0.53 wie standardmäßig
  • dnsmasq hört auf 127.0.0.1, wie in / etc / dnsmasq festgelegt
  • systemd-Resolution hat 127.0.0.1 von NetworkManager übernommen
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1
cmak.fr
quelle
1

Ich habe versucht, eine vernünftige Lösung zu finden, und es gibt verschiedene Ansätze.

Ich wollte höchstens innerhalb des Distributionslayouts bleiben und gleichzeitig alle geschäftlichen Anforderungen erfüllen. Dies ist, was ich gesammelt und getestet habe, um mit sauberem Ubuntu 18.04 und KDE Neon zu arbeiten:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(Bitte beachten Sie, dass der einzige allgemeine Unterschied zu den obigen Antworten darin besteht, dass der NetworkManager die DNS-Serverzuweisungen von dnsmasq automatisch verarbeitet

Venca B Spam
quelle
funktioniert aber was passiert, wenn der Netzwerkmanager mit apt-get --upgrade
cmak.fr
Um ehrlich zu sein, weiß ich es nicht. Es kommt darauf an, welcher Betreuer des Ubuntu 18.04 entscheidet. Wenn er / sie den vom System aufgelösten Dienst deaktiviert lässt und NetworkManager.conf (das im Konfliktfall standardmäßig interaktiv aufgelöst wird) nicht ändert, kann er bis Ubuntu 20.04 überleben, wo er hoffentlich behoben wird.
Venca B Spam
0

Wie Sie wissen, Docker kopieren Host /etc/resolv.conf auf Container - Datei , aber alle lokalen Name - Server zu entfernen.

Meine Lösung für dieses Problem besteht darin, weiterhin systemd-resolvd und NetworkManager zu verwenden, aber dnsmasq hinzuzufügen und damit DNS- Abfragen von Docker- Containern an systemd-resolvd weiterzuleiten .

Schritt für Schritt Anleitung:

  • Machen Sie /etc/resolv.conf zu einer "echten" Datei sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Erstellen Datei /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf sagen Networkmanager zu informieren systemd-resolvd aber nicht berühren /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Installieren Sie dnsmasq sudo apt-get -y install dnsmasq
  • Konfigurieren Sie dnsmasq in /etc/dnsmasq.conf für das Abhören von DNS- Abfragen, die von Docker kommen und den systemd-resolvd- Nameserver verwenden # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Bearbeiten Sie /etc/resolv.conf , um den systemd-resolvd- Nameserver (127.0.0.53) und die Host- IP (172.17.0.1) im Docker- Netzwerk zu verwenden # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Starten Sie die Dienste neu sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Weitere Informationen finden Sie in meinem Beitrag (auf Spanisch) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

Rubensa
quelle
-1

Ubuntu 18.10

IMHO, wenn Sie dnsmasq ausführen möchten, sollten Sie Ihre IP-Adresse statisch zuweisen, anstatt sie von dhcp zu erhalten. Auf diese Weise können Sie einfach alle systemd-aufgelösten deaktivieren.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl deaktiviere systemd aufgelöst

  3. sudo systemctl stop systemd-gelöst

  4. Weisen Sie Ihre IP-Adresse und Ihr Gateway manuell zu und weisen Sie Ihrem Computer die IP-Adresse als DNS zu.

  5. configure /etc/dnsmasq.conf (wirklich ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. Neustart
  8. sudo systemctl status dnsmasq

  9. Zeigen Sie DHCP auf Ihrem DHCP-Server auf Ihren glänzenden neuen DNSMASQ-Server (..if yumpto).

Leberwurst
quelle
Ich werde nicht implementieren, was Sie beschrieben haben. Ich möchte, dass die vom System aufgelöste Standardeinstellung für die spätere Verwendung von NetworkManager unberührt bleibt.
cmak.fr