El fichero Hosts nos permite resolver localmente consultas DNS, lo que puede resultar muy útil para nuevos proyectos si los cambios de DNS aún no se han propagado en el dominio que tengamos en propiedad o si aún no disponemos de dominio y necesitamos realizar pruebas con consultas DNS.
Los cambios que realicemos en el fichero hosts solo afectaran al servidor local que estemos configurando y no tendrá efecto en otros servidores. A continuación os detallamos cómo habilitar la edición del fichero hosts para que los cambios persistan cuando reiniciemos el servidor.
Proceso para deshabilitar la sobreescritura del fichero hosts
Aviso
Si has creado el servidor recientemente en Clouding no necesitas realizar ningún cambio de configuración.
El primer paso que debemos realizar es deshabilitar que el servicio Cloud Init se encargue de la gestión del fichero hosts, ya que si intentamos editar directamente el fichero hosts y reiniciamos el servidor nos vamos a encontrar que el fichero hosts se ha sobreescrito con los valores iniciales.
Para deshabilitar que Cloud init controle el fichero hosts debemos realizar los siguientes pasos:
Ubuntu 18.04
Editamos el siguiente fichero de configuración de Cloud-Init:
# vi /etc/cloud/cloud.cfg
Buscamos la variable "manage_etc_hosts" y la establecemos a false.
manage_etc_hosts: false
Ubuntu 16.04, Debian 9 y Centos 7
Editamos el siguiente fichero de configuración de Cloud-Init:
# vi /etc/cloud/cloud.cfg
Añadimos la siguiente variable debajo de "disable_root: false":
manage_etc_hosts: false
En el apartado "cloud_init_modules" debemos eliminar el siguiente modulo:
- update_etc_hosts
Centos 8 y Debian 10
Editamos el siguiente fichero de configuración de Cloud-Init:
# vi /etc/cloud/cloud.cfg.d/99_clouding.cfg
Añadimos la siguiente variable debajo de "disable_root: false":
manage_etc_hosts: false
En el apartado "cloud_init_modules" debemos eliminar el siguiente modulo:
- update_etc_hosts
Con estos cambios ya podremos editar el fichero hosts y al reiniciar el servidor los cambios persistirán.
Ejemplo de registro en fichero Hosts
Si quisiéramos que nuestro servidor al hacer la consulta DNS de "mail.example.com" hiciera la consulta localmente deberíamos realizar los siguientes pasos:
Editamos el fichero hosts:
# vi /etc/hosts
Añadimos la siguiente linea:
127.0.0.1 mail.example.com
Antes de realizar el cambio si realizamos un ping a mail.example.com el resultado sería el siguiente:
root@mail:~# ping mail.example.com
ping: mail.example.com: Name or service not known
En cambio, después de añadir "127.0.0.1 mail.example.com" podemos ver que ya responde la consulta DNS y por la ip de "loopback" del propio servidor:
root@mail:~# ping mail.example.com
PING mail.example.com (127.0.0.1) 56(84) bytes of data.
64 bytes from mail.example.com (127.0.0.1): icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from mail.example.com (127.0.0.1): icmp_seq=2 ttl=64 time=0.040 ms
Si la consulta DNS que queremos hacer se encuentra en un servidor externo bastaría con modificar la IP 127.0.0.1 por la IP pública del servidor externo.
Con estos sencillos pasos podemos añadir registros a "/etc/hosts" para que el servidor resuelva las consultas DNS localmente.