Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Wie weise ich einer EC2-Instance einen statischen DNS-Server zu, der beim Reboot bestehen bleibt?
Ich möchte eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance mit einem statischen DNS-Server konfigurieren, der beim Reboot bestehen bleibt.
Lösung
Standardmäßig fordern EC2-Instances, die du Amazon Virtual Private Cloud (Amazon VPC) zuordnest, beim Start eine DNS-Serveradresse an. Das Dynamic Host Configuration Protocol (DHCP) sendet die Anforderung, und dann schreibt Amazon die DHCP-Antwort mit den DNS-Serveradressen in die lokale Datei /etc/resolv.conf.
Wenn du die Instance neu startest, gehen die manuellen Änderungen an der Datei resolv.conf verloren, die benutzerdefinierte DNS-Server-Adressen enthält. Um den statischen DNS-Server beim Reboot der Instance beizubehalten, aktualisiere die Konfiguration auf der Grundlage der Linux-Verteilung.
Wichtig: Bevor du deine Instance änderst, verwende ein Amazon Machine Image (AMI), um eine Sicherungskopie zu erstellen. Oder verwende einen Amazon Elastic Block Store (Amazon EBS)-Snapshot, um eine Sicherungskopie zu erstellen. Wenn du die Netzwerkkonfigurationen für eine Instance änderst, ist die Instance möglicherweise nicht mehr erreichbar.
AL2023
Amazon Linux 2023 (AL2023) 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: Stelle die Option Domains=~. ein, damit systemd-resolved nicht die in der linkspezifischen Konfiguration festgelegten linkspezifischen DNS-Server verwendet. Die Option Domains=~. wirkt sich nicht auf Abfragen von Domainnamen aus, die bestimmten Suchdomains entsprechen, die du in linkspezifischen Konfigurationen angibst. Wenn Domainnamen aufgelöst werden, verwenden sie ihre linkspezifischen DNS-Server.
Ändere den Ort, auf den /etc/resolv.conf verweist
Standardmäßig verweist /etc/resolv.conf auf den lokalen Host-Stub-Resolver. Um den Resolver zu ändern, erstelle die Datei mit aktualisierten Feldern neu oder verweise auf einen anderen Ort als den lokalen Host-Stub-Resolver. Verweise beispielsweise auf die Datei /run/systemd/resolve/resolv.conf, die eine vereinfachte Liste von Servern enthält, die systemd-resolved verwendet.
Beispiel für den Status der Konfigurationsdatei, wenn du den lokalen DNS-Cache verwendest:
### Default Symbolic link status : point to stub-resolv.conf ### Flow: DNS query => Local Cache DNS 127.0.0.53 ( systemd-resolved ) => External DNS # ls -al /etc/resolv.conf lrwxrwxrwx 1 root root 39 Mar 5 02:28 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf # cat /etc/resolv.conf nameserver 127.0.0.53 options edns0 trust-ad search . ### 127.0.0.53 is used for systemd-resolved ( local cache dns ) # lsof -nP -p `pidof systemd-resolved` |grep TCP systemd-r 339 systemd-resolve 14u IPv4 2753 0t0 TCP 127.0.0.53:53 (LISTEN)
Beispiel für den Status der Konfigurationsdatei, wenn du den lokalen DNS-Cache nicht verwendest:
### Changed Symbolic link status : point to /run/systemd/resolve/resolv.conf # cat /run/systemd/resolve/resolv.conf nameserver 1.1.1.1 nameserver 1.0.0.1 search . # ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf # ls -al /etc/resolv.conf lrwxrwxrwx 1 root root 34 Apr 1 16:05 /etc/resolv.conf -> ../run/systemd/resolve/resolv.conf
Führe die folgenden Befehle aus, um die Konfiguration zu testen:
# resolvectl status
# resolvectl query amazonaws.com
Beispielausgaben:
# resolvectl status Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: uplink DNS Servers 8.8.8.8 8.8.4.4 DNS Domain ~. Link 2 (ens5) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported DNS Servers: 10.2.0.2 DNS Domain: ap-northeast-2.compute.internal
# resolvectl query amazonaws.com amazonaws.com: 207.171.166.22 -- link: ens5 72.21.206.80 -- link: ens5 72.21.210.29 -- link: ens5 -- Information acquired via protocol DNS in 3.0ms. -- Data is authenticated: no; Data was acquired via local or encrypted transport: no -- Data from: cache
AL1 oder AL2
Um die Amazon Linux 1 (AL1)- oder Amazon Linux 2 (AL2)-Instances zu konfigurieren, aktualisiere die Datei etc/dhcp/dhclient.conf oder die Datei ifcfg-eth0.conf. Wenn du beide Dateien konfigurierst, haben die DNS-Server, die du in der Datei ifcfg-eth0.conf angibst, Vorrang.
Voraussetzungen: Setze den ParameterPEERDNS in der Datei ifcfg-eth0.conf auf ja. Wenn du den Parameter PEERDNS auf nein setzt, ignoriert Amazon EC2 die DNS-Server, die in ifcfg-*-Dateien angegeben sind oder von DHCP bereitgestellt werden.
Aktualisieren der Datei etc/dhcp/dhclient.conf
Führe die folgenden Schritte aus:
- Öffne die bestehende Datei /etc/dhcp/dhclient.conf. Oder erstelle eine neue.
Hinweis: Du musst über Root-Benutzerrechte verfügen, um diese Datei bearbeiten zu können. Verwende entweder sudo -i, um der Root-Benutzer zu werden, oder verwende sudo, um alle Befehle zu implementieren. - Um domain-name-servers zu überschreiben, füge der Datei den folgenden supersede-Befehl hinzu:
Hinweis: Ersetze 000.000.000.000 durch die IP-Adresse des DNS-Servers bzw. der DNS-Server, die die Instance verwenden soll.supersede domain-name-servers 000.000.000.000, 000.000.000.000; - Setze den Parameter PEERDNS in deiner schnittstellenspezifischen-Konfigurationsdatei, z. B. /etc/sysconfig/network-scripts/ifcfg-*, auf ja.
- Starte die EC2-Instance neu. Die Datei resolv.conf wird beim Reboot der Instance aktualisiert und enthält nur die DNS-Server, die du in der Datei dhclient angegeben hast.
Aktualisieren der Datei ifcfj-eth0
Führe die folgenden Schritte aus:
-
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 Beispieldatei zeigt die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 von einer Amazon Linux-Instance, die 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 -
Setze den Parameter PEERDNS in deiner schnittstellenspezifischen-Konfigurationsdatei, z. B. /etc/sysconfig/network-scripts/ifcfg-*, auf ja.
Hinweis: Wenn auf der Instance Ubuntu 16.04 oder Red Hat Enterprise Linux (RHEL) 7.5 ausgeführt wird, kannst du auch die vorherigen Lösungsschritte verwenden.
Ubuntu 18.04, 20.04 und 22.04
Unter Ubuntu 18.04 verwaltet das netplan.io-Paket die Konfiguration der Netzwerkschnittstelle, und der Service systemd-resolved verwendet einen Stub-Resolver, um DNS-Abfragen zu verwalten. Die IP-Adresse des Stub-Resolvers befindet sich in der Datei /etc/resolv.conf, die eine symbolische Verknüpfung zur Datei /run/systemd/resolve/stub-resolv.conf ist. Wenn die Datei /etc/resolv.conf die folgenden Konfigurationen hat, funktioniert die Anweisung supersede in /etc/dhcp/dhclient.conf möglicherweise nicht wie erwartet:
- Die Datei ist keine symbolische Verknüpfung auf deiner Instance.
- Die Datei ist eine symbolische Verknüpfung, die auf eine andere Datei, z. B. /run/systemd/resolve/resolv.conf, verweist.
Gehe wie folgt vor, um die DNS-Serverwerte zu überschreiben:
-
Erstelle eine Datei mit dem Namen /etc/netplan/99-custom-dns.yaml mit den folgenden Daten:
### Create Customer DNS config # 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 ### Required File Permission # chmod 600 /etc/netplan/99-custom-dns.yaml ### Checking Netplan Configuration status # netplan get network: version: 2 ethernets: ens5: match: macaddress: "0a:e5:a1:40:a2:f5" nameservers: addresses: - 1.1.1.1 - 1.0.0.1 dhcp4: true dhcp4-overrides: use-dns: false use-domains: false dhcp6: false set-name: "ens5"Hinweis: Ersetze 1.1.1.1, 1.0.0.1 durch deine DNS-Server-IP-Adresse. Netplan speichert Konfigurationsdateien im Verzeichnis /etc/netplan. Das vorherige Beispiel verwendet die ens5-Schnittstelle. Stelle sicher, dass der Schnittstellenname mit der Schnittstelle übereinstimmt. Um den Schnittstellennamen anzuzeigen, führe den folgenden Befehl aus:
# ip aBeispielausgabe:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 link/ether 0a:e5:a1:40:a2:f5 brd ff:ff:ff:ff:ff:ff inet 172.31.35.233/20 metric 100 brd 172.31.47.255 scope global dynamic ens5 valid_lft 2828sec preferred_lft 2828sec inet6 fe80::8e5:a1ff:fe40:a2f5/64 scope link valid_lft forever preferred_lft forever -
Um die Netplan-YAML-Datei in Konfigurationsdateien zu konvertieren, führe die folgenden netplan-Befehle aus:
# netplan generate # netplan try # netplan applyHinweis: Möglicherweise erhältst du die Meldung „WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running“. Du kannst diese Meldung ignorieren und mit dem nächsten Schritt fortfahren. Wenn du die Meldung WARNING (Warnung) nicht anzeigen möchtest, installiere das Paket „Open vSwitch with DPDK“. Die IP-Adresse des Stub-Resolvers befindet sich jetzt in /etc/resolv.conf. Dies ist ein erwartetes Verhalten, da die Stub-Resolver-IP-Adresse lokal für das Betriebssystem (OS) ist. Im Hintergrund verwendet der Stub-Resolver die DNS-Server, die du in der Datei 99-custom-dns.yaml angegeben hast.
-
Um zu bestätigen, dass das System die vorgesehenen DNS-Server-IP-Adressen korrekt verwendet, führe den folgenden Befehl basierend auf der Ubuntu-Version aus:
Ubuntu 18.04:systemd-resolve --statusUbuntu 20.04 und 22.04:
resolvectl status
RHEL 7.5
Standardmäßig verwaltet der NetworkManager-Service die Datei resolv.conf für RHEL-Verteilungen. Der Service befüllt die Datei dann mit DNS-Servern, die DHCP bereitstellt. Um benutzerdefinierte DNS-Server zu verwenden, blockiere NetworkManager in der Datei resolv.conf, sodass die Datei resolv.conf die von DHCP bereitgestellten DNS-Server ignoriert.
Führe die Schritte zum Aktualisieren der Datei etc/dhcp/dhclient.conf unter AL1 oder AL2 aus. Oder erstelle die Datei /etc/NetworkManager/conf.d/90-dns-none.conf mit dem folgenden Inhalt:
[main] dns=none
Boote die Instance neu und erstelle dann manuell die Datei /etc/resolv.conf.
Ähnliche Informationen
DHCP-Optionssätze in Amazon VPC
network files (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
- Themen
- Compute
- Tags
- LinuxAmazon EC2
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 9 Monaten
AWS OFFICIALAktualisiert vor 10 Monaten
AWS OFFICIALAktualisiert vor 6 Monaten
AWS OFFICIALAktualisiert vor einem Jahr