🚀 使用 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 可用空间
环境检查
-
检查 Docker 服务状态
bash systemctl status docker确保 Docker 服务处于active (running)状态 -
检查 Docker 版本
bash docker --version -
创建部署目录
mkdir -p /home/compose/tailscale && cd /home/compose/tailscale
获取 Tailscale 认证密钥
- 注册 Tailscale 账号
-
访问 Tailscale 官网并使用 Google、Microsoft 或 GitHub 账号注册
-
生成认证密钥
- 登录 Tailscale 控制台,进入 Settings > Keys
- 点击 Generate auth key
- 勾选 Reusable(可重复使用)选项
- 复制生成的密钥备用
⚙️ 配置 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端口即可。
关键配置说明
-
网络模式:
network_mode: "host"使用宿主机网络,简化网络配置 -
特权模式:
privileged: true允许容器访问网络设备 -
认证密钥:
TS_AUTHKEY使用之前生成的认证密钥进行自动登录 -
数据持久化:
/home/compose/tailscale:/var/lib/tailscale确保配置持久化,避免重启后丢失-
/dev/net/tun:/dev/net/tun挂载 TUN 设备,支持网络隧道 -
路由通告:
TS_ROUTES: 192.168.10.0/24通告本地子网路由 -
能力配置:
net_admin和sys_module权限用于网络管理
🚀 启动与验证
启动服务
docker compose up -d
验证服务状态
-
检查容器运行状态
bash docker ps应该看到 tailscale 容器处于Up状态 -
查看服务日志
bash docker compose logs -f -
验证 Tailscale 连接
bash docker exec tailscale tailscale status -
检查控制台
- 登录 Tailscale 管理控制台
- 确认新设备出现在设备列表中
(3)验证核心功能(出口节点 + 路由发布)
功能 1:出口节点可用性
- 在 Tailscale 控制台,点击你的节点 →「Edit route settings」;
- 勾选「Use as exit node」(启用出口节点),保存设置;
- 在另一台已加入同一 Tailscale 网络的设备(如本地电脑),打开 Tailscale 客户端 → 选择「Exit node」为你的节点;
- 访问
https://ifconfig.me,若显示的公网 IP 与你的服务器 IP 一致,说明出口节点生效。
功能 2:路由发布可用性
1.确保你的服务器内网有设备(如 192.168.10.10,与 TS_ROUTES 网段一致);
2.在另一台 Tailscale 节点(如本地电脑),执行 ping 命令:
ping 192.168.10.10
3.若能 ping 通,说明路由发布成功,其他节点可访问你的内网设备。
🔌 基础配置与使用
管理控制台配置
- 启用子网路由
- 在 Tailscale 管理控制台中找到您的设备
- 点击 Edit route settings
- 勾选您设置的局域网网段(如
192.168.10.0/24) -
点击保存
-
禁用密钥过期(可选)
- 在设备设置中关闭密钥自动过期策略,避免频繁更新
客户端连接
- 安装客户端
-
访问 Tailscale 下载页面下载对应平台客户端
-
登录连接
- 启动客户端并使用相同 Tailscale 账号登录
-
点击 Connect 连接网络
-
访问设备
- 使用 Tailscale 分配的地址(如
100.x.x.x) - 或使用本地局域网地址(如
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)
-
原因 1:
TS_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)
-
原因 1:
TS_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 官方文档。