Home Assistant и доступ извне.

Расскажу в кратце.

Для того что бы иметь доступ к нашему умному дому за пределами самого дома нужно как то организовать доступ. Есть несколько решений.

  1. Облако от HA, решение платное от самих разработчиков, если у вас есть 5$ в месяц, то это и вам проще и поддержите ребят, кто это все дело разрабатывает, что очень хорошо. Но такой способ мне лично дороговат, к тому же я могу сделать по другому.
  2. Постоянный внешний IP адрес. Платить за него тоже придется, может и не меньше чем ребятам из HA. Но он часто недоступен, особенно у мобильных операторов связи.
  3. Создание туннеля с вашим VPS сервером и уже через него осуществить доступ. Да конечно VPS штука тоже платная и надо еще раз взвесить, что будет дешевле и проще, платить 5$ или содержать облачную виртуалку. Опять же про себя, у меня этих виртуалок вагон и я просто прицепляюсь к одной из них и никаких доп плат нет.
  4. Способ когда IP адрес меняется, но все же хоть он и меняется он жестко фиксируется за вами на момент сесси, много на каких провайдерах именно так сделано. Тут нужно просто воспользоваться одним из сервисов динамических DNS и входить по доменному имени. Кстати много производителей роутеров имеют свои собственные сервисы динамических DNS.

И так поехали.

Для способов 2 и 4 мы делаем проброс портов 80 и 443 на своем роутере на сервак с HA.
Для способа 3 нам нужно поднять туннель между HA и VPS. Самый классный способ как по мне это WireGuard. На debian 11 ставится без всяких заморочек и входит в состав дистрибутива. Конкретно описывать не буду, есть куча мануалов в сети как настроить. А установка и пример конфига есть тут https://github.com/vkiranananda/ha-ansible/blob/main/playbooks/roles/wireguard/tasks/main.yml .
Если у вас VPS не KVM, а просто локальная виртуализация (часто дешевле), то WireGuard не встанет, тогда используйте OpenVPN, он чуть сложнее в настройке.

Теперь общие настройки.

Поднимаем nginx для способов 2 и 4 на HA для способа 3 на VPS.
Тут все просто, пишу по памяти.

apt-get install nginx

Конфиг

server {
    server_name my-ha.ru;
    listen 80;

    location / {
        proxy_pass          http://192.168.1.1:8123;
        proxy_redirect      off;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_set_header    Host                $http_host;
        proxy_set_header    X-NginX-Proxy       true;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade             $http_upgrade;
        proxy_set_header    Connection          "upgrade";
    }
}

192.168.1.1 адрес HA, для локальной установки подойдет 127.0.0.1.
my-ha.ru ваше DNS имя.

Для того что бы HA не ругался пишем в configuration.yaml

http:
  use_x_forwarded_for: true
  trusted_proxies: 192.168.1.2

где 192.168.1.2 это адрес nginx, если локально, то 127.0.0.1.
Проверяем по 80 порту, если все работает едем дальше.

Далее нам нужны сертификаты. Будем использовать certbot. Инструкция тут https://certbot.eff.org/instructions?ws=nginx&os=debianbuster .
Он же и донастроит нам nginx как нужно :). Так же он предложит сделать редирект с 80 порта, соглашаемся, что бы обезопасить себя от своих же кривых ручек :).

Все готово. Но напоследок расскажу очень классную вещь. HA очень удобно управлять с мобилки, особенно вне дома. Но согласитесь сидя дома, глупо гонять трафик через удаленный VPS и вот за это еще одно огромное спасибо разработчикам. На мобильном приложении они сделали два адреса, один внешний, а другой внутренний и там же можно указать wifi ssid для того что бы он понимал где вы находитесь :) .

Удачи :).

[ Править ]

@kiranananda