【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上
本文详细介绍在Linux宿主机(含一键安装、启动认证及出口节点配置)与Docker非特权容器(通过用户态网络模式、创建TUN设备等实现)中部署Tailscale的方法,提及该工具基于WireGuard协议的优势及常用维护命令,同时提示容器部署的临时特性。
文章目录
🐧 Linux 与 Docker 环境下 Tailscale 异地组网全攻略:从宿主机到容器内的极致部署

在当今的云原生和远程办公时代,异地组网和内网穿透是开发者绕不开的话题。相比于传统的 OpenVPN 或 IPSec,Tailscale 基于先进的 WireGuard® 协议,以其“零配置”、“高安全性”和“打洞能力强”著称。
本文将详细介绍如何在 Linux 宿主机以及复杂的 Docker 容器环境中部署 Tailscale,特别是针对容器内无特权模式下的特殊启动方案。
🔗 官方资源
Windows、macOS 或 iOS 等其他平台的客户端下载页:https://tailscale.com/download
一、 为什么选择 Tailscale?
在开始部署之前,简单聊聊为什么它是目前的首选方案:
- 基于 WireGuard:轻量级、低延迟,内核态执行,性能极佳。
- NAT 穿透(P2P):Tailscale 的 DERP 中继服务器能帮助处于不同复杂网络环境下的设备建立直连。
- ACL 访问控制:企业级的访问控制策略。
- MagicDNS:直接通过机器名访问,无需记 IP。
二、 场景一:Linux 宿主机直接部署
这是最常见的场景,适用于云服务器、NAS 或个人 Linux 电脑。
1. 一键安装
Tailscale 官方提供了一个非常方便的安装脚本,会自动检测发行版(Ubuntu/CentOS/Debian 等)并安装:
curl -fsSL https://tailscale.com/install.sh | sh
2. 启动与认证
安装完成后,启动服务并获取登录链接:
sudo tailscale up
复制终端输出的链接,在浏览器中打开并使用账号登录即可。
3. 进阶参数(可选)
如果你希望将这台 Linux 作为出口节点(Exit Node),即让其他设备通过这台机器上网,可以使用以下命令启动:
sudo tailscale up --advertise-exit-node
注:启动后需在 Tailscale 管理后台的 Machines 列表中开启该路由。
三、 场景二:Docker 容器内由零构建(进阶技巧)
在某些受限环境中(例如:你只有一个正在运行的容器的 Shell 权限,无法修改 docker run 参数,或者不想挂载宿主机的 /var/run/tailscale/),我们需要在容器内部手动构建 Tailscale 环境。
由于容器通常默认没有 /dev/net/tun 设备,且没有特权(Privileged),直接安装通常会报错。我们需要使用 Userspace Networking(用户态网络) 模式来绕过内核限制。
📋 准备工作
请直接进入容器的 bash 终端。
🚀 步骤详解
Docker 内额外安装 Tailscale 需要进行一个比较复杂的设备节点配置。为了方便操作,我将步骤整理为两个阶段。
第一阶段:环境构建与后台启动
直接复制粘贴如下指令块:
# 1. 安装 Tailscale 二进制文件
curl -fsSL https://tailscale.com/install.sh | sh
# 2. 创建必要的目录(容器内可能缺失)
mkdir -p /dev/net
# 3. 创建 TUN 设备节点
# c 代表字符设备,10 和 200 是主次设备号
if [ ! -c /dev/net/tun ]; then
mknod /dev/net/tun c 10 200
fi
# 4. 设置设备权限,确保当前用户可读写
chmod 600 /dev/net/tun
# 5. 清理可能存在的旧进程(防止重复启动)
pkill -f tailscaled 2>/dev/null || true
# 6. 等待清理完成
sleep 2
# 7. 启动 Tailscale 守护进程
# 关键参数:--tun=userspace-networking
# 作用:启用用户态网络模式,绕过对内核 TUN 模块的强依赖,适合非特权容器
tailscaled --tun=userspace-networking --socket=/tmp/tailscale.sock --state=/tmp/tailscale.state 2>&1 &
# 8. 等待服务启动
sleep 5
# 9. 检查服务是否运行
if ps aux | grep '[t]ailscaled' > /dev/null; then
echo "✅ Tailscaled 服务启动成功"
else
echo "❌ Tailscaled 启动失败,请检查日志"
fi
# 10. 获取认证 URL(复制输出的链接到浏览器中打开)
tailscale --socket=/tmp/tailscale.sock up
🔐 认证步骤(需要在浏览器中操作)
用户操作指南:
- 复制第 10 步输出的 URL(格式通常为:
https://login.tailscale.com/a/xxxxxxxxxx)。 - 在浏览器中打开该 URL。
- 使用你的 Tailscale 账户登录。
- 点击 Connect 授权设备加入网络。
第二阶段:验证与收尾
认证成功后,回到终端继续执行以下命令来确认状态并安全退出:
# 11. 等待认证状态同步
sleep 5
# 12. 验证连接状态
tailscale --socket=/tmp/tailscale.sock status
# 13. 查看分配的 Tailscale IP
TS_IP=$(tailscale --socket=/tmp/tailscale.sock ip)
echo "本机 Tailscale IP: $TS_IP"
# 14. 将进程脱离终端控制以便安全退出 Shell
# 这样当你关闭 docker exec 的终端时,VPN 服务不会中断
TAILSCALE_PID=$(ps aux | grep '[t]ailscaled' | awk '{print $2}')
disown $TAILSCALE_PID 2>/dev/null || true
# 15. 最终连通性测试
tailscale --socket=/tmp/tailscale.sock ip -4
echo "✅ Tailscale 配置完成!可以安全退出终端。"
⚠️ 注意事项
- 持久化问题:这种方式在容器内是临时的。如果容器重启(Restart),上述步骤需要重新执行。如果需要长期运行,建议将上述脚本写入
Dockerfile的ENTRYPOINT或使用 Supervisor 管理。 - Socket 指定:注意所有命令都带了
--socket=/tmp/tailscale.sock,这是因为我们将 socket 文件放在了/tmp目录下,而非默认系统目录,防止权限问题。
四、 常用维护命令速查
配置完成后,以下命令对排错非常有帮助:
- 查看其他节点状态:
tailscale status - 检查网络连通性:
tailscale ping <目标机器名或IP> - 在不同设备间传文件(Taildrop):
tailscale file cp <文件名> <目标机器名>:
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/157212469。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
更多推荐


所有评论(0)