Tailscale安装

本文介绍如何在 Linux 主机上通过 Docker Compose 部署 Tailscale 客户端,并结合 OAuth 凭据与标签(Tag)完成节点自动注册和权限管理。

1. 适用场景

– 需要将服务器或容器节点快速接入 Tailnet
– 希望通过 Tag 对节点进行分组和策略控制
– 希望使用 OAuth Client Secret 实现自动化部署

2. 前置条件

– 已安装 Docker 与 Docker Compose
– 宿主机支持 TUN 设备(/dev/net/tun)
– 具备 Tailscale 管理后台操作权限
– 已规划节点名称与目标标签(例如 tag:develop)

3. 在后台创建 OAuth 凭据

在 Tailscale 管理后台的 Trust Credentials 中创建 OAuth 凭据。

进入 Trust Credentials
创建 OAuth 凭据

权限范围建议按最小权限原则选择,当前场景可使用 read。

选择权限范围

创建完成后请立即保存 Client Secret,后续将用于容器环境变量 TS_AUTHKEY。

保存 Client Secret

4. 配置 Tag 与访问控制

在 Access Controls 中创建部署使用的标签(例如 tag:develop),并确保 ACL/TagOwners 策略允许该节点声明对应标签。

进入 Access Controls
创建或确认 Tag

5. Docker Compose 配置

示例配置如下:

services:
  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    network_mode: host
    restart: unless-stopped
    volumes:
      - /dev/net/tun:/dev/net/tun
      - ./tailscale-sock:/var/run/tailscale
      - ./tailscale-state:/var/lib/tailscale
    cap_add:
      - net_admin
      - sys_module
    environment:
      - TS_AUTHKEY=tskey-client-xxxxxx?ephemeral=false&preauthorized=true
      - TS_EXTRA_ARGS=--advertise-tags=tag:develop --netfilter-mode=off
      - TS_HOSTNAME=xxxx-domain
      - TS_NO_LOGS_NO_SUPPORT=true
      - TS_USERSPACE=false
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_SOCKET=/var/run/tailscale/tailscaled.sock

6. 启动与验证

在 compose 文件所在目录执行:

 docker compose up -d
 docker compose ps
 docker logs -f tailscale

验证节点是否成功入网:

 docker exec tailscale tailscale status
 docker exec tailscale tailscale ip

若返回 100.x 地址且状态正常,说明部署成功。

7. 关键参数说明

– TS_AUTHKEY: OAuth Client Secret 或可用的 Auth Key,用于首次注册
– TS_EXTRA_ARGS: 传递给 tailscale up 的参数,示例中包含 Tag 声明与 netfilter 配置
– TS_HOSTNAME: 节点在 Tailnet 中显示的主机名
– TS_USERSPACE=false: 使用内核网络栈,依赖 /dev/net/tun
– TS_STATE_DIR: 本地状态持久化目录,避免容器重建后重复登录
– TS_SOCKET: tailscaled 控制套接字路径