Mi instancia privada de Amazon EC2 ejecuta Amazon Linux, Ubuntu o RHEL. ¿Cómo se asigna un servidor DNS estático a la instancia EC2 que persista durante el reinicio?

7 minutos de lectura
0

¿Cómo se configura una instancia de Amazon Elastic Compute Cloud (Amazon EC2) con entradas de un servidor DNS estático que persista durante el reinicio?

Descripción breve

De forma predeterminada, una instancia de Amazon EC2 asociada a una Amazon Virtual Private Cloud (Amazon VPC) solicita una dirección de servidor DNS al iniciarse. 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 local /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 se utilice para resolver este problema depende de la distribución de Linux. Para obtener más información sobre las VPC y los servidores DNS, consulte Conjuntos de opciones de DHCP en Amazon VPC.

Resolución

Importante: Antes de cambiar la instancia de Amazon EC2, cree una copia de seguridad mediante una imagen de Amazon Machine Image (AMI) o una instantánea de Amazon Elastic Block Store (Amazon EBS). Cambiar la configuración de red de una instancia puede provocar que la instancia se convierta en inaccesible.

Amazon Linux, Amazon Linux 2

Use una de las siguientes opciones para configurar la instancia de Amazon EC2. Si se realizan ambas opciones, entonces los servidores DNS especificados en el archivo ifcfg-eth0 tienen prioridad (opción 2).

Para que cualquiera de las dos opciones funcione, el valor del parámetro PEERDNS del archivo ifcfg-eth0 se debe establecer en yes. Si el parámetro PEERDNS se establece en no, significa que se hará caso omiso de 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. Se puede convertir en raíz con sudo -i o implementar todos los comandos con sudo.

2.    Agregue el comando supersede (reemplazar) al archivo para anular domain-name-servers. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desea que utilice la instancia:

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

Después de la modificación anterior, el archivo resolv.conf se actualiza al reiniciar la instancia para que contenga únicamente los servidores DNS que se hayan especificado en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página man de Linux.

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

4.    Reinicie la instancia 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 modificado para que incluya 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.    Establezca el parámetro PEERDNS en 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. Se puede convertir en raíz con sudo -i o implementar todos los comandos con sudo.

2.    Agregue el comando supersede (reemplazar) al archivo para anular domain-name-servers. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desea que utilice la instancia:

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

Después de esta modificación, el archivo resolv.conf se actualiza al reiniciar la instancia para que contenga únicamente los servidores DNS que se hayan especificado en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página man de Linux.

3.    Reinicie la instancia.

Ubuntu 18.04

De forma predeterminada en Ubuntu 18.04, el paquete netplan.io se encarga de la configuración de la interfaz de red, a la vez que el servicio systemd-resolved se encarga de las consultas DNS mediante un sistema de resolución de stub. La dirección IP del sistema de resolución de stub 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 el enunciado de reemplazo en /etc/dhcp/dhclient.conf no funcione como se espera si cualquiera de los siguientes puntos es el caso para el archivo /etc/resolv.conf:

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

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

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

1.    Netplan suele almacenar los archivos de configuración en el directorio /etc/netplan. Cree un archivo llamado /etc/netplan/99-custom-dns.yaml y luego rellénelo con las siguientes líneas. Asegúrese de reemplazar el marcador de posición de las direcciones IP del servidor DNS con sus direcciones preferidas:

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 su configuración. Para ver el nombre de la interfaz, utilice el comando ip a.

2.    Ejecute el siguiente comando:

netplan generate

Después de estos cambios, todavía verá la IP del resolutor de código auxiliar en /etc/resolv.conf. Este es el comportamiento esperado. La IP del resolutor de errores es local a su sistema operativo. En segundo plano, el resolutor de código auxilar 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 capta correctamente las direcciones IP de los servidores DNS previstos:

systemd-resolve --status

RHEL 7.5

De manera predeterminada, el servicio NetworkManager administra el archivo resolv.conf. El servicio luego rellena el archivo con servidores DNS proporcionados por DHCP. Impida que NetworkManager administre el archivo resolv.conf, para que el archivo resolv.conf haga caso omiso de 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. Se puede convertir en raíz con sudo -i o implementar todos los comandos con sudo.

2.    Agregue el comando supersede (reemplazar) al archivo para anular domain-name-servers. En el siguiente ejemplo, sustituya xxx.xxx.xxx.xxx por la dirección IP del servidor o servidores DNS que desea que utilice la instancia:

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

Después de esta modificación, el archivo resolv.conf se actualiza al reiniciar la instancia para que contenga únicamente los servidores DNS que se hayan especificado en el archivo dhclient. Para obtener más información sobre el comando supersede, consulte dhclient.conf(5) en la página man de Linux.

3.    Establezca el parámetro PEERDNS en 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 luego rellene manualmente el archivo /etc/resolv.conf.


Información relacionada

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

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses