Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie vermeide ich Fehler bei der DNS-Auflösung in meiner Amazon EC2 Linux-Instance?
Ich möchte DNS-Auflösungsfehler in meiner Amazon Elastic Compute Cloud (Amazon EC2)-Linux-Instance vermeiden.
Kurzbeschreibung
Um Fehler bei der DNS-Auflösung zu vermeiden, wende einen DNS-Cache an.
Wenn du einen DNS-Cache verwendest, um externe DNS-Ressourcen abzufragen, beantwortet der Cache lokal die meisten wiederkehrenden DNS-Anfragen. In diesem Szenario, interagiert der Cache nicht mit dem DNS-Resolver über das Netzwerk. Du kannst externe DNS-Ressourcen wie in den folgenden Beispielen abfragen:
- Amazon Relational Database Service (Amazon RDS)
- Amazon ElastiCache
- Amazon Simple Storage Service (Amazon S3)
Du kannst die folgenden Lösungsschritte für alle Versionen von Amazon Linux verwenden. Wenn du eine andere Distribution verwendest, lies die Dokumentation für die Distribution:
- Für Debian siehe Lokales Caching auf der Debian-Website.
- Für Ubuntu siehe Dnsmasq auf der Ubuntu-Website.
- Für Red Hat Enterprise Linux (RHEL) siehe So konfigurierst du den DNS-Caching-Server mit dnsmasq in RHEL auf der Red Hat-Website.
Lösung
Hinweis: Die folgenden Lösungsschritte verwenden 169.254.169.253 als DNS-Resolver-IP-Adresse. Wenn du einen anderen DNS-Resolver verwendest, ersetze 169.254.169.253 durch die DNS-Resolver-IP-Adresse.
Einen lokalen DNS-Cache mit dnsmasq einrichten
Um einen lokalen DNS-Cache einzurichten, verwenden Sie dnsmasq. Weitere Informationen finden Sie unter dnsmasq auf der Website thekelleys.org.uk.
Führe die folgenden Schritte aus:
-
Führe den folgenden Befehl aus, um den dnsmasq-Server zu installieren:
sudo yum install -y dnsmasq -
Wenn die Instance auf Amazon Linux 2023 (AL2023) läuft, fahre mit Schritt 3 fort. Um einen dedizierten Systembenutzer für die Ausführung von dnsmasq zu erstellen, führe den folgenden Befehl aus:
sudo groupadd -r dnsmasq sudo useradd -r -g dnsmasq dnsmasqHinweis: dnsmasq wird in der Regel als Root-Benutzer ausgeführt. Der Benutzer ändert sich jedoch nach dem Start und löscht die Root-Berechtigungen. Standardmäßig ist der Benutzer niemand.
-
Führe den folgenden Befehl aus, um ein Backup der Datei dnsmasq.conf zu erstellen:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori -
Führe den folgenden Befehl aus, um die Konfigurationsdatei /etc/dnsmasq.conf mit dem vim-Texteditor zu erstellen und zu öffnen:
sudo vim /etc/dnsmasq.confHinweis: Du kannst einen beliebigen Texteditor wie vi oder nano verwenden, um die Datei /etc/dnsmasq.conf zu ändern.
-
Gib in der Datei /etc/dnsmasq.conf den folgenden Inhalt ein:
# Server Configuration listen-address=127.0.0.1 port=53 bind-interfaces user=dnsmasq group=dnsmasq pid-file=/var/run/dnsmasq.pid # Name resolution options resolv-file=/etc/resolv.dnsmasq cache-size=500 neg-ttl=60 domain-needed bogus-privHinweis: Die Option bogus-priv in dnsmasq führt dazu, dass eine umgekehrte DNS-Suche für private IP-Adressbereiche fehlschlägt, die sich nicht in /etc/hosts befinden. Diese Option kann auch dazu führen, dass eine umgekehrte DNS-Suche für die DHCP-Lease-Datei (Dynamic Host Configuration Protocol) fehlschlägt. Um eine erfolgreiche umgekehrte Suche durchzuführen, kommentiere oder entferne bogus-priv.
-
Erstelle die Datei /etc/resolv.dnsmasq und lege den Amazon DNS-Server oder die benutzerdefinierten Domainnamenserver fest, die du in den DHCP-Optionssätzen angegeben hast. Führe den folgenden Befehl aus:
sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"Hinweis: Weitere Informationen zu DNS-Serverstandorten findest du unter Was ist DHCP? Du kannst auch den Serverstandort 169.254.169.253 anpassen, wenn du ein Amazon Machine Image (AMI) aus einer Instance mit dem dnsmasq-Cache erstellen, um es in einer anderen Virtual Private Cloud (VPC) mit einem anderen CIDR zu starten.
-
Um den dnsmasq-Server neu zu starten und den Service so einzustellen, dass er beim Booten gestartet wird, führe je nach Distribution einen der folgenden Befehle aus.
Amazon Linux 1 (AL1):sudo service dnsmasq restart sudo chkconfig dnsmasq onAmazon Linux 2 (AL2) und AL2023:
sudo systemctl restart dnsmasq.service sudo systemctl enable dnsmasq.service -
Führe den folgenden Befehl aus, um zu überprüfen, ob dnsmasq korrekt funktioniert:
dig aws.amazon.com @127.0.0.1Wenn die Antwort dem folgenden Beispiel ähnelt, funktioniert der dnsmasq-Cache wie erwartet:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.13.11 <<>> aws.amazon.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33958 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 300 IN CNAME tp.8e49140c2-frontier.amazon.com. tp.8e49140c2-frontier.amazon.com. 9 IN CNAME dr49lng3n1n2s.cloudfront.net. dr49lng3n1n2s.cloudfront.net. 59 IN A 108.158.61.67 dr49lng3n1n2s.cloudfront.net. 59 IN A 108.158.61.79 dr49lng3n1n2s.cloudfront.net. 59 IN A 108.158.61.96 dr49lng3n1n2s.cloudfront.net. 59 IN A 108.158.61.102 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ... -
Lege den dnsmasq-DNS-Cache als Standard-DNS-Resolver fest.
Hinweis: Du musst den von DHCP bereitgestellten Standard-DNS-Resolver unterdrücken. Ändere oder erstelle dazu die Datei /etc/dhcp/dhclient.conf.
Führe für AL2 den folgenden Befehl aus:sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"Führe für AL2023 den folgenden Befehl aus:
sudo bash -c 'echo "DNS=127.0.0.1" >> /etc/systemd/resolved.conf' sudo bash -c 'echo "DNS=169.254.169.253" >> /etc/systemd/resolved.conf'Hinweis: AL2023 verwendet systemd-networkd als Standard-DNS-Resolver.
-
Um die Änderung anzuwenden, führe den folgenden Befehl basierend auf der Linux-Distribution aus:
AL2:
sudo dhclient
AL2023:
sudo systemctl restart systemd-resolved.service
-oder-
Führen Sie den folgenden Befehl aus, um den Netzwerkdienst neu zu starten:
sudo systemctl restart network
-oder-
Führe den folgenden Befehl aus, um die Instance neu zu starten:
sudo reboot
- Führe den folgenden Befehl aus, um zu überprüfen, ob die Instance den DNS-Cache verwendet:
dig aws.amazon.com
Wenn die Ausgabe zeigt, dass der antwortende Server 127.0.0.1 ist, funktioniert der DNS-Cache wie erwartet.
Beispielausgabe:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.13.11 <<>> aws.amazon.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29129 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 297 IN CNAME tp.8e49140c2-frontier.amazon.com. tp.8e49140c2-frontier.amazon.com. 25 IN CNAME dr49lng3n1n2s.cloudfront.net. dr49lng3n1n2s.cloudfront.net. 41 IN A 108.158.61.102 dr49lng3n1n2s.cloudfront.net. 41 IN A 108.158.61.96 dr49lng3n1n2s.cloudfront.net. 41 IN A 108.158.61.79 dr49lng3n1n2s.cloudfront.net. 41 IN A 108.158.61.67 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) <------------- ...
dnsmasq für neue Instances automatisieren
Du kannst eine der folgenden Methoden verwenden, um die Installation und Konfiguration von dnsmasq als DNS-Resolver unter Amazon Linux zu automatisieren:
- AutomateDnsmasq.sh-Bash-Skript verwenden. Informationen zum Herunterladen der Datei findest du unter AutomateDnsmasq.sh auf der GitHub-Website.
- Verwende AutomateDnsmasq.cloudinit-Direktiven. Um die Datei herunterzuladen, siehe AutomateDnsmasq.cloudInit auf der GitHub-Website.
Um die dnsmasq-Installation auf anderen Linux-Distributionen zu automatisieren, verwende eine der vorherigen Dateien, um die erforderlichen Anpassungen vorzunehmen. Wenn du für beide Dateien die alternative Amazon-DNS-Serveradresse 169.254.169.253 verwendest, können die Dateien auf VPC-Instances ausgeführt werden.
Um eine der beiden Dateien beim Start auszuführen, gib den Dateiinhalt in das Feld „Benutzerdaten“ ein. Du kannst AWS Systems Manager-Befehle ausführen verwenden, um das Bash-Skript auszuführen. Es hat sich bewährt, die Direktiven nur für die Initialisierung beim ersten Start zu verwenden.
Gehe wie folgt vor, um das Bash-Skript als eigenständiges Skript auszuführen:
-
Um das Skript auf der Instance herunterzuladen und es lauffähig zu machen, führe den folgenden Befehl aus:
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.sh chmod +x AutomateDnsmasq.sh -
Um das Skript auszuführen, führe den folgenden Befehl als Root-Benutzer aus:
sudo ./AutomateDnsmasq.sh
Ähnliche Informationen
- Themen
- Compute
- Tags
- Amazon EC2Linux
- Sprache
- Deutsch
Ähnliche Videos

