Come posso evitare errori di risoluzione DNS con un'istanza Amazon EC2 Linux?

5 minuti di lettura
0

Desidero evitare errori di risoluzione DNS con le istanze Linux di Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

Per ridurre l'utilizzo della CPU e della rete ed evitare errori di risoluzione DNS, applica una cache DNS.

Se utilizzi una cache DNS per interrogare risorse DNS esterne, la cache risponde alla maggior parte delle query DNS ricorrenti a livello locale. Quando la cache esegue questa operazione, non interagisce con il resolver DNS sulla rete. È possibile interrogare risorse DNS esterne come nei seguenti esempi:

  • Amazon Relational Database Service (Amazon RDS)
  • Amazon ElastiCache
  • Amazon Simple Storage Service (Amazon S3)

La procedura seguente si applica a tutte le versioni di Amazon Linux. Se utilizzi un'altra distribuzione, seleziona la documentazione per la tua distribuzione dal seguente elenco:

Risoluzione

Configurare una cache DNS locale con dnsmasq

Per configurare una cache DNS locale, usa dnsmasq (un server DNS DHCP e cache). Per una panoramica di dnsmasq, consulta la documentazione di dnsmasq.

1.    Installa il server dnsmasq:

sudo yum install -y dnsmasq

2.    Crea un utente di sistema dedicato per eseguire dnsmasq:

sudo groupadd -r dnsmasqsudo useradd -r -g dnsmasq dnsmasq

Nota: dnsmasq in genere viene eseguito come utente root, ma passa a un altro utente dopo l'avvio (per impostazione predefinita, l'utente è nessuno). Ciò elimina i privilegi di root.

3.    Crea una copia del file dnsmasq.conf:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.    Apri il file di configurazione utilizzando un editor di testo (ad esempio vim):

sudo vim /etc/dnsmasq.conf

5.    Modifica il file /etc/dnsmasq.conf in modo che sia simile al seguente esempio:

# Server Configurationlisten-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid

# Name resolution options
resolv-file=/etc/resolv.dnsmasq
cache-size=500
neg-ttl=60
domain-needed
bogus-priv

Nota: l'opzione bogus-priv in dnsmasq fa sì che una ricerca DNS inversa fallisca per intervalli IP privati che non si trovano in /etc/hosts o nel file di leasing DHCP. Se desideri eseguire correttamente una ricerca inversa, commenta o rimuovi bogus-priv. Per ulteriori informazioni, vedere**-b, --bogus-priv** nella pagina man dnsmasq.

6.    Crea il file /etc/resolv.dnsmasq, quindi imposta il server Amazon DNS o i server dei nomi di dominio personalizzati che hai specificato nei set di opzioni DHCP:

sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"

Nota: Per ulteriori informazioni sulle posizioni dei server DNS, consulta Cos'è DHCP?In alcuni casi, è necessario modificare il file /etc/resolv.dnsmasq per utilizzare il nome del server per quella rete. Modifica il file quando crei un'AMI da un'istanza con la cache dnsmasq per avviarla in un altro VPC con un CIDR diverso. In alternativa, modifica il file quando specifichi un server DNS personalizzato nelle opzioni DHCP.

7.    Riavvia il server dnsmasq e imposta il servizio per l'avvio del servizio all'avvio:

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 e Amazon Linux 2023

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

8.    Per verificare che dnsmasq funzioni correttamente, usa il comando dig:

dig aws.amazon.com @127.0.0.1

Se la risposta è simile all'esempio seguente, la cache dnsmasq funziona correttamente:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        41    IN    A    54.239.31.69

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

9.    Imposta la cache DNS dnsmasq come resolver DNS predefinito.

Nota: è necessario sopprimere il resolver DNS predefinito fornito da DHCP. Per fare ciò, modifica o crea il file /etc/dhcp/dhclient.conf. Per ulteriori informazioni, consulta La mia istanza privata di Amazon EC2 esegue Amazon Linux, Ubuntu o RHEL. Come faccio ad assegnare un server DNS statico all'istanza EC2 che persiste durante il riavvio?

10.    Configura il resolver DNS predefinito come opzione di riserva:

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"

11.    Per applicare la modifica, esegui il comando dhclient, riavvia il servizio di rete o riavvia l'istanza:

sudo dhclient

-oppure-

sudo systemctl restart network

-oppure-

sudo reboot

Per verificare se la tua istanza utilizza la cache DNS, esegui il comando dig:

dig aws.amazon.com

Se il riscontro indica che il server di risposta è 127.0.0.1, la cache DNS funziona correttamente:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        55    IN    A    54.239.31.69

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) <<<-------
...

Automatizza dnsmasq

Puoi utilizzare uno dei seguenti strumenti per automatizzare l'installazione e la configurazione di dnsmasq come resolver DNS su Amazon Linux:

Se si desidera automatizzare l'installazione di dnsmasq su altre distribuzioni Linux, utilizza entrambi i file per effettuare la personalizzazione necessaria.

Entrambi i file possono essere eseguiti su istanze VPC perché utilizzano l'indirizzo alternativo del server Amazon DNS 169.254.169.253.

Per eseguire uno dei due file al momento dell'avvio, passa il contenuto del file nel campo dati utente. Puoi eseguire lo script Bash come script autonomo o con un comando di esecuzione di AWS Systems Manager per eseguire le azioni su un'istanza.

Per eseguire lo script Bash come script autonomo, completa i seguenti passaggi:

1.    Scarica lo script sulla tua istanza e rendilo eseguibile:

wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh

2.    Esegui il seguente comando come utente root o usa sudo:

sudo ./AutomateDnsmasq.sh

Informazioni correlate

Indirizzamento IP dell'istanza Amazon EC2

AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa