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 estan en rojo deberéis cambiarlo por vuestro dominio sin .duckdns.org, solo la parte primera, luego en el token debereis 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º Generariamos 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: !secret hass_pass
  ssl_certificate: /home/homeassistant/dehydrated/certs/myhome.duckdns.org/fullchain.pem
  ssl_key: /home/homeassistant/dehydrated/certs/myhome.duckdns.org/privkey.pem
  base_url: 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!!

También te podría gustar...

Deja un comentario