Salta al contenuto

Come posso evitare errori di risoluzione DNS nella mia istanza Amazon EC2 Linux?

6 minuti di lettura
0

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

Breve descrizione

Per evitare errori di risoluzione DNS, applica una cache DNS.

Quando utilizzi una cache DNS per eseguire query su risorse DNS esterne, la cache risponde localmente alla maggior parte delle query DNS ricorrenti. In questo scenario, la cache non interagisce con il risolutore DNS sulla rete. Puoi eseguire query su risorse DNS esterne come nei seguenti esempi:

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

Puoi utilizzare i seguenti passaggi di risoluzione per tutte le versioni di Amazon Linux. Se usi un'altra distribuzione, consulta la relativa documentazione:

Risoluzione

Nota: i seguenti passaggi di risoluzione utilizzano 169.254.169.253 come indirizzo IP del risolutore DNS. Se utilizzi un risolutore DNS diverso, sostituisci 169.254.169.253 con l'indirizzo IP del tuo risolutore DNS.

Configura una cache DNS locale con dnsmasq

Per configurare una cache DNS locale, utilizza dnsmasq. Per ulteriori informazioni, consulta dnsmasq sul sito Web thekelleys.org.uk.

Completa i seguenti passaggi:

  1. Esegui questo comando per installare il server dnsmasq:

    sudo yum install -y dnsmasq
  2. Se l'istanza viene eseguita su Amazon Linux 2023 (AL2023), procedi al passaggio 3. Per creare un utente di sistema dedicato all'esecuzione di dnsmasq, utilizza questo comando:

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

    Nota: in genere dnsmasq viene eseguito come utente root. Tuttavia, l'utente cambia dopo l'avvio ed elimina i permessi dell'utente root. Per impostazione predefinita, l'utente è nobody (nessuno).

  3. Per creare una copia del file dnsmasq.conf, esegui questo comando:

    sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
  4. Per creare e aprire il file di configurazione /etc/dnsmasq.conf con l'editor di testo vim, esegui questo comando:

    sudo vim /etc/dnsmasq.conf

    Nota: puoi utilizzare qualsiasi editor di testo, come vi o nano, per modificare il file /etc/dnsmasq.conf.

  5. Nel file /etc/dnsmasq.conf, inserisci il seguente contenuto:

    # Server Configuration
    listen-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 dia esito negativo per intervalli di indirizzi IP privati che non si trovano in /etc/hosts. Questa opzione può anche causare l'esito negativo di una ricerca DNS inversa per il file di leasing del Protocollo di configurazione per host dinamico (DHCP). Per eseguire correttamente una ricerca inversa, commenta o rimuovi bogus-priv.

  6. Crea il file /etc/resolv.dnsmasq e imposta il server DNS Amazon o i server dei nomi di dominio personalizzati specificati nei set di opzioni DHCP. Esegui questo comando:

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

    Nota: per ulteriori informazioni sulle posizioni dei server DNS, consulta Che cos'è il DHCP? Puoi anche modificare la posizione del server 169.254.169.253 quando crei un'Amazon Machine Image (AMI) da un'istanza con la cache di dnsmasq per avviarla in un altro cloud privato virtuale (VPC) con un CIDR diverso.

  7. Per riavviare il server dnsmasq e impostare l'avvio del servizio all'avvio del server, esegui uno di questi comandi in base alla distribuzione.
    Amazon Linux 1 (AL1):

    sudo service dnsmasq restart
    sudo chkconfig dnsmasq on

    Amazon Linux 2 (AL2) e AL2023:

    sudo systemctl restart dnsmasq.service
    sudo systemctl enable dnsmasq.service
  8. Per verificare che dnsmasq funzioni correttamente, esegui questo comando:

    dig aws.amazon.com @127.0.0.1

    Se la risposta è simile all'esempio seguente, la cache di dnsmasq funziona come previsto:

    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.13.11 <<>> aws.amazon.com @127.0.0.1
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33958
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ;; QUESTION SECTION:
    ;aws.amazon.com.                        IN      A
    
    ;; ANSWER SECTION:
    aws.amazon.com.         300     IN      CNAME   tp.8e49140c2-frontier.amazon.com.
    tp.8e49140c2-frontier.amazon.com. 9 IN  CNAME   dr49lng3n1n2s.cloudfront.net.
    dr49lng3n1n2s.cloudfront.net. 59 IN     A       108.158.61.67
    dr49lng3n1n2s.cloudfront.net. 59 IN     A       108.158.61.79
    dr49lng3n1n2s.cloudfront.net. 59 IN     A       108.158.61.96
    dr49lng3n1n2s.cloudfront.net. 59 IN     A       108.158.61.102
    
    ;; Query time: 2 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ...
  9. Imposta la cache DNS di dnsmasq come risolutore DNS predefinito.
    Nota: è necessario eliminare il risolutore DNS predefinito fornito da DHCP. A tal fine, modifica o crea il file /etc/dhcp/dhclient.conf.
    Per AL2, esegui questo comando:

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

    Per AL2023, esegui questo comando:

    sudo bash -c 'echo "DNS=127.0.0.1" >> /etc/systemd/resolved.conf'
    sudo bash -c 'echo "DNS=169.254.169.253" >> /etc/systemd/resolved.conf'

    Nota: AL2023 utilizza systemd-networkd come risolutore DNS predefinito.

  10. Per applicare la modifica, esegui questo comando in base alla distribuzione Linux:
    AL2:

sudo dhclient

AL2023:

sudo systemctl restart systemd-resolved.service

-oppure-
Per riavviare il servizio di rete, esegui il comando seguente:

sudo systemctl restart network

-oppure-
Per riavviare l'istanza, esegui questo comando:

sudo reboot
  1. Esegui questo comando per verificare che l'istanza utilizzi la cache DNS:
dig aws.amazon.com

Se l'output mostra che il server di risposta è 127.0.0.1, la cache DNS funziona come previsto.
Esempio di output:

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.13.11 <<>> aws.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29129
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;aws.amazon.com.                        IN      A

;; ANSWER SECTION:
aws.amazon.com.         297     IN      CNAME   tp.8e49140c2-frontier.amazon.com.
tp.8e49140c2-frontier.amazon.com. 25 IN CNAME   dr49lng3n1n2s.cloudfront.net.
dr49lng3n1n2s.cloudfront.net. 41 IN     A       108.158.61.102
dr49lng3n1n2s.cloudfront.net. 41 IN     A       108.158.61.96
dr49lng3n1n2s.cloudfront.net. 41 IN     A       108.158.61.79
dr49lng3n1n2s.cloudfront.net. 41 IN     A       108.158.61.67

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

Automatizza dnsmasq per nuove istanze

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

  • Utilizza lo script bash AutomateDnsmasq.sh. Per scaricare il file, consulta AutomateDnsmasq.sh sul sito web GitHub.
  • Utilizza le direttive AutomateDnsmasq.cloudinit. Per scaricare il file, consulta AutomateDnsmasq.cloudinit sul sito web GitHub.

Per automatizzare l'installazione di dnsmasq su altre distribuzioni Linux, utilizza uno dei file precedenti per effettuare la personalizzazione necessaria. Per entrambi i file, se utilizzi l'indirizzo alternativo del server Amazon DNS 169.254.169.253, i file possono essere eseguiti su istanze VPC.

Per eseguire entrambi i file all'avvio, inserisci il contenuto del file in User data. Puoi utilizzare Esegui comando di AWS Systems Manager per eseguire lo script bash. È consigliabile utilizzare le direttive solo per l'inizializzazione al primo avvio.

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

  1. Per scaricare lo script nell'istanza e renderlo eseguibile, esegui questo comando:

    wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.sh
    chmod +x AutomateDnsmasq.sh
  2. Per eseguire lo script, esegui questo comando come utente root:

    sudo ./AutomateDnsmasq.sh

Informazioni correlate

Indirizzamento IP dell'istanza Amazon EC2

AWS UFFICIALEAggiornata 6 mesi fa