記錄 Proxmox LXC 環境需使用 --tun=userspace-networking 的解法、 TS_USERSPACE 環境變數在新版失效的坑,以及 /usr/local/bin 的 symlink 設定。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
126 lines
2.8 KiB
Markdown
126 lines
2.8 KiB
Markdown
# Operations Guide
|
||
|
||
## 日常操作
|
||
|
||
### 啟動服務
|
||
|
||
```bash
|
||
./run.sh
|
||
```
|
||
|
||
啟動 Tailscale Docker 容器(背景執行)。
|
||
|
||
### 停止服務
|
||
|
||
```bash
|
||
./stop.sh
|
||
```
|
||
|
||
停止並移除容器。
|
||
|
||
### 連線至 Headscale
|
||
|
||
```bash
|
||
./docker_exec_tailscale_up.sh
|
||
```
|
||
|
||
使用預設的 Auth Key 連線至 `https://headscale.lotimmy.com`,並:
|
||
- 廣播子網路 `192.168.88.0/24`
|
||
- 啟用出口節點(Exit Node)
|
||
- 接受其他節點的路由
|
||
|
||
### 檢查狀態
|
||
|
||
```bash
|
||
./docker_exec_tailscale_status.sh # 查看連線狀態
|
||
./docker_exec_tailscale_ip.sh # 查詢 Tailscale IP
|
||
```
|
||
|
||
### 執行任意 Tailscale 指令
|
||
|
||
```bash
|
||
./tailscale status
|
||
./tailscale ping <peer>
|
||
./tailscale netcheck
|
||
```
|
||
|
||
`./tailscale` 是 `docker exec -i tailscale tailscale` 的包裝腳本。
|
||
|
||
部署後建議建立 symlink 讓系統全域可用:
|
||
|
||
```bash
|
||
ln -sf /opt/tailscale/tailscale /usr/local/bin/tailscale
|
||
```
|
||
|
||
之後即可在任何路徑直接執行 `tailscale status` 等指令。
|
||
|
||
## Proxmox LXC 部署注意事項
|
||
|
||
LXC 容器環境下 `/dev/net/tun` 不存在且無法用 `mknod` 建立,tailscaled 會啟動失敗。
|
||
|
||
**解法:** 使用 userspace networking 模式:
|
||
|
||
```yaml
|
||
# docker-compose.yml
|
||
command: >
|
||
sh -c "tailscaled --tun=userspace-networking"
|
||
```
|
||
|
||
並移除 volumes 中的 `/dev/net/tun:/dev/net/tun` 掛載。
|
||
|
||
**注意:**
|
||
- `TS_USERSPACE=true` 環境變數在新版 Tailscale(v1.96+)無效,必須直接傳 `--tun=userspace-networking` 參數
|
||
- userspace networking 模式**不支援** `--advertise-routes` 和 `--advertise-exit-node`,該節點無法作為子網路由器或出口節點
|
||
|
||
## 節點部署對照表
|
||
|
||
| 主機 | 類型 | Tailscale IP | 主機名稱 | 備註 |
|
||
|------|------|-------------|---------|------|
|
||
| 192.168.42.126 | Proxmox LXC | 100.64.0.8 | ip-192-168-42-126 | userspace networking,無路由/出口功能 |
|
||
|
||
## 防火牆與路由設定
|
||
|
||
在主機上執行:
|
||
|
||
```bash
|
||
sudo ./iptables_reset_and_configure.sh
|
||
```
|
||
|
||
此腳本會:
|
||
1. 清除所有現有 iptables 規則
|
||
2. 允許 SSH (22)、HTTP (80)、HTTPS (443)、ICMP
|
||
3. 設定 Tailscale CGNAT 範圍 (100.64.0.0/10) 的 NAT MASQUERADE
|
||
4. 啟用 `tailscale0` ↔ `eth0` 之間的封包轉送
|
||
5. 將規則儲存至 `/etc/iptables/rules.v4`
|
||
|
||
## 環境變數
|
||
|
||
| 變數 | 說明 | 位置 |
|
||
|------|------|------|
|
||
| `TS_AUTHKEY` | Headscale 預認證金鑰 | `.env` |
|
||
|
||
## 持久化資料
|
||
|
||
- Tailscale 狀態檔案:主機的 `/opt/tailscale` 掛載至容器的 `/var/lib/tailscale`
|
||
- iptables 規則:`/etc/iptables/rules.v4`
|
||
|
||
## 故障排除
|
||
|
||
```bash
|
||
# 確認容器正在執行
|
||
docker ps | grep tailscale
|
||
|
||
# 查看容器日誌
|
||
docker logs tailscale
|
||
|
||
# 確認 TUN 裝置存在
|
||
ls -la /dev/net/tun
|
||
|
||
# 確認 IP 轉送已啟用
|
||
cat /proc/sys/net/ipv4/ip_forward
|
||
|
||
# 登出並重新連線
|
||
./tailscale logout
|
||
./docker_exec_tailscale_up.sh
|
||
```
|