воскресенье, 7 июня 2020 г.

Управление Home Assistant из любой точки мира (duckdns)


            В прошлой статье я описал как настроить подключение к Home Assistant из любой точки, где есть интернет используя сервис Noip. Как и обещал, опишу еще один способ используя сервис duckdns, который в отличие от предыдущего способа не требует настройки Dynamic DNS в роутере.


              В роутере должен быть настроены статический адрес для home assistant и проброс дня него 80 и 443 портов:


Регистрация на сайте www.duckdns.org:
     Нажимаем вход через Google:

Входим в свой аккаунт google:

               Сохраняем куда-то свой токен (это набор букв и цифр после слова token), он нам позже пригодится. Придумываем доменное имя, вписываем его между “http://”  и “.duckdns.org” и нажимаем “add domain”:
 
       Доменное имя *******.duckdns.org создано. Сохраняем его себе рядом с токеном:

     Настройка Home Assistant
Из официального “Add-on store” устанавливаем аддон Duck DNS:


       После установки переходим в меню “Configuration”:

Прописываем для генерации сертификатов:
           accept_terms – true  
           “token:” и “domain:” – ранее сохраненные данные из DuckDNS


         Настройка  DuckDNS завершена. Никаких изменений в файле configuration.yaml делать не нужно, обслуживанием сертификатов будет заниматься NGINX.
       Далее устанавливаем (но пока не запускаем) аддон “NGINX Home Assistant SSL proxy”:




      В конфигурации “NGINX Home Assistant SSL proxy” прописываем доменное имя из DuckDNS:

      Запускаем аддоны “Duck DNS” и “NGINX Home Assistant SSL proxy ”.  Возможно придется подождать некоторое время и несколько раз данные аддоны перезапустить и перезагрузить Home Assistant чтоб установились сертификаты:


           После успешной настройки можно подключаться к своему умному дому из любой точки мира используя доменное имя, полученное на сайте duckdns.org:
Update 17.07.2021:
        После обновления Home Assistant до версии v2021.7.0 при попытке соединиться с умным домом из интернета появилась ошибка: "400: Bad Request"
        Для ее исправления необходимо в файл configuration.yaml добавить следующее:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - XXX.XXX.XXX.XXX # Add the IP address of the proxy server

        где XXX.XXX.XXX.XXX - это IP адрес addon_core_nginx_proxy в докере. Узнать его можно с помощью portainer  в разделе Networks → Compose_DefaultВ самом низу вы найдете IP-адрес Lets_Encrypt.

        Если же у Вас, как и у меня portainer не установлен, адрес можно узнать используя командную строку. Для этого я подключился при помощи putty (также можно это сделать локально на сервере с home assistant) и ввел следующие команды:

sudo docker network ls


           Далее находим в списке имя компьютера (сервера) с home assistant (у меня это hassio) и добавляем его в  команду 
docker network inspect <network_name>

У меня получилось так:

sudo docker network inspect hassio


Находим адрес 
addon_core_nginx_proxy и прописываем его в configuration.yaml:


После перезапуска Home Assistant доступ из интернета заработал как и прежде.

Update 21.10.2021:
 После очередного обновления и перезагрузки пропал доступ из вне к Home Assistant, из локалки проблем с доступом небыло:

  В настройках ошибок не обнаружил, последующие перезапуски Home Assistant результата не принесли. Решилось все перезапуском NGINX Home Assistant SSL proxy. Может кому пригодится:





2 комментария:

  1. Спасибо тебе, добрый человек!
    Это единственная подробная и рабочая инструкция.

    ОтветитьУдалить
  2. Для ошибки `400: Bad request` также нужно добавить в configuration.yaml:

    http:
    # ssl_certificate: /ssl/fullchain.pem
    # ssl_key: /ssl/privkey.pem
    use_x_forwarded_for: true
    trusted_proxies:
    - 172.30.33.0/24
    ip_ban_enabled: true
    login_attempts_threshold: 5

    Reboot и все будет работать

    ОтветитьУдалить