广告位 · 页头(后台-模块管理-新建模块后替换此区域)

Ubuntu如何用Tailscale快速组建Mesh VPN?

在Ubuntu上部署Tailscale,本质是给每台机器添加一个基于WireGuard的虚拟网络接口,并通过Tailscale协调服务器自动交换公钥、分配地址和打通NAT。Ubuntu主流版本通常已内置WireGuard模块,因此安装客户端后即可快速组网。本文围绕安装、认证、验证、安全配置四个维度展开。

Ubuntu如何用Tailscale快速组建Mesh VPN?

安装准备与客户端部署

Tailscale在Ubuntu上依赖systemd和内核WireGuard支持。Ubuntu较新的桌面版与服务器版通常已内置相关模块,可通过 uname -r 查看内核版本,以及 modprobe wireguard 确认模块可加载。若模块加载无报错,即可继续安装客户端。Tailscale官方提供两种安装途径:一键脚本安装和APT软件源安装。一键脚本适合快速验证,APT源更适合需要持续升级的生产环境。

一键脚本安装最简单,执行以下命令会添加Tailscale官方源、安装tailscale包并启动tailscaled后台进程。脚本内部已处理不同Ubuntu版本的源配置。安装完成后使用 systemctl enable --now tailscaled 确保服务开机自启。

curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled

如果希望走APT仓库手动管理,可以先导入Tailscale的GPG签名密钥并添加源。下面示例以Ubuntu的jammy版本为例,其他代号替换为对应值。执行 sudo apt update 后安装tailscale。如果命令输出中看到tailscale服务状态为 active (running),说明客户端已就绪。APT方式的好处是后续可以用 sudo apt upgrade 随系统一起升级,不需要重复执行安装脚本。

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/ubuntu jammy main' | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt update
sudo apt install tailscale
sudo systemctl enable --now tailscaled

登录认证与Mesh组网

安装完成后,客户端需要通过账号授权才能加入同一个tailnet。执行 sudo tailscale up,终端会打印一个形如 https://login.tailscale.com/... 的认证链接。在浏览器打开并登录Google、GitHub或微软账号后,确认授权即可。授权成功后,本机接口 tailscale0 会获得一个100.x.x.x的地址,该地址在tailnet内唯一且不依赖公网IP。

在第二台Ubuntu机器上重复安装和登录步骤,并确保使用同一个Tailscale账号。两台节点上线后,Tailscale协调服务器会把各自的WireGuard公钥、内网地址和NAT信息同步,节点之间会优先进行P2P打洞。一旦打洞成功,后续流量不再经过中继服务器,延迟与带宽取决于两端的物理链路。如果P2P无法建立,流量会自动回退到DERP中继,保证通信不中断。这正是Mesh VPN与中心化VPN的关键差异:数据面去中心化,控制面才依赖协调服务。

登录后可通过 tailscale status 查看所有已加入节点及其连接状态,输出中的 direct 表示点对点直连,relay 表示正在通过中继转发。也可以运行 tailscale ip -4 查看本机分配到的100.x地址。若后续要退出当前账号或重新登录,可执行 sudo tailscale logout。

验证连通性与高级路由

组网后先用 tailscale ping 对端主机名或100.x地址 做专用连通性测试。该命令与普通ping不同,它会显示连接路径是direct还是relay,并给出延迟数据。如果主机名能正确解析,说明Tailscale的MagicDNS已生效;如果只通IP不通主机名,则需要检查管理控制台中的MagicDNS开关。

tailscale status
tailscale ping 100.64.0.2
ping -c 4 100.64.0.2

普通ping测试时,Ubuntu会通过tailscale0接口发送ICMP包,不需要额外配置防火墙放行公网端口。上述地址100.64.0.2是示例,实际以tailscale status输出为准。

如果希望让某个Ubuntu节点作为网关,访问它所在局域网的其他设备,可以使用子网路由功能。执行 sudo tailscale up --advertise-routes=192.168.1.0/24 后,在管理控制台批准该路由。其他节点访问192.168.1.0/24网段时,会自动把流量送给该节点转发。这种用法适合旧设备无法安装Tailscale、但需要被远程访问的场景。

如果节点本身还有公网入口,想让Tailscale流量优先走公网而非DERP,可以保持默认配置即可自动打洞;对于NAT类型较严格的网络,可在管理控制台打开NAT遍历选项,或调整客户端端口。通常大部分家庭宽带和云服务器都能在几秒内完成直连,不需要手动指定端口。

安全加固与故障排查

Tailscale默认允许同一账号下的所有节点互通,如果节点数量较多,建议在管理控制台的Access Controls中编辑ACL策略,用JSON描述允许的源、目的和端口。例如只允许办公室网段访问数据库节点的22端口,可以显著降低横向移动风险。还可以为敏感节点启用Key expiry,强制定期重新认证,或设置Device approval,新设备必须管理员批准才能加入。

当出现 tailscale status 显示离线、或 tailscale ping 一直走relay时,先检查 tailscaled 服务是否正常,可执行 systemctl status tailscaled。日志可通过 journalctl -u tailscaled -f 跟踪。常见原因包括系统时间偏差过大导致TLS握手失败、防火墙拦截UDP 41641端口、或者云安全组未放行UDP。Tailscale会自动选择其他端口,但最直接的还是保持默认UDP 41641可用。

如果不再需要某台Ubuntu节点加入Mesh网络,可先执行 sudo tailscale logout 移除本机凭证,再执行 sudo apt remove tailscale 卸载软件包。删除前建议检查是否有其他节点通过该机器做子网路由,避免内网访问中断。完成后登录管理控制台,在Machines列表中删除该设备记录。

广告位 · 文章底部(后台-模块管理替换此区域)