From 6f06b11261954e24d29c725172de1530f128a5ef Mon Sep 17 00:00:00 2001 From: Timmy Date: Sun, 21 Jun 2026 13:44:37 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20Tailscale=20(heads?= =?UTF-8?q?cale=20=E7=AF=80=E9=BB=9E)=20=E6=AE=B5=E8=90=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/README.md b/README.md index 954386e..71253c8 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,64 @@ services: ``` 然後 `cd /opt/echoip && docker compose up -d`。 +## Tailscale(headscale 節點) + +以 Docker 方式部署,結構比照 CT102(`/Users/timmy/dev/42_102`),檔案在 `/opt/tailscale`。 + +| 項目 | 值 | +|------|-----| +| Tailscale IP | `100.64.0.16`(hostname `ct105`,user `mainnet`)| +| 控制平面 | `https://headscale.lotimmy.com`(headscale 容器在 CT126)| +| Image | `tailscale/tailscale:latest`,`restart: unless-stopped` | + +```yaml +# /opt/tailscale/docker-compose.yml +services: + tailscale: + image: tailscale/tailscale:latest + container_name: tailscale + hostname: ct105 + restart: unless-stopped + network_mode: host + environment: + - TS_AUTHKEY=${TS_AUTHKEY} + - TS_EXTRA_ARGS=--login-server ${TS_LOGIN_SERVER} --reset + - TS_USERSPACE=true # 無 /dev/net/tun → userspace 模式 + - TS_STATE_DIR=/var/lib/tailscale + - TS_HOSTNAME=ct105 + volumes: + - ./state:/var/lib/tailscale + labels: + - "com.centurylinklabs.watchtower.enable=true" +``` + +`.env` 放 `TS_AUTHKEY`(headscale reusable preauth key)與 `TS_LOGIN_SERVER`。 + +常用: + +```sh +docker exec tailscale tailscale status +docker exec tailscale tailscale ip -4 +cd /opt/tailscale && docker compose up -d # 改設定後重建 +``` + +### 與 CT102 的差異(CT105 無 `/dev/net/tun`) + +CT105 是無 TUN 的 LXC,故與 CT102 的版本不同: + +- `TS_USERSPACE=true`、不掛 `/dev/net/tun`、無 `cap_add` / `privileged`。 +- 拿掉 `--advertise-routes` / exit-node(userspace 模式做不到)。 +- ⚠️ 副作用:其他節點能 ping、能看到 CT105,但**無法直接連到 CT105 本機服務**(如 echoip `:8080`)——userspace 模式不轉發入站到 localhost。 +- 升級路徑:要完整功能(subnet router / exit node / 入站到本機服務),須在母機(PVE node)替此 LXC 開 TUN,再把 compose 改成 CT102 那版(`TS_USERSPACE=false` + 掛 `/dev/net/tun` + `cap_add` + `--advertise-routes`)。 + +### preauth key 來源 + +headscale 容器在 CT126,用 CLI 產生(公開端點的 API token 已失效): + +```sh +ssh ct126 'docker exec headscale headscale preauthkeys create --user 1 --reusable --ephemeral=false --expiration 87600h' +``` + ## 其他 - 本機服務:sshd:22、Postfix(僅 `127.0.0.1:25`)、systemd-resolved(本機 DNS)。對外僅 echoip:8080。