La mia istanza privata di Amazon EC2 esegue Amazon Linux, Ubuntu o RHEL. Come posso assegnare un server DNS statico all'istanza EC2 che persiste durante il riavvio?

7 minuti di lettura
0

Voglio configurare un'istanza Amazon Elastic Compute Cloud (Amazon EC2) con voci statiche del server DNS che persistono durante il riavvio.

Descrizione breve

Per impostazione predefinita, le istanze Amazon EC2 associate a un Amazon Virtual Private Cloud (Amazon VPC) richiedono un indirizzo server DNS all'avvio. Questa richiesta viene inviata utilizzando il Protocollo di configurazione per host dinamico (DHCP). La risposta DHCP restituisce gli indirizzi dei server DNS scritti nel file locale /etc/resolv.conf. Le modifiche manuali al file resolv.conf con indirizzi server DNS personalizzati vengono perse quando si riavvia l'istanza. Il metodo utilizzato per risolvere questo problema dipende dalla distribuzione Linux in uso. Per ulteriori informazioni sui cloud virtuali e sui server DNS, consulta Set di opzioni DHCP in Amazon VPC.

Risoluzione

Importante: prima di modificare l'istanza EC2, crea un backup utilizzando un'istantanea Amazon Machine Image (AMI) o Amazon Elastic Block Store (Amazon EBS). La modifica delle configurazioni di rete per un'istanza potrebbe renderla irraggiungibile.

Amazon Linux 2023

Amazon Linux 2023 utilizza systemd-resolved. Per ulteriori informazioni, consulta resolved.conf(5) sul sito web archlinux.org.

Configura il resolver

Modifica il file /etc/systemd/resolved.conf e modifica le opzioni DNS e Dominio:

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Oppure crea un drop-in. Ad esempio, /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=~.

Nota: tieni presente quanto segue quando imposti l'opzione Domini=~. in resolved.conf(5):

  • Se l'opzione Domini=~. non è impostata, allora systemd-resolved potrebbe utilizzare i server DNS per link impostati nella configurazione per collegamento.
  • L'opzione Domini=~. non influisce sulle query di nomi di dominio che corrispondono ai domini di ricerca più specifici specificati nelle configurazioni per collegamento. I nomi di dominio si risolvono ancora utilizzando i rispettivi server DNS per link.

Per ulteriori informazioni sulla configurazione per collegamento, consulta i file systemd-networkd#network sul sito web archlinux.org.

Cambia la posizione indicata da /etc/resolv.conf

Per impostazione predefinita, /etc/resolv.conf indica il risolutore stub localhost. Per modificare questa impostazione, ricrea il file con contenuti diversi o mostrando altri punti rispetto al risolutore stub localhost. Ad esempio, puoi puntare a /run/systemd/resolve/resolv.conf, che contiene un elenco semplificato di server usati da systemd-resolved.

Puoi testare la tua configurazione usando il comando resolvectl status e, ad esempio, resolvectl query amazonaws.com ed esaminare l'output.

Amazon Linux, Amazon Linux 2

Utilizza una delle seguenti opzioni per configurare la tua istanza Amazon EC2. Se si applicano entrambe le opzioni, i server DNS specificati nel file ifcfg-eth0 hanno la precedenza (opzione 2).

Perché entrambe le opzioni funzionino, il valore del parametro PEERDNS nel file ifcfg-eth0 deve essere impostato su yes. L'impostazione del parametro PEERDNS su no significa che i server DNS specificati nei file ifcfg-* o forniti da DHCP vengono ignorati.

Opzione 1:

1.    Modifica o crea il file /etc/dhcp/dhclient.conf.

Nota: è necessario disporre dei privilegi di utente root per modificare questo file. Diventa root con sudo -i o implementa tutti i comandi con sudo.

2.    Aggiungi il comando supersede al file per sovrascrivere i domain-name-servers. Nell'esempio seguente, sostituisci xxx.xxx.xxx.xxx con l'indirizzo IP del server o dei server DNS che desideri che l'istanza utilizzi:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Dopo la modifica precedente, il file resolv.conf si aggiorna al riavvio dell'istanza per contenere solo i server DNS specificati nel file dhclient. Per ulteriori informazioni sul comando supersede, consulta dhclient.conf(5) nella pagina man di Linux.

3.    Imposta il parametro PEERDNS su yes nei file di configurazione per interfaccia (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Riavvia l'istanza EC2.

Opzione 2:

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 (/etc/sysconfig/network-scripts/ifcfg-*).

Ad esempio, l'esempio seguente mostra il file /etc/sysconfig/network-scripts/ifcfg-eth0 di un'istanza Amazon Linux modificata per includere due server DNS personalizzati (DNS1 e DNS2):

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 nei file di configurazione per interfaccia (/etc/sysconfig/network-scripts/ifcfg-*).

Ubuntu 16.04

1.    Modifica o crea il file /etc/dhcp/dhclient.conf.

Nota: è necessario disporre dei privilegi di utente root per modificare questo file. Diventa root con sudo -i o implementa tutti i comandi con sudo.

2.    Aggiungi il comando supersede al file per sovrascrivere i domain-name-servers. Nell'esempio seguente, sostituisci xxx.xxx.xxx.xxx con l'indirizzo IP del server o dei server DNS che desideri che l'istanza utilizzi:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Dopo questa modifica, il file resolv.conf si aggiorna al riavvio dell'istanza per contenere solo i server DNS specificati nel file dhclient. Per ulteriori informazioni sul comando supersede, consulta dhclient.conf(5) nella pagina man di Linux.

3.    Riavvia l'istanza.

Ubuntu 18.04

Per impostazione predefinita su Ubuntu 18.04, il pacchetto netplan.io gestisce la configurazione dell'interfaccia di rete e il servizio systemd-resolved gestisce le query DNS utilizzando un risolutore stub. L'IP del risolutore stub si trova in /etc/resolv.conf.

A sua volta, il file /etc/resolv.conf è un collegamento simbolico al file /run/systemd/resolve/stub-resolv.conf. L'istruzione supersede in /etc/dhcp/dhclient.conf potrebbe non funzionare come previsto se una delle seguenti condizioni è vera per il file /etc/resolv.conf:

  • Il file non è un collegamento simbolico sulla tua istanza.
  • Il file è un collegamento simbolico che punta a un file diverso, ad esempio /run/systemd/resolve/resolv.conf.

Entrambe queste condizioni indicano la personalizzazione della configurazione predefinita di Ubuntu 18.04.

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

1.    Netplan in genere archivia i file di configurazione nella directory /etc/netplan. Crea un file denominato /etc/netplan/99-custom-dns.yaml, quindi compilalo con le seguenti righe. Assicurati di sostituire gli indirizzi IP del server DNS segnaposto con i tuoi indirizzi preferiti:

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

Nota: nell'esempio precedente, l'interfaccia è specificata come ens5. Assicurati che il nome dell'interfaccia corrisponda all'interfaccia della tua configurazione. Per vedere il nome della tua interfaccia, usa il comando ip a.

2.    Esegui il seguente comando:

netplan generate

Dopo queste modifiche, si vede ancora l'IP del risolutore stub in /etc/resolv.conf. È un'opzione prevista. L'IP del risolutore stub è locale al sistema operativo in uso. In background, il risolutore stub utilizza i server DNS specificati nel precedente file 99-custom-dns.yaml.

3.    Riavvia l'istanza.

4.    Esegui il comando systemd-resolve per confermare che il sistema rileva correttamente gli indirizzi IP del server DNS previsti:

systemd-resolve --status

RHEL 7.5

Per impostazione predefinita, il servizio NetworkManager gestisce il file resolv.conf. Il servizio quindi compila il file con i server DNS forniti da DHCP. Impedisci a NetworkManager di gestire il file resolv.conf in modo che il file resolv.conf ignori i server DNS forniti da DHCP.

Opzione 1:

1.    Modifica o crea il file /etc/dhcp/dhclient.conf.

Nota: è necessario disporre dei privilegi di utente root per modificare questo file. Diventa root con sudo -i o implementa tutti i comandi con sudo.

2.    Aggiungi il comando supersede al file per sovrascrivere i domain-name-servers. Nell'esempio seguente, sostituisci xxx.xxx.xxx.xxx con l'indirizzo IP del server o dei server DNS che desideri che l'istanza utilizzi:

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

Dopo questa modifica, il file resolv.conf si aggiorna al riavvio dell'istanza per contenere solo i server DNS specificati nel file dhclient. Per ulteriori informazioni sul comando supersede, consulta dhclient.conf(5) nella pagina man di Linux.

3.    Imposta il parametro PEERDNS su yes nei file di configurazione per interfaccia (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Riavvia l'istanza.

Opzione 2:

1.    Crea il file /etc/NetworkManager/conf.d/90-dns-none.conf con il seguente contenuto:

[main]
dns=none

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

Informazioni correlate

networkmanager.conf(5) (pagina man di Linux)

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa