它解决什么问题
典型的场景:你有几台云上的 VPS、家里的 NAS 和一块树莓派,想让它们互相访问——比如从 VPS 直接 SSH 到家里的机器。Tailscale 的做法是:每台机器装一个客户端,登录同一账号,加入同一个网络(官方称为 tailnet),每台机器获得一个 Tailscale 的 IPv4/IPv6 地址。之后机器之间可以互相访问,不需要为此在公网开放端口。
两点要说明:能否访问到某台机器上的具体服务,仍取决于管理控制台里的访问策略、机器本身的防火墙,以及服务是否在监听;本篇只讲 Linux 客户端的安装与常用配置。
安装
官方一键脚本适用于 Ubuntu/Debian 系、RHEL/CentOS/Fedora 系、Raspberry Pi OS、Amazon Linux、openSUSE/SLE、Oracle Linux 等:
curl -fsSL https://tailscale.com/install.sh | sh
不想用 curl | sh,可按 pkgs.tailscale.com/stable 页面手动配置仓库。以 Ubuntu 26.04(Resolute)为例,以下命令都需要 sudo:
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/resolute.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/resolute.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update && sudo apt-get install tailscale
Debian 13(trixie)做法相同,把 URL 里的 ubuntu/resolute 换成 debian/trixie。Fedora 用 dnf:
sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/fedora/tailscale.repo
sudo dnf install tailscale
sudo systemctl enable --now tailscaled
一个细节:官方 stable 页面的 Ubuntu 与 Debian 小节没有写 systemctl enable --now tailscaled,只有 Fedora 小节明确要求。其它发行版安装后服务是否已启用,以这条命令的输出为准:
systemctl status tailscaled
未运行就手动启用:
sudo systemctl enable --now tailscaled
Arch Linux 和 NixOS 在官方文档里有各自的指南;其它未列出的发行版可用静态二进制,见 stable 页面。
登录与确认
sudo tailscale up
命令输出会给出一个认证网址,在浏览器完成认证;没有浏览器的服务器,把网址复制到本地机器的浏览器打开。完成后到管理控制台的 Machines 页面确认设备出现。本地确认状态用:
tailscale ip
tailscale status
分别显示本机 Tailscale 的 IPv4/IPv6 地址和连接状态。设备密钥过期后强制重新认证:
sudo tailscale up --force-reauth
无人值守机器:认证密钥
云服务器、树莓派这类没有浏览器、也不想人工介入登录的机器,用认证密钥注册:
sudo tailscale up --auth-key=tskey-abcdef1432341818
密钥区分大小写。把真实密钥写在命令行里,它可能留在 shell 历史、脚本或终端记录中,不要写进可共享的脚本或笔记。用密钥登录的设备以生成密钥的用户身份认证;密钥带标签时,设备获得标签的身份。
密钥类型:一次性(用一次后自动吊销)、可重复使用、临时(设备离线后自动移除)、预批准、带标签,以及用于启用 Tailnet Lock 网络的预签名密钥(需要 tailscale lock sign)。有效期可选 1 到 90 天,不指定时为 90 天。
两层有效期要分清:已过期的密钥不能再登录新设备;已被它授权的设备在各自节点密钥过期前保持授权,节点密钥默认 180 天。带标签的设备默认关闭密钥过期。
安全取舍:可重复使用的密钥一旦被盗,任何拿到它的人都能把设备注册进你的网络,应放进专门的密钥保管库。吊销密钥不会让已经用过它的节点失效,要清理必须到 Machines 页面逐个删除。生成与吊销权限仅限 Owner、Admin、IT admin、Network admin,且只能吊销自己的密钥。
Tailscale SSH
在需要被连接的服务器上执行(需要 root):
sudo tailscale set --ssh
需要 Tailscale v1.24 或更高,每台主机只需一次,会生成 SSH 主机密钥对。两个警告:执行后,到该主机 Tailscale IP 的现有 SSH 连接会卡住;如果你正通过这样的会话管理这台机器,先改用云厂商控制台或其它管理通道登录,再执行启用命令。
它用 Tailscale 身份做认证,不需要在客户端生成密钥再把公钥放到服务器;只拦截经过 tailnet 到达 22 端口的流量,/etc/ssh/sshd_config 与 ~/.ssh/authorized_keys 不被改动,不经 Tailscale 的普通 SSH 连接照常可用。代价是:客户端机器上的任何系统用户都能通过 Tailscale 发起连接,本地不需要密钥对,访问控制完全由服务端策略决定。
访问需要两条规则:一条允许来源访问目标 22 端口的网络规则,以及一条 ssh 规则。官方示例:
{
"action": "accept",
"dst": ["autogroup:self"],
"src": ["autogroup:member"],
"users": ["autogroup:nonroot"]
}
这条规则允许成员以非 root 用户 SSH 到自己的设备。细节:只能用主机上已存在的账号,Tailscale 不会创建账号;只支持 22 端口且不可更改;src 和 dst 不允许单独写 *;check 规则先于 accept 规则评估;未修改的默认策略允许用户以 check 模式 SSH 到自己的设备。
如果把 dst 从 autogroup:self 放宽(例如改成某个标签),要重新考虑 users 里的 autogroup:nonroot——保持原样的话,src 允许的所有人都能以目标机上任何非 root 用户登录。这是启用 Tailscale SSH 时最需要想清楚的一处。
check 模式要求连接前重新认证(可能触发 MFA),checkPeriod 默认 12 小时,可设 1 分钟到 168 小时,或 "always"。它只对 Tailscale SSH 生效,不能用于来源是带标签设备的规则。设为 "always" 会打断 Ansible 这类快速开大量连接的自动化工具。
限制:服务端只支持 Linux 和开源版 macOS tailscaled,不支持 Synology、QNAP;重启 tailscaled(例如升级时)会结束正在进行的会话;策略变更几秒内生效并结束该用户已有会话,其它访问方式(如 SSH 密钥)要另外移除。官方认为它不太适合多用户权限各异的机器、以及用 authorized_keys 限制远程命令的机器。需要轮换时:
sudo tailscale up --ssh --force-reauth
这会生成新的节点密钥和 SSH 主机密钥。
子网路由
子网路由让 tailnet 里的机器访问网段里没有装 Tailscale 的设备——比如只在网关(树莓派或 NAS)上装客户端,就能访问整个内网。四步。
第一步,开启 IP 转发(存在 /etc/sysctl.d 时):
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
没有 /etc/sysctl.d 时,把两行配置追加到 /etc/sysctl.conf 再执行 sudo sysctl -p。开启转发后,保持防火墙默认拒绝转发(ufw、firewalld 默认如此)。若 firewalld 在运行,可能因已知问题需要:
sudo firewall-cmd --permanent --add-masquerade
第二步,在充当子网路由器的机器上声明路由:
sudo tailscale set --advertise-routes=192.0.2.0/24,198.51.100.0/24
换成自己的网段,支持 IPv4 和 IPv6;默认路由 0.0.0.0/0 和 ::/0 属于出口节点的用途,不用子网路由声明。
第三步,到管理控制台 Machines 页面批准:找带 Subnets 标记的设备,在 Subnets 部分点 Edit,勾选并 Save(autoApprovers 已覆盖则可跳过)。路由批准与访问规则是分开的,策略也必须允许流量到这些子网,否则流量仍被拒绝。
第四步,Linux 客户端默认只发现 Tailscale 地址,每台要访问子网的 Linux 机器执行:
sudo tailscale set --accept-routes
其它平台自动接收新路由。
高可用的坑:多台冗余子网路由器声明同样的路由时,不要在它们上启用 --accept-routes,否则备用路由器可能从主路由器接收路由、把流量绕过去;大多数高可用场景只用 --advertise-routes。
排错与注意事项
- 连接不通,先在两端各跑
tailscale status,确认设备在线、地址正确。 - 设备掉出网络,考虑节点密钥是否过期(默认 180 天),用
sudo tailscale up --force-reauth重新认证。 - 子网路由不通,按顺序查:IP 转发是否生效(
sysctl net.ipv4.ip_forward)、控制台是否批准了路由、Linux 客户端是否执行过--accept-routes、策略是否允许到目标子网的流量。 - Tailscale SSH 连不上,检查两条规则是否都存在、目标账号是否真的存在于服务器上。
- 官方说明:关闭日志(设置
TS_NO_LOGS_NO_SUPPORT=true或使用--no-logs-no-support)可能导致无法获得技术支持。除此之外官方文档未给出更多细节。
以上命令与配置均来自 tailscale.com/kb 官方文档与 pkgs.tailscale.com/stable 安装页面,参考的 kb/1031 页面标注验证日期为 2026 年 1 月 5 日;如果你的安装输出或控制台界面与本文不一致,以官方文档当前版本为准。




