眾所周知,headscale 可以解決 Tailscale 的一些限制,例如設備數。但是 headscale 部署需要一個公網 IP。最近,Tailscale 的 Funnel 進入 beta 測試了,剛好又看到一個大佬寫了一篇利用 Tailscale 的 Funnel,將本地部署的 headscale 開放到公網的文章 Using Tailscale without using Tailscale。這意味著我們可以使用 Tailscale 讓人們通過互聯網訪問我們搭建的 headscale,並且只使用 headscale 來讓設備加入節點。感覺有點像背叛 Tailscale 官方啊,可憐三秒。
接下來簡單介紹一下操作步驟。
- 先在任意一台自己的本地機器上安裝最新穩定版的 Tailscale。
安裝命令
curl -fsSL https://tailscale.com/install.sh | sh
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 的環境變量(僅在 AUTH_TYPE 為 "Basic" 時使用)。如果不使用 Basic Auth,可以省略這些變量
- BASIC_AUTH_USER=user # 用於基本身份驗證
- BASIC_AUTH_PASS=pass # 用於基本身份驗證
# OIDC 的環境變量(僅在 AUTH_TYPE 為 "OIDC" 時使用)。如果不使用 OIDC,可以省略這些變量
- OIDC_AUTH_URL=https://auth.$DOMAIN/.well-known/openid-configuration # OIDC 發行者的 well-known 端點的 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 funnel 命令,將 headscale 開放到公網
tailscale serve tls-terminated-tcp:443 tcp://127.0.0.1:8080
tailscale funnel 443 on
# 證書認證
tailscale cert [分配的domain]
- 其他客戶端使用
iOS 端現在已經可以自定義 login-server,在設置中填入自己的 headscale 地址
其他端直接執行命令
tailscale login --login-server https://xxx.xxx.ts.net