Wie kann ich DNS-Auflösungsfehler mit einer Linux-Instance in Amazon EC2 vermeiden?

Lesedauer: 5 Minute
0

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:

Behebung

Richten Sie einen lokalen DNS-Cache mit dnsmasq ein

Richten Sie einen lokalen DNS-Cache ein, indem Sie dnsmasq (für einen DHCP- und Cache-DNS-Server) verwenden. Einen Überblick über dnsmasq finden Sie in der dnsmasq-Dokumentation.

1.Installieren Sie den dnsmasq-Server:

sudo yum install -y dnsmasq

2.Erstellen Sie einen dedizierten Systembenutzer für die Ausführung von dnsmasq:

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 nobody). Dadurch werden die Root-Rechte gelöscht.

3.Erstellen Sie eine Kopie der Datei dnsmasq.conf:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.Öffnen Sie die Konfigurationsdatei mit einem Texteditor (z. B. vim):

sudo vim /etc/dnsmasq.conf

5.Bearbeiten Sie die Datei /etc/dnsmasq.conf so, dass sie wie folgt aussieht:

# 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 nicht in /etc/hosts oder der DHCP-Leases-Datei enthalten sind. Wenn Sie eine erfolgreiche umgekehrte Suche durchführen möchten, kommentieren oder entfernen Sie bogus-priv. Weitere Informationen finden Sie unter -b, --bogus-priv auf der dnsmasq man page.

6.Erstellen Sie die Datei /etc/resolv.dnsmasq und legen Sie anschließend den Amazon-DNS-Server oder die benutzerdefinierten Domainnamenserver fest, 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.

7.Starten Sie den dnsmasq-Server neu und stellen Sie den Dienst so ein, dass er beim Booten startet:

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 und Amazon Linux 2023

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

8.Verwenden Sie den Befehl dig, um zu überprüfen, ob dnsmasq korrekt funktioniert:

dig aws.amazon.com @127.0.0.1

Wenn die Antwort dem folgenden Beispiel ä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)
...

9.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 Meine private Amazon-EC2-Instance läuft mit Amazon Linux, Ubuntu oder RHEL. Wie weise ich der EC2-Instance einen statischen DNS-Server zu, der beim Neustart bestehen bleibt?

10.Konfigurieren Sie den Standard-DNS-Resolver als Fallback-Option:

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"

11.Um die Änderung zu übernehmen, führen Sie den Befehl dhclient aus und starten Sie den Netzwerkdienst oder Ihre Instance neu:

sudo dhclient

-oder-

sudo systemctl restart network

-oder-

sudo reboot

Führen Sie den Befehl dig aus, um zu überprüfen, ob Ihre Instance den DNS-Cache verwendet:

dig aws.amazon.com

Wenn die Antwort darauf hinweist, dass der antwortende Server 127.0.0.1 ist, funktioniert der DNS-Cache ordnungsgemäß:

; <<>> 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:

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.

Beide Dateien können auf VPC-Instances ausgeführt werden, da sie die alternative Amazon-DNS-Serveradresse 169.254.169.253 verwenden.

Sie können eine beliebige der beiden Dateien beim Start ausführen, indem Sie den Inhalt der Datei in das Benutzerdatenfeld übergeben. Sie können das Bash-Skript als eigenständiges Skript oder mit einem Ausführungsbefehl des AWS Systems Managers ausführen, um die Aktionen auf einer Instance durchzuführen.

Gehen Sie wie folgt vor, um das Bash-Skript als eigenständiges Skript auszuführen:

1.Laden Sie das Skript auf Ihre Instance herunter und machen Sie es ausführbar:

wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh

2.Führen Sie den folgenden Befehl als Root-Benutzer aus oder verwenden Sie sudo:

sudo ./AutomateDnsmasq.sh

Verwandte Informationen

IP-Adressierung von Amazon-EC2-Instances

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten