Come posso assegnare a un'istanza EC2 un server DNS statico che persiste al riavvio?

8 minuti di lettura
0

Desidero configurare un'istanza Amazon Elastic Compute Cloud (Amazon EC2) con un server DNS statico che persiste al riavvio.

Risoluzione

Per impostazione predefinita, le istanze EC2 associate ad Amazon Virtual Private Cloud (Amazon VPC) richiedono l' indirizzo di un server DNS all'avvio. Il Protocollo di configurazione per host dinamico (DHCP) invia la richiesta, quindi Amazon scrive la risposta DHCP con gli indirizzi dei server DNS nel file /etc/resolv.conf.

Quando riavvii l'istanza, perdi le modifiche apportate manualmente manuali al file resolv.conf che contiene gli indirizzi dei server DNS personalizzati. Per mantenere il server DNS statico al riavvio dell'istanza, aggiorna la configurazione in base alla distribuzione Linux.

Importante: prima di modificare l'istanza, utilizza un'Amazon Machine Image (AMI) per creare un backup. Oppure utilizza uno snapshot Amazon Elastic Block Store (Amazon EBS) per creare un backup. La modifica delle configurazioni di rete per un'istanza potrebbe renderla irraggiungibile.

AL2023

Amazon Linux 2023 (AL2023) utilizza systemd-resolved. Per ulteriori informazioni, consulta systemd-resolved sul sito web di Archlinux.

Configura il risolutore

Modifica il file /etc/systemd/resolved.conf e modifica le opzioni DNS e di dominio.

Esempio di configurazione:

# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8
Domains=~.

Oppure crea un drop-in. Ad esempio, utilizza il file /etc/systemd/resolved.conf.d/dns\ _servers.conf.

Esempio di configurazione:

#/etc/systemd/resolved.conf.d/dns_servers.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

Nota: imposta l'opzione Domains=~. opzione in modo che systemd-resolved non utilizzi i server DNS per-link impostati nella configurazione per-link. L'opzione Domains=~. non influisce sulle query di nomi di dominio che corrispondono ai domini di ricerca specifici indicati nelle configurazioni per-link. Quando i nomi di dominio si risolvono, utilizzano i rispettivi server DNS per-link.

Cambia la posizione verso cui punta /etc/resolv.conf

Per impostazione predefinita, /etc/resolv.conf punta verso il risolutore stub dell’host locale. Per modificare il risolutore, ricrea il file con i campi aggiornati o punta verso una posizione diversa dal risolutore stub dell'host locale. Ad esempio, puoi puntare verso il file /run/systemd/resolve/resolv.conf, che contiene un elenco semplificato dei server usati da systemd-resolved.

Esempio dello stato del file di configurazione quando utilizzi la cache DNS locale:

### 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)

Esempio dello stato del file di configurazione quando non utilizzi la cache DNS locale:

### 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

Per testare la configurazione, esegui questi comandi:

# resolvectl status
# resolvectl query amazonaws.com

Esempi di output:

# 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 o AL2

Per configurare le istanze Amazon Linux 1 (AL1) o Amazon Linux 2 (AL2), aggiorna il file etc/dhcp/dhclient.conf o il file ifcfg-eth0.conf. Se configuri entrambi i file, i server DNS specificati nel file ifcfg-eth0.conf hanno la precedenza.

Prerequisiti: imposta il valore del parametro PEERDNS nel file ifcfg-eth0.conf su yes. Quando imposti il parametro PEERDNS su no, Amazon EC2 ignora i server DNS specificati nei file ifcfg-* o forniti da DHCP.

Aggiorna il file etc/dhcp/dhclient.conf file

Completa i seguenti passaggi:

  1. Apri il file /etc/dhcp/dhclient.conf esistente. Oppure creane uno nuovo.
    Nota: è necessario disporre delle autorizzazioni dell'utente root per modificare il file. Utilizz sudo -i per diventare l'utente root o sudo per implementare tutti i comandi.
  2. Per sovrascrivere i domain-name-servers, aggiungi il seguente comando supersede al file:
    supersede domain-name-servers 000.000.000.000, 000.000.000.000;
    Nota: sostituisci 000.000.000.000 con l'indirizzo IP del server o dei server DNS che desideri siano utilizzati dall'istanza.
  3. Imposta il parametro PEERDNS su yes nel file di configurazioneper-interface, ad esempio /etc/sysconfig/network-scripts/ifcfg-*.
  4. Riavvia l'istanza EC2. Ora il file resolv.conf, aggiornatosi al riavvio dell'istanza, contiene solo i server DNS specificati nel file dhclient.

Aggiorna il file ifcfj-eth0

Completa i seguenti passaggi:

  1. Per sovrascrivere i valori del server DNS nel file /etc/dhcp/dhclient.conf, specifica i server DNS personalizzati nei file di configurazione per interfaccia.
    Il seguente esempio mostra il file /etc/sysconfig/network-scripts/ifcfg-eth0 di un'istanza Amazon Linux che include due server DNS personalizzati:

    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. Imposta il parametro PEERDNS su yes nel file di configurazioneper-interface, ad esempio /etc/sysconfig/network-scripts/ifcfg-*.

Nota: se l'istanza esegue Ubuntu 16.04 o Red Hat Enterprise Linux (RHEL) 7.5, puoi anche utilizzare i passaggi di risoluzione precedenti.

Ubuntu 18.04, 20.04 e 22.04

In Ubuntu 18.04, il pacchetto netplan.io gestisce la configurazione dell'interfaccia di rete e il servizio systemd-resolved utilizza un risolutore stub per gestire le query DNS. L'indirizzo IP del risolutore stub si trova nel file /etc/resolv.conf che è un symlink al file /run/systemd/resolve/stub-resolv.conf. Se il file /etc/resolv.conf ha le seguenti configurazioni, l'istruzione supersede in /etc/dhcp/dhclient.conf potrebbe non funzionare come previsto:

  • Il file non è un symlink nell'istanza.
  • Il file è un symlink che punta verso un file diverso, ad esempio /run/systemd/resolve/resolv.conf.

Completa i seguenti passaggi per sovrascrivere i valori del server DNS:

  1. Crea un file denominato /etc/netplan/99-custom-dns.yaml con i seguenti dati:

    ### 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"

    Nota: sostituisci 1.1.1.1, 1.0.0.1 con l'indirizzo IP del tuo server DNS. Netplan archivia i file di configurazione nella directory /etc/netplan. L'esempio precedente utilizza l'interfaccia ens5. Assicurati che il nome dell'interfaccia corrisponda alla tua interfaccia. Per vedere il nome dell'interfaccia, esegui questo comando:

    # ip a

    Esempio di output:

    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
  2. Per convertire il file YAML di Netplan in file di configurazione, esegui questo comando netplan:

    # netplan generate
    # netplan try
    # netplan apply

    Nota: potresti ricevere il messaggio "WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running". Puoi ignorarlo e procedere con il passaggio successivo. Se non desideri ricevere il messaggio WARNING , installa il pacchetto Open vSwitch con DPDK. L'indirizzo IP del risolutore stub ora è /etc/resolv.conf. Questo è un comportamento normale perché l'indirizzo IP del risolutore stub è locale nel sistema operativo. In background, il risolutore stub utilizza i server DNS specificati nel precedente file 99-custom-dns.yaml.

  3. Riavvia l'istanza.

  4. Per verificare che il sistema utilizzi correttamente gli indirizzi IP dei server DNS desiderati, esegui questo comando in base alla versione di Ubuntu:
    Ubuntu 18.04:

    systemd-resolve --status

    Ubuntu 20.04 and 22.04:

    resolvectl status

RHEL 7.5

Per impostazione predefinita, il file resolv.conf per le distribuzioni RHEL è gestito dal servizio NetworkManager. Il servizio compila quindi il file con i server DNS forniti da DHCP. Per utilizzare server DNS personalizzati, blocca NetworkManager nel file resolv.conf in modo che il file resolv.conf ignori i server DNS forniti da DHCP.

Completa i passaggi per aggiornare il file etc/dhcp/dhclient.conf in AL1 o AL2. Crea il file /etc/NetworkManager/conf.d/90-dns-none.conf con il seguente contenuto:

[main]dns=none

Riavvia l'istanza e crea manualmente il file /etc/resolv.conf.

Informazioni correlate

Set di opzioni DHCP in Amazon VPC

network files (file di rete) sul sito web di Archlinux

resolved.conf(5) sul sito web di Archlinux

dhclient.conf(5) sul sito web di Archlinux

networkmanager.conf (5) sul sito Web Archlinux

AWS UFFICIALE
AWS UFFICIALEAggiornata 25 giorni fa