🏠

Home Assistant ContainerをHTTPSで公開する

2024/03/22に公開

はじめに

Home Assistantを外部に公開すると、自宅の外やGoogle Assistantなどから利用できるようになります。公開する方法の1つとして、公式ではアドオンのDuckDNSを利用する方法が紹介されています。しかし、Home Assistant Containerはアドオンに対応していません。そこでこの記事では、比較的簡単に公開ができるCloudflare Tunnelを使用します。

Cloudflare Tunnelとは

Cloudflare Tunnelはサーバからアウトバウンド通信のみで外部からの安全なサーバへのアクセスを実現するサービスです。サーバ上でcloudflaredという軽量デーモンを立ち上げることによって暗号化された通信を提供します。

https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/

Cloudflare Tunnelの初期設定

前提条件

  • Cloudflareでドメイン名が管理されている

手順

  1. CloudflareのDashboardの左ペインからZero Trustをクリック
  2. Networks内のTunnelsをクリック
  3. Cerate a tunnelをクリック
  4. Select tunnel typeではCloudflaredを選択
  5. Name your tunnelではわかりやすい名前を入力
  6. Install and run connectorsでは起動コマンドが表示されるので控えておく(この中のトークンをあとで使用する)
  7. Route Trafficではホスト名とサービスを設定する
    サービスのTypeはHTTP、URLはHome Assistantを設置するサーバのローカルIPアドレスを指定する

デーモンの起動

Cloudflare Tunnelの初期設定が完了したので、cloudflaredとHome Assistantを実行します。

docker-compose.yml
version: '3'
services:
  cloudflared:
    container_name: cloudflared
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - path/to/config:/config #要変更
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
.env
CLOUDFLARE_TUNNEL_TOKEN= #トークンを入力

https://www.home-assistant.io/installation/linux/#docker-compose

docker compose up -dで起動後、ダッシュボードのトンネル一覧を見るとステータスが変わっています。

Home Assistant Containerの設定

ただ起動しただけでは設定したホスト名にアクセスしても400エラーが返されます。これはHome Assistant側がcloudflaredを信頼していないために発生するものです。
Home Assistantのconfiguration.yamlに以下を追加することで解決できます。

configuration.yaml
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.20.0.2 #各自異なる

https://www.home-assistant.io/integrations/http/#reverse-proxies

指定するプライベートIPアドレスはcloudflaredのものです。トンネル一覧から該当のトンネルをクリックしてConnector IDをクリックした先で確認できます。

設定が完了したらHome Assistantのコンテナを再起動してください。
ここまで行えば設定したホスト名へ正しくアクセスできるようになります。

最後に

Cloudflare Tunnelを使ってHome Assistant ContainerをHTTPSで公開する手順を説明しました。Cloudflare TunnelはCloudflare Accessというゼロトラストネットワークアーキテクチャを実現するサービスと連携することでポリシー設定などと使うことが可能です。(Home Assistantのスマホアプリと一部相性が悪い)
間違いを発見した際はご指摘いただけますと幸いです。

GitHubで編集を提案

Discussion