Skip to content

🚀 使用 Docker Compose 部署 Tailscale(零配置虚拟局域网工具)

🚀 使用 Docker Compose 部署 Tailscale

Tailscale 是一款基于 WireGuard 协议的虚拟组网工具,它通过简单的配置就能将不同网络的设备安全连接,形成一个加密的私有网络。特别适合远程访问家庭或办公室设备,实现安全的内网穿透。

📝 项目简介

Tailscale 构建了一个加密的点对点网络,让您能够像在同一个局域网内一样访问分布在各处的设备。它基于 WireGuard 协议,提供了更高的安全性和更简单的配置方式。

核心特点:

  • 零配置安全连接:基于 WireGuard 协议,数据传输全程加密
  • 无需公网 IP:即使在防火墙或 NAT 后也能轻松建立连接
  • 跨平台支持:支持 Linux、Windows、macOS、iOS、Android 等多平台
  • 点对点直连:低延迟、高效率的直接连接
  • 简单易用:通过简单的认证密钥即可完成设备接入

🔧 部署前准备

系统环境要求

  • 操作系统:支持 Linux、Windows、macOS
  • Docker 引擎:版本 20.10+
  • Docker Compose:版本 2.0+
  • 硬件资源
  • 内存:至少 512MB
  • 存储空间:至少 1GB 可用空间

环境检查

  1. 检查 Docker 服务状态 bash systemctl status docker 确保 Docker 服务处于 active (running) 状态

  2. 检查 Docker 版本 bash docker --version

  3. 创建部署目录

   mkdir -p /home/compose/tailscale && cd /home/compose/tailscale

获取 Tailscale 认证密钥

  1. 注册 Tailscale 账号
  2. 访问 Tailscale 官网并使用 Google、Microsoft 或 GitHub 账号注册

  3. 生成认证密钥

  4. 登录 Tailscale 控制台,进入 Settings > Keys
  5. 点击 Generate auth key
  6. 勾选 Reusable(可重复使用)选项
  7. 复制生成的密钥备用

⚙️ 配置 Docker Compose

准备配置文件

创建 docker-compose.yml 文件:


services:
  tailscale:
    # Tailscale 官方最新镜像(自动更新核心功能)
    image: tailscale/tailscale:latest
    container_name: tailscale  # 容器名称,便于管理(如查看日志、重启)
    network_mode: "host"  # 关键!使用宿主机网络,确保虚拟网络通信正常(不可改为 bridge)  # 使用本地网络, 方便连接各子网的客户端
    privileged: true      # 开启特权模式(需修改网络配置、加载模块,不可关闭)
    environment:
      # 1. 认证密钥:替换为你从 Tailscale 控制台获取的密钥(示例密钥已失效!)
      TS_AUTHKEY: tskey-auth-k7dU3ngcWA21CNTRL-4sDQ8FAEdTGKTtyLNyrGUGZ6tBrKdXdBQ
      # 2. 额外参数:开启出口节点(其他节点可通过此节点访问公网)
      TS_EXTRA_ARGS: --advertise-exit-node  #出口节点
      #TS_EXTRA_ARGS: --netfilter-mode=off #--login-server=http://headscaleserver.com
      # 可选参数:关闭 netfilter 模式(网络冲突时启用,默认注释)
      #TS_EXTRA_ARGS: --netfilter-mode=on      
      # 3. 状态存储目录:容器内路径,与 volumes 挂载对应(不可修改)
      TS_STATE_DIR: /var/lib/tailscale # 存储 tailscale 状态的目录, 后面映射到宿主机, 确保在容器重新启动时配置保持不变
      # 4. 发布内网路由:让其他节点访问本地内网(示例:192.168.10.0/24,可修改为你的内网段)
      TS_ROUTES: 192.168.10.0/24
      # 5. 节点名称:自定义(如 centos7、home-server,便于控制台识别)
      TS_HOSTNAME: centos7              # 节点名字, 可自定义
    volumes:
      # 1. 状态持久化:本地目录 → 容器目录(存储认证、路由配置,核心挂载!)
      - /home/compose/tailscale:/var/lib/tailscale # 映射 tailscale 状态目录到我们创建的tailscale/state内
      # 2. 挂载 tun 设备(WireGuard 通信必需,不可删除)
      - /dev/net/tun:/dev/net/tun
      # 3. 时区同步:确保容器日志时间与本地一致(只读挂载)
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    cap_add:
      # 赋予容器网络管理权限(IP 转发、路由配置,不可删除)
      - net_admin
      # 赋予容器加载系统模块权限(如 tun 模块,不可删除)
      - sys_module
    restart: unless-stopped  # 容器退出后自动重启(保障虚拟网络稳定)

#被控设备的端口映射      Tailscale
#文档介绍主要用到了443、41641、3478,其中41641端口有助于进行直接连通,且通信双方只要有一方开启了41641端口即可。

关键配置说明

  1. 网络模式network_mode: "host" 使用宿主机网络,简化网络配置

  2. 特权模式privileged: true 允许容器访问网络设备

  3. 认证密钥TS_AUTHKEY 使用之前生成的认证密钥进行自动登录

  4. 数据持久化

  5. /home/compose/tailscale:/var/lib/tailscale 确保配置持久化,避免重启后丢失
  6. /dev/net/tun:/dev/net/tun 挂载 TUN 设备,支持网络隧道

  7. 路由通告TS_ROUTES: 192.168.10.0/24 通告本地子网路由

  8. 能力配置net_adminsys_module 权限用于网络管理

🚀 启动与验证

启动服务

docker compose up -d

验证服务状态

  1. 检查容器运行状态 bash docker ps 应该看到 tailscale 容器处于 Up 状态

  2. 查看服务日志 bash docker compose logs -f

  3. 验证 Tailscale 连接 bash docker exec tailscale tailscale status

  4. 检查控制台

  5. 登录 Tailscale 管理控制台
  6. 确认新设备出现在设备列表中

(3)验证核心功能(出口节点 + 路由发布)

功能 1:出口节点可用性
  1. 在 Tailscale 控制台,点击你的节点 →「Edit route settings」;
  2. 勾选「Use as exit node」(启用出口节点),保存设置;
  3. 在另一台已加入同一 Tailscale 网络的设备(如本地电脑),打开 Tailscale 客户端 → 选择「Exit node」为你的节点;
  4. 访问 https://ifconfig.me,若显示的公网 IP 与你的服务器 IP 一致,说明出口节点生效。
功能 2:路由发布可用性

1.确保你的服务器内网有设备(如 192.168.10.10,与 TS_ROUTES 网段一致); 2.在另一台 Tailscale 节点(如本地电脑),执行 ping 命令:

    ping 192.168.10.10

3.若能 ping 通,说明路由发布成功,其他节点可访问你的内网设备。


🔌 基础配置与使用

管理控制台配置

  1. 启用子网路由
  2. 在 Tailscale 管理控制台中找到您的设备
  3. 点击 Edit route settings
  4. 勾选您设置的局域网网段(如 192.168.10.0/24
  5. 点击保存

  6. 禁用密钥过期(可选)

  7. 在设备设置中关闭密钥自动过期策略,避免频繁更新

客户端连接

  1. 安装客户端
  2. 访问 Tailscale 下载页面下载对应平台客户端

  3. 登录连接

  4. 启动客户端并使用相同 Tailscale 账号登录
  5. 点击 Connect 连接网络

  6. 访问设备

  7. 使用 Tailscale 分配的地址(如 100.x.x.x
  8. 或使用本地局域网地址(如 192.168.10.x

作为出口节点使用

当配置了 --advertise-exit-node 后,其他设备可以通过该节点路由所有流量:

# 在其他 Tailscale 设备上执行
tailscale up --exit-node=your-hostname

🔌 基础配置与使用2

1. 进入容器执行 Tailscale 命令(进阶操作)

通过容器命令行可查看节点状态、修改配置,常用命令如下:

# 进入 Tailscale 容器命令行
docker exec -it tailscale /bin/sh

# 1. 查看节点详细状态(IP、路由、连接的其他节点)
tailscale status

# 2. 临时关闭出口节点(重启容器后失效)
tailscale set --advertise-exit-node=false

# 3. 新增路由(临时,重启容器后失效,永久需修改 TS_ROUTES)
tailscale set --advertise-routes=192.168.20.0/24

# 4. 查看 Tailscale IP(虚拟网络内的 IP,如 100.xxx.xxx.xxx)
tailscale ip -4

# 退出容器命令行
exit

2. 修改核心配置(永久生效)

若需调整出口节点、路由等配置,需修改 docker-compose.yml 并重启容器:

# 1. 编辑配置文件(修改 TS_EXTRA_ARGS、TS_ROUTES 等)
nano /home/compose/tailscale/docker-compose.yml

# 2. 重启容器生效
docker compose restart

3. 移除节点(如需更换服务器)

1.在 Tailscale 控制台,找到你的节点 → 点击「...」→「Delete」; 2.删除本地状态目录(避免残留配置):

    sudo rm -rf /home/compose/tailscale/*

3.重新部署时需生成新的 TS_AUTHKEY


🛠️ 维护与管理

日常维护操作

1.服务启停

   # 停止服务
   docker compose down

   # 启动服务
   docker compose up -d

2.数据备份

   # 备份 Tailscale 状态数据
   tar -czf tailscale-backup-$(date +%Y%m%d).tar.gz /home/compose/tailscale

3.服务更新

   # 拉取最新镜像并重启
   docker compose pull
   docker compose down
   docker compose up -d

监控与日志

1.查看实时日志

   docker compose logs -f

2.监控节点状态

   docker exec tailscale tailscale status
   docker exec tailscale tailscale ping [目标地址]

🐛 常见问题排查

1. 容器启动失败

问题现象docker ps 显示容器状态不是 Up

解决方案: - 检查日志:docker compose logs - 验证认证密钥格式是否正确 - 检查 /dev/net/tun 设备是否存在

2. 无法连接到 Tailscale 网络

问题现象:设备未出现在 Tailscale 控制台

解决方案: - 检查 TS_AUTHKEY 是否有效且未过期 - 验证网络连接,确保能访问 Tailscale 服务器 - 查看详细日志:docker exec tailscale tailscale status --verbose

3. 子网路由不生效

问题现象:其他设备无法通过 Tailscale 访问子网

解决方案: - 在 Tailscale 控制台中确认已启用子网路由 - 检查 TS_ROUTES 配置的网段是否正确 - 验证本地防火墙设置,确保不阻塞流量

4. 配置丢失问题

问题现象:容器重启后配置丢失

解决方案: - 确保数据卷正确挂载:/home/compose/tailscale:/var/lib/tailscale - 检查目录权限,确保容器有写入权限

5. 性能问题

问题现象:连接速度慢或延迟高

解决方案: - 考虑禁用 --advertise-exit-node 如果不是必需 - 检查网络带宽和服务器负载 - 使用 tailscale ping 测试到其他节点的延迟

通过本教程,您应该已经成功部署并配置了 Tailscale 服务。Tailscale 的简洁设计和强大功能让它成为内网穿透和虚拟组网的理想选择。如果在使用过程中遇到其他问题,可以参考 Tailscale 官方文档或社区支持资源。


🐛 常见问题排查2

1. 容器启动成功但节点未在线(控制台显示 Offline)

  • 原因 1TS_AUTHKEY 错误或过期。解决:重新从 Tailscale 控制台生成密钥,修改 docker-compose.yml 中的 TS_AUTHKEY,重启容器。

  • 原因 2:服务器无法访问 Tailscale 控制服务器(网络限制)。解决:确保服务器能访问 https://login.tailscale.com(可通过 curl https://login.tailscale.com 测试),若无法访问,需检查防火墙或代理设置。

2. 出口节点启用后,其他节点无法访问公网

  • 原因 1:宿主机未开启 IP 转发。解决:重新执行 “部署前准备” 中的 IP 转发配置命令,确保 net.ipv4.ip_forward=1

  • 原因 2:netfilter 模式冲突(如服务器有防火墙规则)。解决:修改 TS_EXTRA_ARGS 为 --netfilter-mode=off,重启容器:

    environment:
      - TS_EXTRA_ARGS: --advertise-exit-node --netfilter-mode=off

3. 其他节点无法访问发布的内网路由(如 192.168.10.0/24)

  • 原因 1TS_ROUTES 配置的网段与宿主机内网不一致。解决:确认宿主机内网网段(如通过 ip addr 查看,通常为 192.168.1.0/24),修改 TS_ROUTES 为正确网段,重启容器。

  • 原因 2:Tailscale 控制台未启用路由。解决:在控制台点击节点 →「Edit route settings」,勾选 TS_ROUTES 对应的网段(如 192.168.10.0/24),保存设置。

4. 容器启动提示 “permission denied on /dev/net/tun”

  • 原因tun 设备权限不足或未加载。

    解决: 1. 加载 tun 模块:sudo modprobe tun; 2. 赋予 tun 设备权限:sudo chmod 666 /dev/net/tun; 3. 重启容器:docker compose restart

通过以上步骤,新手可快速搭建 Tailscale 虚拟网络,实现跨设备安全通信、出口节点共享、内网服务访问等功能。Tailscale 配置简单且兼容性强,如需探索高级功能(如访问控制列表、自定义 DNS),可参考 Tailscale 官方文档