よく知られているように、headscale は Tailscale の制限(デバイス数など)を解決することができます。ただし、headscale の展開にはパブリック IP が必要です。最近、Tailscale の Funnel がベータテストに入ったため、Tailscale を使用せずに headscale をインターネット上で公開する方法についての記事「Using Tailscale without using Tailscale」を見つけました。これにより、headscale を使用して構築したものにインターネット経由でアクセスできるようになり、デバイスをノードに参加させるために headscale のみを使用することができます。Tailscale 公式に裏切られたような気分ですね。
次に、手順を簡単に紹介します。
- まず、自分のローカルマシンのいずれかに最新の安定版の Tailscale をインストールします。
インストールコマンド
curl -fsSL https://tailscale.com/install.sh | sh
- 次に、headscale を起動します。ここでは、docker-compose を使用して展開します。ほとんどは公式のチュートリアルを参考にしました。
また、webuiも個別に起動して、確認するために使用します。
version: '3.8'
services:
headscale:
image: 'headscale/headscale:latest'
container_name: headscale
volumes:
- /data/docker/headscale/config:/etc/headscale/
environment:
- TZ=Asia/Shanghai
ports:
- '9090:9090'
- '8080:8080'
restart: always
command: headscale serve
headscale-webui:
image: ghcr.io/ifargle/headscale-webui:latest
container_name: headscale-webui
restart: always
ports:
- '8083:5000'
environment:
- TZ=Asia/Shanghai
- COLOR=red # ベースカラーを使用します(darken-3などは使用しません)-
- HS_SERVER=http://headscale:8080 # Headscaleサーバーに到達可能なエンドポイント
- DOMAIN_NAME=http://headscale-webui:5000 # このコンテナのベースドメイン名
- SCRIPT_NAME=/admin # これはアプリケーションのベースパスです(wsgiでは名前「SCRIPT_NAME」が必要です)。ルート/でホストしている場合は削除してください
- KEY="" # "openssl rand -base64 32"で生成します。ディスク上のキーを暗号化するために使用されます。
- AUTH_TYPE= # AUTH_TYPEはBasicまたはOIDCです。認証を使用しない場合は空白にします
- LOG_LEVEL=info # ログレベル。 "DEBUG"、"ERROR"、"WARNING"、または "INFO"。 デフォルトは "INFO"
# Basic認証の環境変数(AUTH_TYPEが "Basic"の場合にのみ使用されます)。 Basic認証を使用していない場合は省略できます
- BASIC_AUTH_USER=user # 基本認証に使用されます
- BASIC_AUTH_PASS=pass # 基本認証に使用されます
# OIDCの環境変数(AUTH_TYPEが "OIDC"の場合にのみ使用されます)。 OIDCを使用していない場合は省略できます
- OIDC_AUTH_URL=https://auth.$DOMAIN/.well-known/openid-configuration # OIDC発行者のウェルノウンエンドポイントのURL
- OIDC_CLIENT_ID=headscale-webui # Headscale-WebUIのOIDC発行者のクライアントID
- OIDC_CLIENT_SECRET=YourSecretHere # Headscale-WebUIのOIDC発行者のシークレットキー
volumes:
- /data/docker/headscale/web-ui/data:/data # Headscale-WebUIのストレージ。./volumeがUID 1000によって読み取り可能であることを確認してください(chown 1000:1000 ./volume)
- /data/docker/headscale/config/:/etc/headscale/:ro # Headscaleの設定ストレージ場所。Headscaleの設定を読み取るために使用されます。
- 次に、Tailscale ファンネルコマンドを実行して、headscale をインターネット上で公開します。
tailscale serve tls-terminated-tcp:443 tcp://127.0.0.1:8080
tailscale funnel 443 on
# 証明書の認証
tailscale cert [割り当てられたドメイン]
- 他のクライアントの使用方法
iOS では、ログインサーバーをカスタマイズすることができるようになりました。設定で自分の headscale アドレスを入力します。
その他のプラットフォームでは、次のコマンドを使用します。
tailscale login --login-server https://xxx.xxx.ts.net