Proxmox + HestiaCP + Home Assistant + WireGuard

Witam szanownych użytkowników forum :slight_smile:

Przychodzę do was z problem, z którym męczę się od niedzieli. Mianowicie chcę sobie zrobić dostęp do HA przez internet, do tego chcę wykorzystać istniejącą u mnie w domu infrastrukturę, która przedstawia się następująco:

  Stary PC (2016 rok) który robi mi jako serwer a na nim:  

Proxmox z dwiema maszynami wirtualnymi. Na pierwszej maszynie stoi HestiaCP (serwer www) z Nextcloud i jellyfin. Na drugiej maszynie jest home assistant.

Mam również wykupionego VPSa na którym mam serwer WireGuard. WG jest podpięte pod maszynę z HestiaCP. Generalnie WG ogarnia mi stałe IP dla tej maszyny.

I o ile na maszynie pierwszej zdalny dostęp działa bez problemu, to mam problem z HA.

Poniżej przedstawię moją konfigurację.

Szablon reverse proxy nginx (HestiaCP) IP - 192.168.0.18

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen      %ip%:%proxy_ssl_port% ssl;
    server_name %domain_idn% %alias_idn%;
    error_log   /var/log/%web_system%/domains/%domain%.error.log error;

    ssl_certificate     %ssl_pem%;
    ssl_certificate_key %ssl_key%;
    ssl_stapling        on;
    ssl_stapling_verify on;

    include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*;

    location / {
        proxy_pass http://192.168.0.16:8123;
        proxy_set_header Host $host;
        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 Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_buffering off;
        proxy_read_timeout 3600;
        proxy_redirect off;
    }


    location /api/websocket {
        proxy_pass http://192.168.0.16:8123/api/websocket;
        proxy_set_header Host $host;
        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 Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_buffering off;
        proxy_read_timeout 3600;
        proxy_redirect off;
    }


    proxy_hide_header Upgrade;

    include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}


configuration.yaml IP - 192.168.0.16

http:
  server_port: 8123
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.0.18
  ip_ban_enabled: true
  login_attempts_threshold: 10

Port domyślny mam zmieniony.

Problem jest taki, że pod wskazaną subdomeną pojawia się formularz logowania, ale nie mogę się zalogować :confused: Dane logowania są na pewno poprawne.

Logi z HA:
2024-05-08 21:28:23.266 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from IP nazwa dostawcy internetu (IP). Requested URL: ‘/auth/token’. (Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0)

Na innych przeglądarkach jest to samo, sprawdzałem też dostęp przez telefon z internetu mobilnego. Cały czas mam zapętlone logowanie.

Jakieś porady od bardziej doświadczonych kolegów/koleżanek? :slight_smile:

Sprawdź wpisy:

configuration.yaml
http: !include http.yaml

Zawartość:

ip_ban_enabled: true
login_attempts_threshold: 10
use_x_frame_options: false

Możliwe że twoje IP zostało dodane na listę zablokowanych.
ip_bans.yaml Jeżeli tak się stało login i hasło mogą być poprawne ale i tak zostaną odrzucone.

Nie mam takiego pliku w file editor.

https://www.home-assistant.io/integrations/http/

https://community.home-assistant.io/t/login-attempt-or-request-with-invalid-authentication-when-trying-to-access-remotely/373848

Sprawdzałem powyższe tematy, i chyba już próbowałem wszystkiego i dalej mi nie działa zdalny dostęp przez moją infrastrukturę.

Dla testów spróbowałem dostępu przez duckdns i ta metoda działała.

Więc albo masz cos źle w konfiguracji, albo jakiś bug w aktualizacji.

(MainThread) [homeassistant.components.http.ban]

Wpisujesz login i hasło ręcznie czy używasz jakiś auto loginów ?
Podobno aktualizacja 2024.5.1 naprawia takie błędy.

Standardowo hasła/loginy zapisane w przeglądarce. Ale z tego co czytałem, ten bug występował tylko w firefoxie, a ja testowałem na różnych przeglądarkach.

Jaki jest cel “rozdzielenia” tego? To wg mnie powoduje opisany problem przez Ciebie, jeżeli robisz proxy to dla całego HA /* a nie tylko dla wybranych /path (zapis oczywiście musisz dostosowac bo opisuję ogólnikowo). Popatrz jaki masz błąd w logowaniu, jaki path:

Jak już mówiłem wyżej, próbuje wszystkiego. A to było rozwiązanie z jakiegoś innego forum.

Dodatkowo konsola przeglądarki przy próbie logowania, pokazuje coś takiego:

Cytat
Firefox nie może nawiązać połączenia z serwerem wss://mojadomena/api/websocket. socket.js:34:23
Uncaught (in promise) 1

A gdy minie 60 sekund, pokazuje poniższy komunikat:

Cytat
Zasób w „https://mojadomena/static/fonts/roboto/Roboto-Regular.woff2” wstępnie wczytany ze wstępnym wczytywaniem odnośnika nie został użyty w ciągu kilku sekund. Upewnij się, że wszystkie atrybuty znacznika wstępnego wczytywania są poprawnie ustawione. lovelace
Zasób w „https://mojadomena/static/fonts/roboto/Roboto-Medium.woff2” wstępnie wczytany ze wstępnym wczytywaniem odnośnika nie został użyty w ciągu kilku sekund. Upewnij się, że wszystkie atrybuty znacznika wstępnego wczytywania są poprawnie ustawione.

Na githubie ktoś miał podobny problem i inny użytkownik odpisał mu:

Cytat
Had the same problem. In the browser console log I found that there was no connection to the web socket. I adjusted the availability of wss, the problem was solved. Maybe it will help someone

Niestety nie napisał konkretnego rozwiązania.

Edyta:
Znalazłem rozwiązanie :slight_smile: Tak mnie naszło, czy aby problem nie leży po stronie HestiaCP. I co się okazało, że panel ten w domyślnym szablonie nginx ma linijkę:

proxy_hide_header Upgrade;

Którą po prostu należy usunąć w powyższej konfiguracji :smiley:

Dziękuję za pomoc :slight_smile: