Auf meiner privaten Amazon-EC2-Instance wird Amazon Linux, Ubuntu oder RHEL ausgeführt. Wie weise ich der EC2-Instance einen statischen DNS-Server zu, der beim Neustart bestehen bleibt?

Lesedauer: 7 Minute
0

Ich möchte eine Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) mit statischen DNS-Servereinträgen konfigurieren, die beim Neustart bestehen bleiben.

Kurzbeschreibung

Standardmäßig fordern Amazon-EC2-Instances, die mit einer Amazon Virtual Private Cloud (Amazon VPC) verknüpft sind, beim Start eine DNS-Serveradresse an. Diese Anfrage wird mit dem Dynamic Host Configuration Protocol (DHCP) gesendet. Die DHCP-Antwort gibt DNS-Serveradressen zurück, die in die lokale Datei /etc/resolv.conf geschrieben wurden. Manuelle Änderungen an der Datei resolv.conf mit benutzerdefinierten DNS-Serveradressen gehen verloren, wenn Sie die Instance neu starten. Die Methode, mit der Sie dieses Problem lösen, hängt von Ihrer Linux-Distribution ab. Weitere Informationen zu VPCs und DNS-Servern finden Sie unter DHCP-Optionssätze in Amazon VPC.

Lösung

**Wichtig:**Bevor Sie Ihre EC2-Instance ändern, erstellen Sie ein Backup mit einem Amazon-Machine-Image- (AMI) oder einem Amazon-Elastic-Block-Store-Snapshot (Amazon EBS). Das Ändern der Netzwerkkonfigurationen für eine Instance kann dazu führen, dass die Instance nicht erreichbar ist.

Amazon Linux 2023

Amazon Linux 2023 verwendet systemd-resolved. Weitere Informationen finden Sie unter resolved.conf(5) auf der archlinux.org-Website.

Konfigurieren des Resolvers

Bearbeiten Sie die Datei /etc/systemd/resolved.conf und ändern Sie die Optionen für DNS und Domäne:

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Oder erstellen Sie ein Drop-in. Zum Beispiel: /etc/systemd/resolved.conf.d/dns_servers.conf.

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

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Hinweis: Beachten Sie Folgendes, wenn Sie die Option Domains=~. in resolved.conf(5) festlegen:

  • Ist die Option Domains=~. nicht festgelegt, verwendet systemd-resolved die DNS-Server pro Link, die in der Konfiguration pro Link festgelegt sind.
  • Die Option Domains=~. wirkt sich nicht auf Abfragen von Domänennamen aus, die den spezifischeren Suchdomänen entsprechen, die in den Konfigurationen pro Link angegeben sind. Domänennamen werden weiterhin mithilfe ihrer jeweiligen DNS-Server pro Link aufgelöst.

Weitere Informationen zur Konfiguration pro Link finden Sie in den systemd-networkd#network-Dateien auf der archlinux.org-Website.

Ändern Sie den Speicherort, auf den /etc/resolv.conf verweist

Standardmäßig verweist /etc/resolv.conf auf den Localhost-Stub-Resolver. Um dies zu ändern, erstellen Sie die Datei neu mit einem anderen Inhalt oder verweisen Sie auf einen anderen Ort als den Localhost-Stub-Resolver. Sie können beispielsweise auf /run/systemd/resolve/resolv.conf verweisen, die eine vereinfachte Liste der von systemd-resolved verwendeten Server enthält.

Sie können Ihre Konfiguration mit dem Befehl resolvectl status und beispielsweise resolvectl query amazonaws.com testen und die Ausgabe überprüfen.

Amazon Linux, Amazon Linux 2

Verwenden Sie eine der folgenden Optionen, um Ihre Amazon-EC2-Instance zu konfigurieren. Wenn Sie beide Optionen anwenden, haben die in der Datei ifcfg-eth0 angegebenen DNS-Server Vorrang (Option 2).

Damit eine der beiden Optionen funktioniert, muss der PEERDNS-Parameterwert in der Dateiifcfg-eth0 auf yes gesetzt sein. Wenn der PEERDNS-Parameter auf no gesetzt wird, werden die in ifcfg-*-Dateien angegebenen oder von DHCP bereitgestellten DNS-Server ignoriert.

Option 1:

1.    Bearbeiten oder erstellen Sie die Datei /etc/dhcp/dhclient.conf.

**Hinweis:**Sie benötigen Root-Benutzerrechte, um diese Datei bearbeiten zu können. Verwenden Sie entweder „root“ mit sudo -i oder implementieren Sie alle Befehle mit sudo.

2.    Fügen Sie der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetzen Sie im folgenden Beispiel xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers oder der Server, die diese 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 Sie in der dhclient-Datei angegeben haben. Weitere Informationen zum Befehl „supersede“ finden Sie in dhclient.conf (5) auf der Linux-Hauptseite.

3.    Setzen Sie den PEERDNS-Parameter in Ihren Konfigurationsdateien pro Schnittstelle auf yes (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Starten Sie die EC2-Instance neu.

Option 2:

1.    Um die DNS-Serverwerte in der Datei /etc/dhcp/dhclient.conf zu überschreiben, geben Sie die benutzerdefinierten DNS-Server in den Konfigurationsdateien pro Schnittstelle an (/etc/sysconfig/network-scripts/ifcfg-*).

Das folgende Beispiel zeigt beispielsweise die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 aus einer Amazon Linux-Instance, die so geändert wurde, dass sie zwei benutzerdefinierte DNS-Server (DNS1 und DNS2) 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.    Setzen Sie den PEERDNS-Parameter in Ihren Konfigurationsdateien pro Schnittstelle auf yes ( /etc/sysconfig/network-scripts/ifcfg-*).

Ubuntu 16.04

1.    Bearbeiten oder erstellen Sie die Datei /etc/dhcp/dhclient.conf.

**Hinweis:**Sie benötigen Root-Benutzerrechte, um diese Datei bearbeiten zu können. Verwenden Sie entweder „root“ mit sudo -i oder implementieren Sie alle Befehle mit sudo.

2.    Fügen Sie der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetzen Sie im folgenden Beispiel xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers oder der Server, die diese 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 Sie in der dhclient-Datei angegeben haben. Weitere Informationen zum Befehl „supersede“ finden Sie in dhclient.conf(5) auf der Linux-Hauptseite.

3.    Starten Sie die Instance neu.

Ubuntu 18.04

Standardmäßig verarbeitet das netplan.io-Paket unter Ubuntu 18.04 die Konfiguration der Netzwerkschnittstelle, und der Service „systemd-resolved“ verarbeitet DNS-Abfragen mithilfe eines Stub-Resolvers. Die Stub-Resolver-IP befindet sich in /etc/resolv.conf.

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

  • Die Datei ist kein Symlink auf Ihre Instance.
  • Die Datei ist ein Symlink, der auf eine andere Datei verweist, z. B. /run/systemd/resolve/resolv.conf.

Jede dieser Bedingungen weist auf eine Anpassung der Standardkonfiguration von Ubuntu 18.04 hin.

Führen Sie die folgenden Schritte aus, um die DNS-Serverwerte zu überschreiben:

1.    Netplan speichert Konfigurationsdateien normalerweise im Verzeichnis /etc/netplan. Erstellen Sie eine Datei mit dem Namen /etc/netplan/99-custom-dns.yaml und füllen Sie diese dann mit den folgenden Zeilen. Achten Sie darauf, die Platzhalter-IP-Adressen des DNS-Servers durch Ihre bevorzugten Adressen zu ersetzen:

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 Beispiel wurde die Schnittstelle als ens5 angegeben. Stellen Sie sicher, dass der Schnittstellenname mit der Schnittstelle Ihrer Einrichtung übereinstimmt. Verwenden Sie den Befehl ip a, um Ihren Schnittstellennamen zu sehen.

2.    Führen Sie den folgenden Befehl aus:

netplan generate

Nach diesen Änderungen sehen Sie immer noch die Stub-Resolver-IP in /etc/resolv.conf. Das wird erwartet. Die Stub-Resolver-IP ist lokal für Ihr Betriebssystem. Im Hintergrund verwendet der Stub-Resolver die DNS-Server, die Sie in der vorherigen Datei 99-custom-dns.yaml angegeben haben.

3.    Starten Sie die Instance neu.

4.    Führen Sie den Befehl systemd-resolve aus, um zu überprüfen, ob das System die vorgesehenen DNS-Server-IP-Adressen korrekt erfasst:

systemd-resolve --status

RHEL 7.5

Standardmäßig verwaltet der NetworkManager-Service die Datei resolv.conf. Der Service füllt die Datei dann mit DNS-Servern, die von DHCP bereitgestellt werden. Beenden Sie die Verwaltung der Datei resolv.conf durch NetworkManager, sodass die Datei resolv.conf die von DHCP bereitgestellten DNS-Server ignoriert.

Option 1:

1.    Bearbeiten oder erstellen Sie die Datei /etc/dhcp/dhclient.conf.

**Hinweis:**Sie benötigen Root-Benutzerrechte, um diese Datei bearbeiten zu können. Verwenden Sie entweder „root“ mit sudo -i oder implementieren Sie alle Befehle mit sudo.

2.    Fügen Sie der Datei den Befehl supersede hinzu, um die domain-name-servers zu überschreiben. Ersetzen Sie im folgenden Beispiel xxx.xxx.xxx.xxx durch die IP-Adresse des DNS-Servers oder der Server, die diese 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 Sie in der dhclient-Datei angegeben haben. Weitere Informationen zum Befehl „supersede“ finden Sie in dhclient.conf(5) auf der Linux-Hauptseite.

3.    Setzen Sie den PEERDNS-Parameter in Ihren Konfigurationsdateien pro Schnittstelle auf yes ( /etc/sysconfig/network-scripts/ifcfg-*).

4.    Starten Sie die Instance neu.

Option 2:

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

[main]
dns=none

2.    Starten Sie die Instance neu und füllen Sie dann die Datei /etc/resolv.conf manuell aus.

Weitere Informationen

networkmanager.conf(5) (Linux-Hauptseite)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr