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

6 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 utilizzando dnsmasq. Per ulteriori informazioni, consulta dnsmasq sul sito Web thekelleys.org.uk.

Completa i seguenti passaggi:

  1. Per installare il server dnsmasq, esegui il comando seguente:

    sudo yum install -y dnsmasq
  2. Per creare un utente di sistema dedicato per eseguire dnsmasq, esegui il seguente comando:

    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. Quando dnsmasq passa a un altro utente, i privilegi del root vengono eliminati.

  3. Per creare una copia del file dnsmasq.conf esegui il seguente comando:

    sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori

    Per aprire il file di configurazione con un editor di testo, esegui il comando seguente:

    sudo vim /etc/dnsmasq.conf
  4. Per modificare il file /etc/dnsmasq.conf, esegui il seguente comando di 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.**Questa opzione può anche causare il fallimento di una ricerca DNS inversa per il file dei lease DHCP (Dynamic Host Configuration Protocol). Se desideri eseguire correttamente una ricerca inversa, commenta o rimuovi bogus-priv.

  5. Crea il file /etc/resolv.dnsmasq. Quindi, per impostare il server Amazon DNS o i server di nomi di dominio personalizzati che hai specificato nei set di opzioni DHCP, esegui il seguente comando:

    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.

  6. Per riavviare il server dnsmasq e impostare l'avvio del servizio all'avvio, esegui una delle seguenti azioni.
    Per avviare Amazon Linux 1 all'avvio, esegui il seguente comando:

    sudo service dnsmasq restart
    sudo chkconfig dnsmasq on

    Per avviare Amazon Linux 2 e Amazon Linux 2023 al riavvio, esegui il seguente comando:

    sudo systemctl restart dnsmasq.service
    sudo systemctl enable dnsmasq.service
  7. 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)
    ...
  8. 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 Come faccio ad assegnare un server DNS statico all'istanza Amazon EC2 che persiste durante il riavvio?

    Quindi, per configurare il resolver DNS predefinito come opzione di riserva esegui i seguenti comandi:

    sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
  9. Per applicare la modifica, esegui una delle seguenti azioni. Esegui il seguente comando dhclient:

    sudo dhclient

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

    sudo systemctl restart network

    -oppure-
    Per riavviare l'istanza, esegui il comando seguente:

    sudo reboot

    Nota: per Amazon Linux 2023, esegui sudo systemctl restart systemd-networkd.service al posto di dhclient.
    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.
    Esempio di risposta:

    ; <<>> 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:

  • AutomateDnsmasq.sh bash script
  • Direttive AutomateDnsmasq.cloudinit

Per ulteriori informazioni su AutomateDnsmasq.sh bash script, consulta #!/bin/bash sul sito Web di GitHHub.

Per ulteriori informazioni sulle direttive AutomatedNSMasq.cloudInit, consulta #cloud -config sul sito Web di GitHHub.

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

Quando entrambi i file utilizzano l'indirizzo alternativo del server Amazon DNS 169.254.169.253, i file possono essere eseguiti su istanze VPC.

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

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

  1. Per scaricare lo script sulla tua istanza e renderlo eseguibile, esegui il comando seguente:

    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 utilizza sudo:

    sudo ./AutomateDnsmasq.sh

Informazioni correlate

Indirizzamento IP dell'istanza Amazon EC2

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa