A continuación veremos como instalar y configurar el servicio DNS dinámico Duck DNS con Docker. Pero antes de todo veremos de forma breve que es un DNS dinámico y porque Duck DNS es una opción a tener muy en cuenta.
FUNCIÓN QUE TIENE UN SERVICIO DNS DINÁMICO (DDNS)
La función de un servicio dinámico DNS es facilitar el acceso a un servidor que tiene una IP pública dinámica. Para entenderlo mejor imaginemos la siguiente situación:
- Tenemos un servidor casero con la IP pública 88.41.25.30.
- Por lo tanto para acceder a los servicios del servidor tendremos que usar la IP 88.41.25.30.
- Como nuestro proveedor de Internet no nos ofrece una IP fija es posible que dentro de un día o dentro de una semanas la IP pública 88.41.25.30 pase a ser la 83.59.20.96 sin que sepamos absolutamente nada.
- Como la IP se ha modificado cuando ingresemos la IP 88.41.25.30 no podremos acceder a nuestro servidor.
Para solucionar este problema podemos usar un servicio DNS dinámico que realizará la siguiente función:
- El servicio DDNS asociará la IP pública de nuestro servidor a un dominio.
- Por lo tanto si continuamos con el ejemplo anterior el dominio geekland.duckdns.org tendrá asociada la IP 88.41.25.30. Para acceder a nuestro servidor deberemos usar el dominio geekland.duckdns.org.
- Cada 5 minutos nuestro servidor casero enviará nuestra IP pública al servicio DDNS y la asociará a nuestro dominio.
- En el caso que la IP pase de 88.41.25.30 a 83.59.20.96 no pasará absolutamente nada porque en menos de 5 minutos el dominio geekland.duckdns.org quedará asociado a la nueva IP. De está forma nuestro servidor casero siempre estará accesible mediante un dominio.
Si quieren información más detallada sobre el funcionamiento de un servicio DNS dinámico les invito a leer el siguiente enlace:
MOTIVOS PARA USAR DUCKDNS
Los motivos para usar DuckDNS son varios y son los que cito a continuación:
- Permiten generar hasta 5 dominios de forma gratuita. Una vez creados no hay que renovarlos periódicamente tal y como pasa con servicios como NO-IP.
- Únicamente registran los datos necesarios para que funcione su servicio. Los datos registrados no se venderán a terceros ni serán usados para realizar spam vía email.
- Ofrecen multitud de métodos para que nuestros routers y equipos puedan enviar nuestra IP pública a DuckDNS. Uno de estos métodos es mediante un contenedor de Docker.
- Resulta extremadamente cómodo y sencillo poder gestionar un servicio DDNS a través de un contenedor de Docker. Ejecutas el contenedor y te puedes olvidar por completo del resto.
INSTALAR Y CONFIGURAR EL SERVICIO DNS DINÁMICO (DDNS) DE DUCKDNS
Para instalar y configurar DuckDNS mediante un contenedor de Docker procederemos del siguiente modo.
Crear una cuenta de DUCK DNS
Accederemos a la siguiente URL:
Una vez dentro de la URL crearemos una cuenta a partir de nuestra cuenta de Google, reddit, Github o Twitter. En mi caso la genero la cuenta usando mi cuenta de gmail.
Apuntar el número de token que nos ofrece Duck DNS
Una vez generada la cuenta y una vez estamos logueados en Duck DNS veremos al siguiente pantalla.
Acto seguido anotaremos el número de token. Lo podemos apuntar en un papel o copiar en un archivo de texto. En mi caso, tal y como se puede ver en la captura de pantalla, el token es:
1049153f-d441-4995-b403-9c3f86695a14
Nota: Este token es privado y no lo debéis mostrar absolutamente a nadie.
Generar el dominio o dominios que usaremos para acceder a nuestro servidor
El siguiente paso consistirá en crear el dominio o dominios que usaremos para acceder a los servicios de nuestro servidor. En mi caso crearé los siguientes dominios:
ejemplo1.duckdns.org ejemplo2.duckdns.org
Para crear el dominio ejemplo1.duckdns.org tan solo tenemos que escribir ejemplo1 en el apartado domains y acto seguido presionar el botón add domain. De inmediato se generará el dominio de forma automática.
Del mismo modo que hemos creado el anterior dominio creamos el segundo dominio ejemplo2.duckdns.org
En estos momentos el proceso de configuración de Duck DNS en la web ha finalizado. Ahora tan solo tenemos que levantar el contenedor de Duck DNS en nuestro servidor con la ayuda de Docker.
Instalar Docker
Probablemente ya tengáis Docker instalado en su equipo, pero en caso contrario lo podéis instalar siguiendo los siguientes pasos:
Instalar Docker y Docker-Compose en Raspbian, Ubuntu, Debian, Fedora
Instalar el servicio DNS Dinámico DUCK DNS con Docker
Una vez instalado Docker tienen que ejecutar el siguiente comando en la terminal:
docker create \ --name=duckdns \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/Madrid \ -e SUBDOMAINS=ejemplo1,ejemplo2 \ -e TOKEN=1049153f-d441-4995-b403-9c3f86695a14 \ --restart unless-stopped \ linuxserver/duckdns
Nota: El contenedor creado funcionará en arquitectura amd64, arm64v8 y arm32v7.
Nota: En vuestro caso tendréis que reemplazar las partes verdes del comando por los siguientes parámetros.
- PUID: Por lo general será 1000. Podéis comprobarlo ejecutando el comando id seguido del nombre del usuario que usáis en vuestro servidor. En mi caso el usuario es joan, por lo tanto usaré el comando id joan.
- PGID: Por lo general será 1000. Podéis comprobarlo ejecutando el comando id seguido del nombre del usuario que usáis en vuestro servidor. En mi caso el usuario es joan, por lo tanto usaré el comando id joan.
- TZ: Indicaremos la zona horaria de nuestro país. En mi caso como estoy ubicado en España, por lo tanto uso Europe/Madrid.
- SUBDOMAINS: Separado por comas introducimos el subdominio o subdominios que creamos en apartados anteriores y queremos asociar con la IP de nuestro servidor.
- TOKEN: Tenemos que pegar o escribir el token de DuckDNS. El token de DuckDNS lo apuntamos en apartados anteriores.
Una vez creado el contenedor lo levantaremos ejecutando el siguiente comando:
docker start duckdns
A partir de estos momentos el procedimiento ha finalizado.
Accediendo a nuestros servicios a través del DDNS Duck DNS
A partir de estos momentos podemos acceder a los servicios de nuestro servidor mediante los dominios de DuckDNS.
Por lo tanto si en nuestro servidor tenemos una web escuchando en el puerto 80 tan solo tendremos que abrir un navegador y visitar la siguiente dirección:
http://ejemplo1.duckdns.org
A partir de estos momentos ya no será necesario usar la IP para acceder a nuestra página web.
Comprobar el funcionamiento de DuckDNS
Para comprobar que DuckDNS trabaja de forma adecuada consulten sus logs ejecutando el siguiente comando en la terminal:
docker logs -f duckdns
Cambiar la periodicidad con que nuestro servidor envía la IP a Duck DNS
El contenedor de Docker informará a DuckDNS cada 5 minutos de la IP pública del servidor. So queréis podéis modificar la frecuencia del siguiente modo.
Inicialmente accederemos al contenedor ejecutando el siguiente comando en la terminal:
docker exec -it duckdns /bin/bash
A continuación editaremos el trabajo cron encargado de refrescar la IP a Duck DNS. Para ello ejecutaremos el siguiente comando en la terminal:
crontab -e -u abc
Acto seguido se abrirá el editor de textos vim con la programación de trabajos del usuario abc. A partir de esto momentos tan solo tendrán que definir la periodicidad con la que quieren que se ejecuten el script que proporciona la IP del servidor a Duck DNS.
Una vez definida la periodicidad guardan los cambios, cierran el editor de textos y salen del contenedor.
Con todo respeto, me parece una auténtica barbaridad usar un servicio de contenedor para este tipo de tareas que se ejecutan con un simple comando curl en el crontab (si usas linux).
Esto es lo único necesario para actualizar duckdns:
echo url="https://www.duckdns.org/update?domains=dominio&token=12345678-1234-1234-1234-123456789abc&ip=" | curl -k -o /etc/duckdns/duck.log -K -
¿De verdad que se justifica crear un contenedor para eso?
Saludos.
No lo considero ninguna barbaridad en el momento que decidas montar todos tus servicios en contenedores. Es mucho más limpio, ordenado, fácil y práctico que hacerlo de forma tradicional. Además el contenedor Docker de Duck DNS únicamente consume 2.68 MB de memoria. Usando Cron no hay consumo «añadido», pero dudo mucho que 2.68MB cambien la vida a nadie. Además el contenedor de Duck DNS de Linuxserver tiene más de 102 millones de pulls lo que indica que la gente lo usa.
Saludos
Ademas es una buena manera de montar servidores , ya que si colapsa la máquina puedes levantar un docker idéntico en cualquier otro equipo, teniendo mas velocidad a la hora de montar un servidor nuevo.
Para alguien con un nivel intermedio puede ser fácil trabajar con Docker pero para un usuario con un nivel más bajo, instalar y comprender como funciona Docker es una cosa compleja, me parece que hay soluciones más simples que puedan usar todos los usuarios.
hola master. Me fue de gran ayuda este post . muchas gracias.
Muchas gracias por este post!!! me ha sido muy util
Es normal que la conexión ssh al dispositivo(en mi caso una raspberry) vaya muchísimo más lenta después de lanzar el contenedor? porque si lo desactivo la conexión vuelve a ir bien pero si no va muy lenta
Hola Alfredo,
El que tengas instalado o no este contenedor no te debería influir para nada en lo que comentas ya que lo único que hace el contenedor es dar tu IP periódicamente a DuckDNS. Por lo tanto en el momento que te conectas por SSH el contenedor no hace nada y por lo tanto no debería ser el responsable de tu lentitud.
Saludos
Gracias por las instrucciones. Ha sido muy fácil seguir tus explicaciones, salvo en el docker, que no domino nada ( asignatura pendiente ) y he optado por la creación de un ejecutable para cron.
Hola
También lo puedes hacer con Cron. Si usas Cron entonces elimina Docker de tu equipo.
Saludos
Buenas! muchas gracias por compartirnos esto, intentaba usar no-ip pero la conexión era inestable y me veía obligado a usar la ip local, ahora aparentemente todo va fantástico! solo una pregunta, mientras leía este post y configuraba los puertos vi que mi router tiene la capacidad de enviar la actualización del dns dinámico a duckdns y al intentarlo vi que cambio totalmente la dirección ip que tenia antes, como si todo el mundo creyera que yo tengo una dirección, pero el router dice que tengo otra y quería saber porqué pasa esto (aparentemente la dirección de verdad es la que dice el router y todo va de maravilla) muchas gracias.
Hola Adrían
DuckDNS no enmascara ninguna IP que yo sepa. Igual estarás confundiendo al IP interna con la IP pública.
Saludos
Hola amigo
Gracias por tu valioso aporte, en mi caso lo estoy usado en un Droplet de Digital Ocean y como ya tiene la ip publica se lo he puesto a un servidor de Asterisk FreePBX ahora lo siguiente será usar LetsEncrypt para el SSL.
saludos y gracias
Hola, bien y si estas en Windows 10 que ondas, no jodemos, porque no dices nada para este Sistema Operativo, que hacemos vosotros?? Podrías guiarnos.
Hola,
En este blog solo se publican artículos que se han llevado a la práctica. Como en mi caso nunca he instalado un cliente de DuckDNS en Windows no escribo sobre el tema.
Si miras en esta URL encontrarás 4 formas para instalarlo en Windows. O si lo prefieres también puedes usar un buscador web para encontrar un sitio donde lo expliquen para Windows.
Saludos
Realmente puedes hacerlo en docker con windows, docker desktop y con docker-compose.. es muy fácil, mira el video de duckdns de peladonerd
Hola,
He seguido los pasos y bien, he podido instalar sin problemas, sin embargo, puedo hacer pin al subdominio pero no puedo entrar al pc con el subdominio. ¿Es necesario abrir algún puerto o hacer algo más? Un saludo.
Hola, Para que el dominio de DuckDNS apunte a tu IP no es necesario abrir ningún puerto. Pero para acceder a un servicio mediante la URL si tienes que abrir los puertos que se necesite en cada caso.