Implentar DuckDNS y Let´s Encrypt en nuestro HA

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

También te podría gustar...

2 Respuestas

  1. RENE dice:

    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…

Deja un comentario