Direkt zum Inhalt

Wie vermeide ich Fehler bei der DNS-Auflösung in meiner Amazon EC2 Linux-Instance?

Lesedauer: 6 Minute
0

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:

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:

  1. Führe den folgenden Befehl aus, um den dnsmasq-Server zu installieren:

    sudo yum install -y dnsmasq
  2. 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 dnsmasq

    Hinweis: 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.

  3. Führe den folgenden Befehl aus, um ein Backup der Datei dnsmasq.conf zu erstellen:

    sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
  4. 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.conf

    Hinweis: Du kannst einen beliebigen Texteditor wie vi oder nano verwenden, um die Datei /etc/dnsmasq.conf zu ändern.

  5. 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-priv

    Hinweis: 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.

  6. 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.

  7. 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 on

    Amazon Linux 2 (AL2) und AL2023:

    sudo systemctl restart dnsmasq.service
    sudo systemctl enable dnsmasq.service
  8. Führe den folgenden Befehl aus, 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 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)
    ...
  9. 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.

  10. 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
  1. 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:

  1. 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
  2. Um das Skript auszuführen, führe den folgenden Befehl als Root-Benutzer aus:

    sudo ./AutomateDnsmasq.sh

Ähnliche Informationen

IP-Adressierung von Amazon-EC2-Instances

AWS OFFICIALAktualisiert vor 9 Monaten