¿Cómo puedo asignar a la instancia de EC2 un servidor DNS estático que persista durante el reinicio?

8 minutos de lectura
0

Quiero configurar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) con un servidor DNS estático que persista durante el reinicio.

Resolución

De forma predeterminada, las instancias de EC2 que asocias a Amazon Virtual Private Cloud (Amazon VPC) solicitan una dirección de servidor DNS en el inicio. El protocolo de configuración dinámica de host (DHCP) envía la solicitud y, a continuación, Amazon escribe la respuesta DHCP con las direcciones del servidor DNS en el archivo /etc/resolv.conf.

Al reiniciar la instancia, pierdes las modificaciones manuales en el archivo resolv.conf que contiene direcciones de servidor DNS personalizadas. Para mantener tu servidor DNS estático al reiniciar la instancia, actualiza la configuración en función de tu distribución de Linux.

Importante: Antes de cambiar la instancia, usa una imagen de máquina de Amazon (AMI) para crear una copia de seguridad. O bien, utiliza una instantánea de Amazon Elastic Block Store (Amazon EBS) para crear una copia de seguridad. Cuando cambies las configuraciones de red de una instancia, es posible que la instancia se convierta en inalcanzable.

AL2023

Amazon Linux 2023 (AL2023) usa systemd-resolved. Para obtener más información, consulta systemd-resolved en el sitio web de Archlinux.

Configuración del solucionador

Edita el archivo /etc/systemd/resolved.conf y cambia el DNS y las opciones de dominio.

Archivo configuración de ejemplo:

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

Como alternativa, crea un drop in. Por ejemplo, utiliza el archivo /etc/systemd/resolved.conf.d/dns_servers.conf.

Archivo configuración de ejemplo:

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

Nota: Establece la opción Domains=~. para que systemd-resolved no use los servidores DNS por enlace establecidos en la configuración por enlace. La opción Domains=~. no afecta a las consultas de nombres de dominio que coincidan con los dominios de búsqueda específicos que indicas en las configuraciones por enlace. Cuando los nombres de dominio se resuelven, utilizan sus servidores DNS por enlace.

Modificación de la ubicación a la que apunta /etc/resolv.conf

De forma predeterminada, /etc/resolv.conf apunta al solucionador de código auxiliar del host local. Para cambiar el solucionador, vuelve a crear el archivo con los campos actualizados o apunta a otro lugar que no sea el solucionador de código auxiliar del host local. Por ejemplo, apunta al archivo /run/systemd/resolve/resolv.conf, que contiene una lista simplificada de los servidores que systemd-resolved usa.

Ejemplo del estado del archivo de configuración cuando usas la caché de DNS local:

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

Ejemplo del estado del archivo de configuración cuando no usas la caché de DNS local:

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

Para probar la configuración, ejecuta los siguientes comandos:

# resolvectl status
# resolvectl query amazonaws.com

Ejemplos de salidas:

# 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

Para configurar tus instancias de Amazon Linux 1 (AL1) o Amazon Linux 2 (AL2), actualiza el archivo etc/dhcp/dhclient.conf o ifcfg-eth0.conf. Si configuras ambos archivos, prevalecerán los servidores DNS que especifiques en el archivo ifcfg-eth0.conf.

Requisitos previos: Establece el valor del parámetro PEERDNS del archivo ifcfg-eth0.conf en . Al establecer el parámetro PEERDNS en no, Amazon EC2 ignora los servidores DNS especificados en los archivos ifcfg-* o que proporciona DHCP.

Actualización del archivo etc/dhcp/dhclient.conf

Sigue estos pasos:

  1. Abre el archivo /etc/dhcp/dhclient.conf. O bien, crea uno nuevo.
    Nota: Debes tener permisos de usuario raíz para editar este archivo. Utiliza sudo -i para convertirte en el usuario raíz, o bien sudo para implementar todos los comandos.
  2. Para anular los servidores de nombres de dominio, agrega el comando supersede al archivo:
    supersede domain-name-servers 000.000.000.000, 000.000.000.000;
    Nota: Sustituye 000.000.000.000 por la dirección IP del servidor o los servidores DNS que deseas que utilice la instancia.
  3. Establece el parámetro PEERDNS como en el archivo de configuración por interfaz, como /etc/sysconfig/network-scripts/ifcfg-*.
  4. Reinicia la instancia de EC2. El archivo resolv.conf se actualiza al reiniciar la instancia, de modo que solo incluya los servidores DNS que especificaste en el archivo dhclient.

Actualiza el archivo ifcfj-eth0

Sigue estos pasos:

  1. Para anular los valores del servidor DNS en el archivo /etc/dhcp/dhclient.conf, especifica los servidores DNS personalizados en los archivos de configuración por interfaz.
    El siguiente archivo muestra el archivo /etc/sysconfig/network-scripts/ifcfg-eth0 de una instancia de Amazon Linux que incluye dos servidores DNS personalizados:

    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. Establece el parámetro PEERDNS como en el archivo de configuración por interfaz, como /etc/sysconfig/network-scripts/ifcfg-*.

Nota: Si la instancia ejecuta Ubuntu 16.04 o Red Hat Enterprise Linux (RHEL) 7.5, también puedes seguir los pasos de resolución anteriores.

Ubuntu 18.04, 20.04 y 22.04

En Ubuntu 18.04, el paquete netplan.io gestiona la configuración de la interfaz de red, mientras que el servicio systemd-resolved utiliza un solucionador de código auxiliar para gestionar las consultas de DNS. La dirección IP del solucionador de códigos auxiliares se encuentra en el archivo /etc/resolv.conf, que es un enlace simbólico al archivo /run/systemd/resolve/stub-resolv.conf. Si el archivo /etc/resolv.conf tiene las siguientes configuraciones, es posible que la instrucción supersed en /etc/dhcp/dhclient.conf no funcione como se esperaba:

  • El archivo no es un enlace simbólico en tu instancia.
  • El archivo es un enlace simbólico que apunta a otro archivo, como /run/systemd/resolve/resolv.conf.

Para anular los valores del servidor DNS, sigue estos pasos:

  1. Crea un archivo denominado /etc/netplan/99-custom-dns.yaml con los siguientes datos:

    ### 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: Sustituye 1.1.1.1, 1.0.0.1 por la dirección IP de tu servidor DNS. Netplan almacena los archivos de configuración en el directorio /etc/netplan. En el ejemplo anterior se utiliza la interfaz ens5. Asegúrate de que el nombre de la interfaz coincida con tu interfaz. Para ver el nombre de la interfaz, ejecuta el siguiente comando:

    # ip a

    Resultado de ejemplo:

    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. Para convertir el archivo YAML de Netplan en archivos de configuración, ejecuta los siguientes comandos de netplan:

    # netplan generate
    # netplan try
    # netplan apply

    Nota: Es posible que recibas el mensaje «WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running». Puedes ignorar este mensaje y continuar con el siguiente paso. Si no deseas ver el mensaje de ADVERTENCIA, instala el paquete Open vSwitch con DPDK. La dirección IP del solucionador de código auxiliar ahora se encuentra en /etc/resolv.conf. Este es un comportamiento esperado porque la dirección IP del solucionador de código auxiliar es local en tu sistema operativo (SO). En segundo plano, el solucionador de código auxiliar utiliza los servidores DNS que especificaste en el archivo 99-custom-dns.yaml.

  3. Reinicia la instancia.

  4. Para confirmar que el sistema usa correctamente las direcciones IP del servidor DNS deseadas, ejecuta el siguiente comando según tu versión de Ubuntu:
    Ubuntu 18.04:

    systemd-resolve --status

    Ubuntu 20.04 y 22.04:

    resolvectl status

RHEL 7.5

De forma predeterminada, el servicio NetworkManager administra el archivo resolv.conf para las distribuciones de RHEL. A continuación, el servicio rellena el archivo con los servidores DNS que proporciona DHCP. Para usar servidores DNS personalizados, bloquea NetworkManager en el archivo resolv.conf para que el archivo resolv.conf ignore los servidores DNS que proporciona DHCP.

Completa los pasos para actualizar el archivo etc/dhcp/dhclient.conf en AL1 o AL2. O bien, crea el archivo /etc/NetworkManager/conf.d/90-dns-none.conf con el siguiente contenido:

[main]dns=none

Reinicia la instancia y, a continuación, crea el archivo /etc/resolv.conf manualmente.

Información relacionada

Conjuntos de opciones de DHCP en Amazon VPC

Archivos network en el sitio web de Archlinux

resolved.conf(5) en el sitio web de Archlinux

dhclient.conf(5) en el sitio web de Archlinux

networkmanager.conf(5) en el sitio web de Archlinux

OFICIAL DE AWSActualizada hace 2 meses