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

Lesedauer: 6 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:

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:

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

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

  3. 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
  4. 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.

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

  6. 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
  7. 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)
    ...
  8. 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"
  9. 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:

  1. 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
  2. Führen Sie den folgenden Befehl als Root-Benutzer aus oder verwenden Sie sudo:

    sudo ./AutomateDnsmasq.sh

Ähnliche Informationen

IP-Adressierung von Amazon-EC2-Instances

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten