網狀 VPN 是那種悄無聲息讓一切變簡單的工具:您的筆電、家用伺服器、手機和各台 VPS 無論身在何處,都能透過私有位址互相存取。託管式網狀 VPN 的問題在於協調伺服器:一家公司掌握著您所有裝置的地圖。Headscale 是這台控制伺服器的開源替代品。把它跑在一台小 VPS 上,繼續使用原來的用戶端應用,地圖就歸您所有。
各部分如何配合
- Headscale(在您的 VPS 上)分配位址、分發公鑰,並執行您的 ACL。
- 用戶端就是標準的 Tailscale 應用,指向您的伺服器。
- 流量透過 WireGuard 在裝置之間直接傳輸。控制伺服器從不承載它。
最後這一點正是很小的方案就夠用的原因:VPS 只需回應小小的協調請求。
您需要準備
- Nano-IP(每月 $8):2 vCPU 和 1 GB 記憶體遠超 Headscale 的用量。
- 獨立 IPv4 和一個網域,例如
hs.example.com。裝置透過 HTTPS 與控制伺服器通訊,因此 VPS 必須接受對內的 443;NAT 方案做不到(詳情)。
安裝(Debian 12 / Ubuntu 24.04)
從 GitHub 上 Headscale 的發布頁面下載目前的 .deb,並把版本號換成最新的:
HS_VER=0.26.1
wget -O headscale.deb \
"https://github.com/juanfont/headscale/releases/download/v${HS_VER}/headscale_${HS_VER}_linux_amd64.deb"
apt install -y ./headscale.deb caddy
編輯 /etc/headscale/config.yaml,關鍵的是這兩行:
server_url: https://hs.example.com
listen_addr: 127.0.0.1:8080
在前面放一個 Caddy 提供 HTTPS:
cat > /etc/caddy/Caddyfile <<'EOF'
hs.example.com {
reverse_proxy 127.0.0.1:8080
}
EOF
systemctl enable --now headscale
systemctl reload caddy
新增使用者和裝置
headscale users create alice
headscale users list # note the user's ID
headscale preauthkeys create --user 1 --expiration 24h
較舊的版本在 --user 中要求使用者名稱而不是 ID;headscale preauthkeys create --help 會告訴您目前版本需要哪一種。
在 Linux 裝置上:
tailscale up --login-server https://hs.example.com --authkey YOUR_KEY
在手機和桌面端,Tailscale 應用允許您在設定中指定自訂的控制伺服器。在 VPS 上執行 headscale nodes list,您的裝置應該就會出現在列表裡。
中繼與 NAT 穿透
大多數裝置都能直連。當兩台裝置無法直連時(嚴格的行動網路、雙重 NAT),流量會經過 DERP 中繼。開箱即用時,Headscale 使用 Tailscale 的公共中繼,中繼只能看到加密的資料包。如果您不希望路徑上有任何外部環節,就在 config.yaml 中開啟內建中繼(derp.server.enabled: true),並開放 UDP 3478。此時被中繼的流量會計入您的 VPS 頻寬。
坦誠的侷限
沒有官方的 Web 儀表板:使用者、金鑰和路由都是 CLI 指令(做過兩次就熟了)。託管服務的新功能會較晚才出現在 Headscale 中,甚至不會出現。而且控制伺服器現在由您負責:它當機時,已有的連線仍能工作,但新裝置無法加入,金鑰也無法重新整理。請做好備份:全部狀態都在 /var/lib/headscale。
對於家庭實驗室、一個家庭,或者想把裝置地圖從第三方伺服器上拿回來的小團隊來說,這是一台 $8 VPS 最好的用法之一。
相關
- 自建 WireGuard VPN:只需要一條通道的話,用純 WireGuard 即可
- 用於 VPN 的 VPS
- 用於遠端存取 Home Assistant 的 VPS
評論
目前還沒有評論。歡迎成為第一位。