New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie kann ich DNS-Auflösungsfehler mit einer Linux-Instance in Amazon EC2 vermeiden?
Ich möchte DNS-Auflösungsfehler bei Amazon Elastic Compute Cloud (Amazon EC2)-Linux-Instance vermeiden.
Kurzbeschreibung
Um die CPU- und Netzwerkauslastung zu verringern und DNS-Auflösungsfehler zu vermeiden, sollten Sie einen DNS-Cache verwenden.
Wenn Sie einen DNS-Cache verwenden, um externe DNS-Ressourcen abzufragen, dann beantwortet der Cache die meisten wiederkehrenden DNS-Anfragen lokal. Wenn der Cache dies tut, interagiert er nicht mit dem DNS-Resolver über das Netzwerk. Sie können externe DNS-Ressourcen wie in den folgenden Beispielen abfragen:
- Amazon Relational Database Service (Amazon RDS)
- Amazon ElastiCache
- Amazon Simple Storage Service (Amazon S3)
Das folgende Verfahren gilt für alle Versionen von Amazon Linux. Wenn Sie eine andere Distribution verwenden, wählen Sie die Dokumentation für Ihre Distribution aus der folgenden Liste aus:
- Informationen zu Debian finden Sie unter Lokales Caching auf der Website debian.org.
- Informationen zu Ubuntu finden Sie unter Lokaler DNS-Cache auf der Ubuntu-Website.
- Informationen zu Red Hat Enterprise Linux (RHEL) finden Sie im Red-Hat-Kundenportal unter So konfigurieren Sie den DNS-Caching-Server mit dnsmasq in RHEL.
Lösung
Richten Sie einen lokalen DNS-Cache mit dnsmasq ein
Um einen lokalen DNS-Cache einzurichten, verwenden Sie dnsmasq. Weitere Informationen finden Sie unter dnsmasq auf der Website thekelleys.org.uk.
Führen Sie die folgenden Schritte aus:
-
Führen Sie den folgenden Befehl aus, um den dnsmasq-Server zu installieren:
sudo yum install -y dnsmasq
-
Um einen dedizierten Systembenutzer für die Ausführung von dnsmasq zu erstellen, führen Sie den folgenden Befehl aus:
sudo groupadd -r dnsmasqsudo useradd -r -g dnsmasq dnsmasq
Hinweis: dnsmasq läuft normalerweise als Root-Benutzer, wechselt aber nach dem Start zu einem anderen Benutzer. Standardmäßig ist der Benutzer niemand. Wenn dnsmasq zu einem anderen Benutzer wechselt, werden die Root-Rechte gelöscht.
-
Um eine Kopie der Datei dnsmasq.conf zu erstellen, führen Sie den folgenden Befehl aus:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
Um die Konfigurationsdatei mit einem Texteditor zu öffnen, führen Sie den folgenden Befehl aus:
sudo vim /etc/dnsmasq.conf
-
Führen Sie den folgenden Beispielbefehl aus, um die Datei /etc/dnsmasq.conf zu bearbeiten:
# Server Configurationlisten-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-priv
Hinweis: Die Option bogus-priv in dnsmasq führt dazu, dass eine umgekehrte DNS-Suche für private IP-Bereiche 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. Wenn Sie eine erfolgreiche umgekehrte Suche durchführen möchten, kommentieren oder entfernen Sie bogus-priv.
-
Erstellen Sie die Datei /etc/resolv.dnsmasq. Führen Sie dann den folgenden Befehl aus, um den Amazon DNS-Server oder die benutzerdefinierten Domainnamenserver festzulegen, die Sie in den DHCP-Optionssätzen angegeben haben:
sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"
Hinweis: Weitere Informationen zu DNS-Serverstandorten finden Sie unter Was ist DHCP? In einigen Fällen müssen Sie die Datei /etc/resolv.dnsmasq anpassen, um den Nameserver für dieses Netzwerk zu verwenden. Sie erstellen ein AMI von einer Instance mit dem dnsmasq-Cache, um es in einer anderen VPC mit einer anderen CIDR zu starten. Oder passen Sie die Datei an, wenn Sie in Ihren DHCP-Optionen einen benutzerdefinierten DNS-Server angeben.
-
Um den dnsmasq-Server neu zu starten und den Dienst so einzustellen, dass er beim Booten gestartet wird, führen Sie eine der folgenden Aktionen aus.
Um Amazon Linux 1 beim Booten zu starten, führen Sie den folgenden Befehl aus:sudo service dnsmasq restart sudo chkconfig dnsmasq on
Führen Sie den folgenden Befehl aus, um Amazon Linux 2 und Amazon Linux 2023 beim Neustart zu starten:
sudo systemctl restart dnsmasq.service sudo systemctl enable dnsmasq.service
-
Verwenden Sie den folgenden dig-Befehl, um zu überprüfen, ob dnsmasq korrekt funktioniert:
dig aws.amazon.com @127.0.0.1
Wenn die Antwort der folgenden Beispielantwort ähnelt, funktioniert der dnsmasq-Cache korrekt:
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 41 IN A 54.239.31.69 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ...
-
Legen Sie den dnsmasq-DNS-Cache als Standard-DNS-Resolver fest.
Hinweis: Sie müssen den von DHCP bereitgestellten Standard-DNS-Resolver unterdrücken. Ändern oder erstellen Sie dazu die Datei /etc/dhcp/dhclient.conf. Weitere Informationen finden Sie unter Wie weise ich einer Amazon EC2-Instance einen statischen DNS-Server zu, der beim Neustart bestehen bleibt?Führen Sie dann den folgenden Befehl aus, um den Standard-DNS-Resolver als Fallback-Option zu konfigurieren:
sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
-
Führen Sie eine der folgenden Aktionen aus, um die Änderung zu übernehmen. Führen Sie den folgenden dhclient-Befehl aus:
sudo dhclient
-oder-
Führen Sie den folgenden Befehl aus, um den Netzwerkdienst neu zu starten:sudo systemctl restart network
-oder-
Führen Sie den folgenden Befehl aus, um Ihre Instance neu zu starten:sudo reboot
**Hinweis:**Führen Sie für Amazon Linux 2023
sudo systemctl restart systemd-networkd.service
anstelle von dhclientaus.
Um zu überprüfen, ob Ihre Instance den DNS-Cache verwendet, führen Sie den folgenden dig-Befehl aus:dig aws.amazon.com
Wenn die Antwort darauf hinweist, dass der antwortende Server 127.0.0.1 ist, funktioniert der DNS-Cache ordnungsgemäß.
Beispielantwort:; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 55 IN A 54.239.31.69 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) <<<------- ...
Automatisieren von dnsmasq
Sie können eine der folgenden Methoden verwenden, um die Installation und Konfiguration von dnsmasq als DNS-Resolver unter Amazon Linux zu automatisieren:
- AutomateDnsmasq.sh-Bash-Skript
- AutomateDnsmasq.cloudinit-Direktiven
Weitere Informationen zum Bash-Skript AutomateDnsmasq.sh finden Sie unter #!/bin/bash auf der GitHub-Website.
Weitere Informationen zu den AutomateDnsmasq.cloudinit-Direktiven finden Sie unter #cloud-config auf der GitHub-Website.
Wenn Sie die dnsmasq-Installation auf anderen Linux-Distributionen automatisieren möchten, können Sie eine beliebige der beiden Dateien verwenden, um die erforderlichen Anpassungen vorzunehmen.
Wenn beide Dateien die alternative Amazon-DNS-Serveradresse 169.254.169.253 verwenden, können die Dateien auf VPC-Instances ausgeführt werden.
Sie können eine beliebige der beiden Dateien beim Start ausführen, indem Sie den Inhalt der Datei in das Benutzerdatenfeld übergeben. Um die Aktionen auf einer Instance auszuführen, können Sie das Bash-Skript als eigenständiges Skript ausführen oder einen AWS Systems Manager Run Command verwenden.
Gehen Sie wie folgt vor, um das Bash-Skript als eigenständiges Skript auszuführen:
-
Um das Skript auf Ihre Instance herunterzuladen und es lauffähig zu machen, führen Sie den folgenden Befehl aus:
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh
-
Führen Sie den folgenden Befehl als Root-Benutzer aus oder verwenden Sie sudo:
sudo ./AutomateDnsmasq.sh
Ähnliche Informationen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr