Mi instancia privada de Amazon EC2 ejecuta Amazon Linux, Ubuntu o RHEL. ¿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 entradas de servidor DNS estático que persistan durante el reinicio.

Breve descripción

De forma predeterminada, las instancias de Amazon EC2 asociadas a Amazon Virtual Private Cloud (Amazon VPC) solicitan una dirección de servidor DNS en el startup. Esta solicitud se envía mediante el protocolo de configuración dinámica de host (DHCP). La respuesta DHCP devuelve las direcciones del servidor DNS escritas en el archivo /etc/resolv.conf. Las modificaciones manuales del archivo resolv.conf con direcciones de servidor DNS personalizadas se pierden al reiniciar la instancia. El método que utilice para solucionar este problema dependerá de su distribución de Linux. Para obtener más información sobre las VPC y los servidores DNS, consulte DHCP option sets in Amazon VPC.

Solución

Importante: Antes de cambiar la instancia de EC2, cree una copia de seguridad mediante una imagen de máquina de Amazon (AMI) o una instantánea de Amazon Elastic Block Store (Amazon EBS). Cambiar las configuraciones de red de una instancia puede hacer que la instancia sea inalcanzable.

Amazon Linux 2023

Amazon Linux 2023 utiliza systemd-resolved. Para obtener más información, consulte resolved.conf(5) en el sitio web archlinux.org.

Configuración del solucionador

Edite el archivo /etc/systemd/resolved.conf y cambie DNS y Opciones de dominio:

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

Como alternativa, cree un drop in. Por ejemplo, /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: Tenga en cuenta lo siguiente al configurar la opción Domains=~. en resolved.conf(5):

  • Si la opción Domains=~. no está configurada, entonces systemd-resolved podría usar 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 más específicos indicados en las configuraciones por enlace. Los nombres de dominio siguen resolviéndose mediante sus respectivos servidores DNS por enlace.

Para obtener más información sobre la configuración por enlace, consulte systemd-networkd#network files en el sitio web archlinux.org.

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 de localhost. Para cambiarlo, vuelva a crear el archivo con un contenido diferente o apunte a otro lugar que no sea el solucionador de código auxiliar de localhost. Por ejemplo, puede apuntar a /run/systemd/resolve/resolv.conf, que contiene una lista simplificada de los servidores utilizados por systemd-resolved.

Puede probar la configuración mediante el comando resolvectl status y, por ejemplo, resolvectl query amazonaws.com, y revisar el resultado.

Amazon Linux, Amazon Linux 2

Utilice una de las siguientes opciones para configurar la instancia de Amazon EC2. Si aplica ambas opciones, tendrán prioridad los servidores DNS especificados en el archivo ifcfg-eth0 (opción 2).

Para que funcione cualquiera de las opciones, el valor del parámetro PEERDNS del archivo ifcfg-eth0 se debe haber definido como yes. Si se define el parámetro PEERDNS como no, significa que se ignorarán los servidores DNS especificados en los archivos ifcfg-* o proporcionados por DHCP.

Opción 1:

1.    Edite o cree el archivo /etc/dhcp/dhclient.conf.

Nota: Debe tener privilegios de usuario raíz para editar este archivo. Conviértase en usuario raíz con sudo -i o implemente todos los comandos con sudo.

2.    Añada el comando supersede al archivo para anular los servidores de nombres de dominio. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desee que utilice la instancia:

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

Tras la modificación anterior, el archivo resolv.conf se actualiza al reiniciar la instancia y pasa a incluir únicamente los servidores DNS que especificó en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página del man en Linux.

3.    Defina el parámetro PEERDNS como yes en los archivos de configuración por interfaz (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Reinicie la instancia de EC2.

Opción 2:

1.    Para anular los valores del servidor DNS en el archivo /etc/dhcp/dhclient.conf, especifique los servidores DNS personalizados en los archivos de configuración por interfaz (/etc/sysconfig/network-scripts/ifcfg-*).

Por ejemplo, el siguiente ejemplo muestra el archivo /etc/sysconfig/network-scripts/ifcfg-eth0 de una instancia de Amazon Linux modificada para incluir dos servidores DNS personalizados (DNS1 y 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.    Defina el parámetro PEERDNS como yes en los archivos de configuración por interfaz (/etc/sysconfig/network-scripts/ifcfg-*).

Ubuntu 16.04

1.    Edite o cree el archivo /etc/dhcp/dhclient.conf.

Nota: Debe tener privilegios de usuario raíz para editar este archivo. Conviértase en usuario raíz con sudo -i o implemente todos los comandos con sudo.

2.    Añada el comando supersede al archivo para anular los servidores de nombres de dominio. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desee que utilice la instancia:

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

Tras esta modificación, el archivo resolv.conf se actualiza al reiniciar la instancia, de modo que solo incluya los servidores DNS que especificó en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página del man de Linux.

3.    Reinicie la instancia.

Ubuntu 18.04

De forma predeterminada, en Ubuntu 18.04, el paquete netplan.io gestiona la configuración de la interfaz de red, mientras que el servicio systemd-resolved gestiona las consultas de DNS mediante un solucionador de códigos secundarios. La IP del solucionador de código auxiliar se encuentra en /etc/resolv.conf.

A su vez, el archivo /etc/resolv.conf es un enlace simbólico al archivo /run/systemd/resolve/stub-resolv.conf. Es posible que la instrucción supersed en /etc/dhcp/dhclient.conf no funcione como se esperaba si se cumple alguna de las siguientes condiciones en el archivo /etc/resolv.conf:

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

Cualquiera de estas condiciones indica la personalización de la configuración predeterminada de Ubuntu 18.04.

Ejecute los siguientes pasos para anular los valores del servidor DNS:

1.    Netplan normalmente almacena los archivos de configuración en el directorio /etc/netplan. Cree un archivo denominado /etc/netplan/99-custom-dns.yaml y rellénelo con las siguientes líneas. Asegúrese de reemplazar las direcciones IP del servidor DNS del marcador de posición por las direcciones que prefiera:

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: En el ejemplo anterior, la interfaz se especifica como ens5. Asegúrese de que el nombre de la interfaz coincida con la interfaz de la configuración. Para ver el nombre de la interfaz, utilice el comando ip a.

2.    Ejecute el siguiente comando:

netplan generate

Tras estos cambios, seguirá viendo la IP del solucionador de código auxiliar en /etc/resolv.conf. Esto es lo que se espera. La IP del solucionador de código auxiliar es local en su sistema operativo. En segundo plano, el solucionador de código auxiliar utiliza los servidores DNS que especificó en el archivo 99-custom-dns.yaml anterior.

3.    Reinicie la instancia.

4.    Ejecute el comando systemd-resolve para confirmar que el sistema recoja correctamente las direcciones IP del servidor DNS deseadas:

systemd-resolve --status

RHEL 7.5

De forma predeterminada, el servicio NetworkManager administra el archivo resolv.conf. A continuación, el servicio rellena el archivo con los servidores DNS proporcionados por DHCP. Impida que NetworkManager administre el archivo resolv.conf para que el archivo resolv.conf ignore los servidores DNS proporcionados por DHCP.

Opción 1:

1.    Edite o cree el archivo /etc/dhcp/dhclient.conf.

Nota: Debe tener privilegios de usuario raíz para editar este archivo. Conviértase en usuario raíz con sudo -i o implemente todos los comandos con sudo.

2.    Añada el comando supersede al archivo para anular los servidores de nombres de dominio. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desee que utilice la instancia:

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

Tras esta modificación, el archivo resolv.conf se actualiza al reiniciar la instancia, de modo que solo incluya los servidores DNS que especificó en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página del man de Linux.

3.    Defina el parámetro PEERDNS como yes en los archivos de configuración por interfaz (/etc/sysconfig/network-scripts/ifcfg-*).

4.    Reinicie la instancia.

Opción 2:

1.    Cree el archivo /etc/NetworkManager/conf.d/90-dns-none.conf con el siguiente contenido:

[main]
dns=none

2.    Reinicie la instancia y, a continuación, rellene el archivo /etc/resolv.conf.

Información relacionada

networkmanager.conf(5) (página del man de Linux)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año