Wie weise ich einer Amazon EC2-Instance einen statischen DNS-Server zu, der beim Neustart bestehen bleibt?

Lesedauer: 7 Minute
0

Ich möchte eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance konfigurieren, die über einen statischen DNS-Server verfügt, der auch nach einem Neustart bestehen bleibt.

Kurzbeschreibung

Standardmäßig fordern Amazon EC2-Instances, die mit einer Amazon Virtual Private Cloud (Amazon VPC) verknüpft sind, beim Start eine DNS-Server-Adresse an. Das Dynamic Host Configuration Protocol (DHCP) sendet die Anfrage. Die DHCP-Antwort gibt DNS-Server-Adressen zurück, die in die lokale Datei /etc/resolv.conf geschrieben wurden.

Wenn du die Instance neu startest, gehen die manuellen Änderungen an der Datei resolv.conf verloren, die benutzerdefinierte DNS-Server-Adressen enthält. Um deinen statischen DNS-Server beim Neustart deiner Instance beizubehalten, führe je nach Linux-Distribution eines der folgenden Verfahren aus.

Behebung

Wichtig: Bevor du deine Instance änderst, verwende ein Amazon Machine Image (AMI), um ein Backup zu erstellen. Oder verwende einen Amazon Elastic Block Store (Amazon EBS) -Snapshot, um ein Backup zu erstellen. Wenn du die Netzwerkkonfigurationen für eine Instance änderst, ist die Instance möglicherweise nicht mehr erreichbar.

Amazon Linux 2023

Amazon Linux 2023 verwendet systemd-resolved. Weitere Informationen findest du unter systemd-resolved auf der Archlinux-Website.

Resolver konfigurieren

Bearbeite die Datei /etc/systemd/resolved.conf und ändere die Optionen für DNS und Domäne.

Beispiel für eine Konfigurationsdatei:

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Oder erstelle ein Drop-in. Verwende beispielsweise die Datei /etc/systemd/resolved.conf.d/dns_servers.conf.

Beispiel für eine Konfigurationsdatei:

#/etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Hinweis: Wenn du die Domains=~.-Option nicht setzt, dann verwendet systemd-resolved möglicherweise die linkspezifische Konfiguration der linkspezifischen DNS-Server. Die Domains=~.-Option wirkt sich nicht auf Abfragen von Domainnamen aus, die den spezifischeren Suchdomänen entsprechen, die in linkspezifischen Konfigurationen angegeben sind. Wenn Domainnamen aufgelöst werden, verwenden sie ihre jeweiligen linkspezifischen DNS-Server.

Ändere den Speicherort der /etc/resolv.conf-Punkte

Standardmäßig verweist /etc/resolv.conf auf den Localhost-Stub-Resolver. Um den Resolver zu ändern, erstelle die Datei mit einem anderen Inhalt neu oder zeige auf eine andere Stelle als den Localhost-Stub-Resolver. Du kannst beispielsweise auf /run/systemd/resolve/resolv.conf verweisen, das eine vereinfachte Liste von Servern enthält, die systemd-resolved verwendet.

Um deine Konfiguration zu testen, führe den Befehl resolvectl status aus und verwende resolvectl query amazonaws.com. Überprüfe dann die Ausgabe.

Amazon Linux oder Amazon Linux 2

Verwende eine der folgenden Optionen, um deine Instance zu konfigurieren. Wenn du beide Optionen anwendest, haben die DNS-Server, die in der Datei ifcfg-eth0 angegeben sind, Vorrang.

Damit eine der beiden Optionen funktioniert, musst du den PEERDNS-Parameterwert in der Datei ifcfg-eth0 auf yes setzen. Wenn du den PEERDNS-Parameter auf no setzt, werden die DNS-Server, die in ifcfg-*-Dateien angegeben sind oder von DHCP bereitgestellt werden, ignoriert.

Option 1

Führe die folgenden Schritte aus:

  1. Bearbeite oder erstelle die Datei /etc/dhcp/dhclient.conf.
    Hinweis: Du musst über Root-Benutzerrechte verfügen, um diese Datei bearbeiten zu können. Benutze entweder sudo -i, um der Root zu werden, oder verwende sudo, um alle Befehle zu implementieren.
  2. Füge der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetze im folgenden Beispielbefehl xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers oder der DNS-Server, die die Instance verwenden soll:
    supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
    Nach der vorherigen Änderung wird die Datei resolv.conf beim Neustart der Instance aktualisiert und enthält nur die DNS-Server, die du in der dhclient-Datei angegeben hast.
  3. Setze den PEERDNS-Parameter auf yes in deiner schnittstellenspezifischen-Konfigurationsdatei, /etc/sysconfig/network-scripts/ifcfg-*.
  4. Starte die EC2-Instance neu.

Option 2

Führe die folgenden Schritte aus:

  1. Um die DNS-Serverwerte in der Datei /etc/dhcp/dhclient.conf zu überschreiben, gib die benutzerdefinierten DNS-Server in den schnittstellenspezifischen Konfigurationsdateien an.
    Die folgende Datei zeigt beispielsweise die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 von einer Amazon Linux-Instance, die so geändert wurde, dass sie zwei benutzerdefinierte DNS-Server enthält:

    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes
    TYPE=Ethernet
    USERCTL=yes
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    RES_OPTIONS="timeout:2 attempts:5"
    DHCP_ARP_CHECK=no
    MTU="9001"
    DNS1=8.8.8.8
    DNS2=8.8.4.4
  2. Setze den PEERDNS-Parameter auf yes in deiner schnittstellenspezifischen-Konfigurationsdatei, /etc/sysconfig/network-scripts/ifcfg-*.

Ubuntu 16.04

Führe die folgenden Schritte aus:

  1. Bearbeite oder erstelle die Datei /etc/dhcp/dhclient.conf.
    Hinweis: Du musst über Root-Benutzerrechte verfügen, um diese Datei bearbeiten zu können. Benutze entweder sudo -i, um der Root zu werden, oder verwende sudo, um alle Befehle zu implementieren.
  2. Füge der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetze im folgenden Beispielbefehl xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers oder der DNS-Server, die die Instance verwenden soll:
    supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
    Nach der Änderung wird die Datei resolv.conf beim Neustart der Instance aktualisiert und enthält nur die DNS-Server, die du in der dhclient-Datei angegeben hast.
  3. Starte die Instance neu.

Ubuntu 18.04

Unter Ubuntu 18.04 verwaltet das netplan.io-Paket die Konfiguration der Netzwerkschnittstelle, und der Dienst systemd-resolved verwendet einen Stub-Resolver, um DNS-Abfragen zu verwalten. Die IP-Adresse des Stub-Resolvers befindet sich in /etc/resolv.conf.

Die Datei /etc/resolv.conf ist ein Symlink zur Datei /run/systemd/resolve/stub-resolv.conf. Wenn eine der folgenden Bedingungen für die Datei /etc/resolv.conf zutrifft, funktioniert die Anweisung supersede in /etc/dhcp/dhclient.conf möglicherweise nicht wie erwartet:

  • Die Datei ist kein Symlink auf deiner Instance.
  • Die Datei ist ein Symlink, der auf eine andere Datei verweist. Die Datei zeigt beispielsweise auf /run/systemd/resolve/resolv.conf.

Gehe wie folgt vor, um die DNS-Serverwerte zu überschreiben:

  1. Netplan speichert Konfigurationsdateien im Verzeichnis /etc/netplan. Erstelle eine Datei mit dem Namen /etc/netplan/99-custom-dns.yaml und gib dann die folgenden Zeilen in die Datei ein. Ersetze die Beispiel-DNS-Server-IP-Adressen durch deine IP-Adressen:
    cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml
    network:
      version: 2
      ethernets:
        ens5:
          nameservers:
            addresses: [1.1 .1 .1, 1.0 .0 .1]
          dhcp4-overrides:
            use-dns: false
            use-domains: false
    EOF
    Hinweis: Im vorherigen Beispielcode ist die Schnittstelle als ens5 angegeben. Stelle sicher, dass der Schnittstellenname mit der Schnittstelle deines Setups übereinstimmt. Um deinen Schnittstellennamen zu sehen, führe den Befehl ip a aus.
  2. Um die Netplan-YAML-Datei in Konfigurationsdateien zu konvertieren, führe den folgenden netplan-Befehl aus:
    netplan generate
    Du findest jetzt die IP-Adresse des Stub-Resolvers in /etc/resolv.conf. Das wird erwartet. Die Stub-Resolver-IP-Adresse ist lokal für dein Betriebssystem. Im Hintergrund verwendet der Stub-Resolver die DNS-Server, die du in der Datei 99-custom-dns.yaml angegeben hast.
  3. Starte die Instance neu.
  4. Um zu bestätigen, dass das System die vorgesehenen DNS-Server-IP-Adressen korrekt abruft, führe den Befehl systemd-resolve aus:
    systemd-resolve --status

RHEL 7.5

Standardmäßig verwaltet der NetworkManager-Service die Datei resolv.conf. Der Dienst füllt die Datei dann mit DNS-Servern auf, die DHCP bereitstellt. Erlaube NetworkManager nicht, die resolv.conf-Datei so zu verwalten, dass die resolv.conf-Datei die DNS-Server ignoriert, die DHCP bereitstellt.

Option 1

Führe die folgenden Schritte aus:

  1. Bearbeite oder erstelle die Datei /etc/dhcp/dhclient.conf.
    Hinweis: Du musst über Root-Benutzerrechte verfügen, um diese Datei bearbeiten zu können. Benutze entweder sudo -i, um der Root zu werden, oder verwende sudo, um alle Befehle zu implementieren.
  2. Füge der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetze im folgenden Beispielbefehl xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers:
    supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
    Du kannst auch deine bevorzugten Server eingeben, die die Instance verwenden soll.
    Nach der Änderung wird die Datei resolv.conf beim Neustart der Instance aktualisiert und enthält nur die DNS-Server, die du in der dhclient-Datei angegeben hast.
  3. Setze den PEERDNS-Parameter auf yes in deiner schnittstellenspezifischen-Konfigurationsdatei, /etc/sysconfig/network-scripts/ifcfg-*.
  4. Starte die Instance neu.

Option 2

Führe die folgenden Schritte aus:

  1. Erstelle die Datei /etc/NetworkManager/conf.d/90-dns-none.conf mit dem folgenden Inhalt:

    [main]
    dns=none
  2. Starte die Instance neu und erstelle dann manuell die Datei /etc/resolv.conf.

Ähnliche Informationen

DHCP-Optionssätze in Amazon VPC

2.1 Netzwerkdateien auf der Archlinux-Website

resolved.conf(5) auf der Archlinux-Webseite

dhclient.conf(5) auf der Archlinux-Webseite

networkmanager.conf(5) auf der Archlinux-Webseite

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten