Buenas a todos de nuevo! Hoy vamos a enseñar a como implementar DuckDNS + LetsEncrypt para tener un servicio DNS (No-Ip) Gratuito y sin tener que renovarlo cada mes mas a parte tendremos certificados firmados para implementar la seguridad de nuestra conexión desde fuera a HA.
Lo primero de todo nos tenemos que dirigir a esta página y registrar una cuenta con un nombre de dominio. El resto del tutorial lo voy a seguir como myhome como nombre de dominio.
Lo segundo deberemos seguir las instrucciones para que nuestro sistema vaya actualizando la ip externa nuestra con el servidor duckdns en este link.
Una vez hayamos realizado los pasos anteriores, debemos entrar en nuestro router y abrir el puerto que queramos y redigirlo internamente a la ip de nuestra raspberry o sistema que este nuestro HA.
Antes de seguir deberemos probar que poniendo la dirección: http://myhome.duckdns.org:puerto, nos salga nuestro HA.
Una vez que ya este todo probado y funcionando seguimos con el tutorial.
Si no lo tuviéramos instalado deberíamos instalar la dependencia GIT así: sudo apt-get install git
A continuación deberemos estar como nuestro usuario homeassistant (sudo su -s /bin/bash homeassistant), en su mismo home clonaremos un archivo git con este comando:
git clone https://github.com/lukas2511/dehydrated.git
Iremos al directorio generado /home/homeassistant/dehydrated y crearemos un documento llamado domains.txt y en el interior del mismo escribiremos el dominio deel duckdns en nuestro caso: myhome.duckdns.org y guardaremos.
Lo siguiente es crear un archivo config sin extension y dentro de el tendra que contener:
# Which challenge should be used? Currently http-01 and dns-01 are supported
CHALLENGETYPE="dns-01"
# Script to execute the DNS challenge and run after cert generation
HOOK="${BASEDIR}/hook.sh"
Una vez copiado el texto anterior guardaremos. Deberemos crear en la misma carpeta un archivo llamado hook.sh y dentro de el pegaremos lo siguiente:
#!/usr/bin/env bash
set -e
set -u
set -o pipefail
domain="myhome"
token="your-duckdns-token"
case "$1" in
"deploy_challenge")
curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=$4"
echo
;;
"clean_challenge")
curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=removed&clear=true"
echo
;;
"deploy_cert")
sudo systemctl restart home-assistant@homeassistant.service
;;
"unchanged_cert")
;;
"startup_hook")
;;
"exit_hook")
;;
*)
echo Unknown hook "${1}"
exit 0
;;
esac
Los valores en domain y token que están en rojo deberéis cambiarlo por vuestro dominio sin .duckdns.org, solo la parte primera, luego en el token deberéis meter el vuestro que previamente os habrá dado la pagina de duckdns. Guardamos el archivo.
Haremos que el archivo anterior (hook.sh) sea ejecutable:
chmod 755 hook.sh
Una vez llegado a este punto, vamos a generar los certificados para luego implementar nuestro HA con https.
1º Registraremos una nueva clave privada con letsencrypt:
./dehydrated --register --accept-terms
Una vez realizado este paso debería darnos en la consola: Done!
2º Generaríamos el certificado:
./dehydrated -c
En este último paso nos va a pedir contraseña de root del usuario Home assistant, vamos a saltarnos este paso dando ctrl+C y ya estaría todo listo.
Los certificados LetsEncrypt tienen una caducidad de 90 días, para evitar esto vamos a necesitar que los renueve automáticamente, deberemos en el servicio cron del sistema ponerle para que cada día del mes los vaya renovando. Entraríamos en cron:
crontab -e
Al final del archivo pegaríamos lo siguiente:
0 1 1 * * /home/homeassistant/dehydrated/dehydrated -c
guardaríamos los cambios. Una vez llegados a este punto ya solo tendríamos que entrar en el archivo configuration.yaml de nuestro HA y rellenar el apartado de http:
http:
api_password: xxxxxx
ssl_certificate: /home/homeassistant/dehydrated/certs/myhome.duckdns.org/fullchain.pem
ssl_key: /home/homeassistant/dehydrated/certs/myhome.duckdns.org/privkey.pem
base_url: https://myhome.duckdns.org:8123
Lo marcado en rojo como ya vamos diciendo, deberemos modificarlo por nuestro dominio.
Finalmente reseteariamos nuestro HA:
sudo systemctl restart home-assistant@homeassistant.service
Nuestro HA debería ser accesible vía: https://myhome.duckdns.org:8123
Espero que os haya gustado!
Nos vemos en el siguiente post!!
Referencia: https://www.splitbrain.org/blog/2017-08/10-homeassistant_duckdns_letsencrypt
Buen tuto y agradecimiento total por vuestra labor, pero… para los que no podemos implementar duckdns en el router de nuestra compañía (caso de Vodafone que tiene los DDNS a una lista cerrada de proveedores entre los que no incluye duckdns) falta comentar en este tutorial la opción de abrir el servidor de la Raspberry a Internet implementando la instalación de «ddclient». Así es como he solucionado el acceso desde Internet a HA con duckdns en mi caso y dejo este comentario porque más de uno, como yo, se encontrarán con el mismo problema. Un saludo y os animo a continuar. Os sigo leyendo…
Muchísimas gracias por el aporte!!
Hola Rene,
podrías compartir la configuración ddclient para duckdns??
Gracias.
Pingback: Integracion de Google Home en Home Assistant | Domology 2.0
Pingback: Instalación Docker Parte 6 Lets EnCrypt + DuckDns | Domology 2.0
Hola
una pregunta, ¿solo es necesario abrir el puerto del HA? ¿no es necesario el 80 y 443?
Gracias.
Pingback: PyStreamy | Realiza stream seguro enigma2 – Jungle-Team.com
Pingback: Crear Certificados Duckdns firmados Let’s Encrypt – Jungle-Team.com
Muy bien, aparte de cambiar un par de rutas a los certificados, todo perfecto
Un apunte ahora no puedo acceder via ip local, cual puede ser el problema??