Tailscale 客户端完全操作手册:从安装到连接自建 Headscale 的日常命令大全
这是一份从零开始的 Tailscale 客户端操作指南。我们将安装、连接自建 Headscale、日常管理和高级功能全部整合在一起,你可以把它当作一份随时翻阅的参考手册。
第一部分:客户端安装
无论你用的是哪类设备,安装步骤都很直接。
Linux(Ubuntu / Debian / CentOS / Fedora 等)
官方一键安装脚本,自动处理软件源和依赖:
curl -fsSL https://tailscale.com/install.sh | sh
安装完成后,客户端已就绪,但尚未连接任何网络。此时 tailscaled 服务可能已经启动,但不会主动联网,需要你手动发起连接。
Windows
方法一(手动):从官网下载 .msi 安装包,双击按提示安装即可。
方法二(静默安装,适合脚本/批量场景):
msiexec /i tailscale-setup-1.74.0-amd64.msi TS_NOLAUNCH=yes TS_UNATTENDEDMODE=always
TS_NOLAUNCH=yes:安装后不弹出图形界面。TS_UNATTENDEDMODE=always:完全静默,不弹出任何对话框。
macOS
命令行版:
brew install tailscale
图形界面版:直接从 App Store 搜索 “Tailscale” 下载安装。图形版和命令行版的 tailscale 命令是共用的,都可以在终端执行。
Docker 容器内
如果你在容器里跑 Tailscale,需要先进入容器再执行后续命令:
docker exec -it <容器名或ID> bash
后续所有 tailscale 命令都在容器内部执行。
第二部分:连接自建 Headscale——核心操作
预备工作:获取预认证密钥
在客户端连接之前,你需要从 Headscale 管理员那里获取一个预认证密钥(Pre-auth Key)。这个密钥通常由服务端生成,格式类似:
tskey-auth-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
客户端不需要关心这个密钥是怎么生成的,你只需要拿到它,然后在连接命令中带上即可。
⚠️ 注意:如果管理员给的是交互式注册方式(没有提供预认证密钥),则客户端执行
tailscale up后会输出一个机器密钥,你需要把那个密钥提供给管理员,由他在服务端执行批准命令。但这种方式需要来回沟通,推荐直接使用预认证密钥,一条命令全自动完成。
基本连接命令
拿到预认证密钥后,在客户端执行以下命令,将设备加入自建的 Headscale 网络:
sudo tailscale up \
--login-server=https://你的headscale地址:端口 \
--authkey=tskey-auth-xxxxxxxxxxxxxxxx
各参数详解:
| 参数 | 必填? | 说明 |
|---|---|---|
--login-server | ✅ 必填 | 指定 Headscale 服务器的完整 URL。如果使用 HTTP(非加密),则写 http://;如果使用 HTTPS,则写 https://。端口号通常为 8080(默认)或自定义端口 |
--authkey | ✅ 必填 | 从管理员处获取的预认证密钥,以 tskey-auth- 开头 |
执行后可能的结果:
- ✅ 成功:终端输出
Success.,设备已自动加入网络,无需任何额外操作。 - ❌ 失败:会显示具体错误信息,常见原因包括:地址不可达、密钥已过期、密钥已被使用(且不可复用)、服务器时间与客户端时间偏差过大。
带上常用功能参数一起连接
在实际使用中,通常不会只带最基本的两个参数,而是根据需求一并启用各种功能。以下参数都可以加在 tailscale up 命令中,一次性完成配置。
| 参数 | 作用 | 示例 |
|---|---|---|
--accept-routes=true | 接受其他设备宣告的子网路由 | 如果你要访问其他设备背后的局域网,必须开启 |
--accept-dns=false | 不接管系统的 DNS 设置 | 自建环境如果不配置 MagicDNS,建议关闭,避免 DNS 冲突 |
--advertise-routes=网段 | 将本机所在局域网通告给其他设备 | --advertise-routes=192.168.1.0/24 |
--ssh | 启用 Tailscale SSH,接管 SSH 认证 | 无需手动管理 authorized_keys |
--shields-up | 阻止其他设备的主动入站连接 | 适合个人设备只对外发起连接 |
--advertise-exit-node | 将本机作为出口节点 | 让其他设备通过本机上网 |
一个典型的生产环境连接命令
假设你有一台 Linux 服务器,需要:
- 连接自建 Headscale(地址
https://headscale.example.com:8080) - 使用预认证密钥
tskey-auth-abc123 - 接受其他设备宣告的路由
- 不接管 DNS
- 将本机所在的
10.0.0.0/24网段通告给网络 - 启用 Tailscale SSH
完整命令如下:
sudo tailscale up \
--login-server=https://headscale.example.com:8080 \
--authkey=tskey-auth-abc123 \
--accept-routes=true \
--accept-dns=false \
--advertise-routes=10.0.0.0/24 \
--ssh
如果需要同时通告多个网段,用逗号分隔:
--advertise-routes=192.168.1.0/24,10.0.0.0/24
设置开机自启动
连接成功后,确保设备重启后能自动恢复连接。
Linux(systemd):
sudo systemctl enable --now tailscaled # 启用并立即启动服务
sudo systemctl status tailscaled # 检查服务状态
Windows:Tailscale 安装后默认已作为 Windows 服务安装,启动类型默认为”自动”。验证服务状态:
sc query tailscale
看到 STATE : 4 RUNNING 表示服务正在运行。如果服务未启动,手动启动:
net start tailscale
macOS(命令行版):
sudo tailscaled install-system-daemon # 安装为系统守护进程,自动开机启动
第三部分:日常命令大全
一、查看网络状态
tailscale ip # 查看本机的虚拟 IP(默认显示 IPv4)
tailscale ip -4 # 只显示 IPv4 地址
tailscale ip -6 # 只显示 IPv6 地址
tailscale status # 查看整个网络中所有设备的状态
tailscale status 的输出非常有信息量:
100.64.0.1 server-01 alice@ linux active; direct 192.168.1.100:41641 tx 1024 rx 512
100.64.0.2 laptop bob@ macOS idle; tx 0 rx 0
100.64.0.3 phone alice@ iOS -
每一列的含义:
- 第1列:设备的虚拟 IP,可以直接用来连接
- 第2列:设备名称(如果启用了 MagicDNS,也可以用这个名字连接)
- 第3列:设备所有者的邮箱
- 第4列:操作系统类型
- 第5列:连接状态,其中
active表示正在收发流量,idle表示空闲但在线,-表示从未通信过
进阶用法:tailscale status --json 可以输出机器可读的 JSON 格式,适合写脚本自动化处理。
查看 DNS 配置:
tailscale dns status # 查看本地 DNS 转发器和 MagicDNS 的配置状态
tailscale dns query example.tailnet.ts.net # 通过 Tailscale DNS 解析器查询域名
二、网络诊断与连通性测试
测试设备连通性(最常用的诊断命令):
tailscale ping <目标设备IP或主机名>
这个命令不仅能测试连通性,还会告诉你数据走的什么路径:
tailscale ping 100.64.0.1
输出示例:
pong from server-01 (100.64.0.1) via 192.168.1.100:41641 in 12ms→ 直连,延迟低pong from server-01 (100.64.0.1) via DERP(par) in 85ms→ 经过 DERP 中继,说明 NAT 穿透失败
如果希望强制客户端重新尝试打洞直到直连成功,可以加参数:
tailscale ping --until-direct=true 100.64.0.1
检查网络环境:
tailscale netcheck
这个命令会分析本机的网络条件,包括 NAT 类型、到各个 DERP 中继节点的延迟等。当你遇到连接慢或打洞失败的问题时,先用它定位根源。
输出示例:
NAT type: port-restricted cone— NAT 类型fra: 12ms, nyc: 45ms, tok: 180ms— 到各 DERP 节点的延迟
SSH 连通性测试:
tailscale nc <目标主机> 22 # 测试 SSH 端口是否可达
三、连接管理(up / down / logout)
tailscale up # 重新连接(如果之前已配置,会沿用之前的参数)
tailscale down # 断开连接,但保留配置,再次执行 `tailscale up` 可恢复
tailscale logout # 登出当前账号,吊销本机密钥,设备不再属于网络
多账号切换(fast user switching):
Tailscale 客户端支持在一台设备上同时登录多个账号并快速切换:
tailscale switch --list # 列出所有已登录的账号
tailscale switch alice@example.com # 切换到指定账号
tailscale switch work # 切换到昵称为 "work" 的账号
tailscale switch remove <id> # 移除某个账号的本地登录信息
四、高级功能配置
子网路由(Subnet Router)
让其他设备能通过本机访问你所在局域网的设备:
# 通告本机所在的一个或多个网段
sudo tailscale up --advertise-routes=192.168.1.0/24,10.0.0.0/24
Linux 上启用子网路由还需要开启 IP 转发:
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
接受其他设备通告的路由:
sudo tailscale up --accept-routes
⚠️ 注意:
--advertise-routes宣告后,还需要在 Headscale 管理后台批准才能生效。
出口节点(Exit Node)
让其他设备将所有上网流量路由到本机出去:
# 本机作为出口节点
sudo tailscale up --advertise-exit-node
# 使用其他设备作为出口节点
sudo tailscale up --exit-node=exit-server # 用主机名指定
sudo tailscale up --exit-node=100.64.0.1 # 用虚拟 IP 指定
# 使用出口节点时允许访问本地局域网(避免被完全隔离)
sudo tailscale up --exit-node=exit-server --exit-node-allow-lan-access
# 禁用出口节点
sudo tailscale up --exit-node=
查看可用的出口节点:
tailscale exit-node list
tailscale exit-node suggest # 自动推荐一个
Tailscale SSH
接管 SSH 认证,无需手动管理 authorized_keys:
# 启用 SSH 服务
sudo tailscale up --ssh
# 通过 Tailscale SSH 连接其他设备
tailscale ssh user@hostname
tailscale ssh user@100.64.0.1
# 带端口转发
tailscale ssh -L 8080:localhost:80 user@hostname
防火墙加固:shields up
阻止其他设备的主动入站连接,适合个人设备(只对外发起连接):
sudo tailscale up --shields-up
五、服务共享:Tailscale Serve 与 Funnel
Tailscale 客户端还内置了将本地服务共享给网络内(或公网)的功能。
Tailscale Serve(网络内共享)——把本地运行的服务分享给 Tailnet 内的其他设备:
tailscale serve 3000 # 将 localhost:3000 共享出去
tailscale serve --https=443 /app localhost:3000 # 指定路径
tailscale serve status # 查看当前 serve 状态
tailscale serve --https=443 off # 关闭某个 serve
Tailscale Funnel(公网公开)——将服务公开到互联网:
tailscale funnel 3000 # 公开 localhost:3000
tailscale funnel status # 查看状态
tailscale funnel --https=443 off # 关闭
六、Taildrive:文件共享
Taildrive 是 Tailscale 的文件共享功能,可以在网络内分享目录:
tailscale drive share photos /home/user/photos # 创建分享
tailscale drive list # 列出当前所有分享
tailscale drive rename photos myphotos # 重命名分享
tailscale drive unshare photos # 移除分享
七、其他实用命令
| 命令 | 作用 |
|---|---|
tailscale update | 更新客户端到最新版本 |
tailscale whois 100.64.0.1 | 查询该 IP 对应的设备身份 |
tailscale completion bash | 生成 Bash 命令补全脚本 |
tailscale completion zsh | 生成 Zsh 命令补全脚本 |
tailscale completion powershell | 生成 PowerShell 命令补全脚本 |
附录:常见问题排查
| 问题 | 排查步骤 |
|---|---|
| 设备注册失败 | 检查客户端能否访问 Headscale 的地址和端口;确认 Headscale 服务器和客户端的时间是否同步(密钥验证对时间敏感) |
| 预认证密钥提示无效 | 检查密钥是否已过期,或者是否已被使用且未设置 --reusable |
| 连接成功后无法直连,走中继(DERP) | 执行 tailscale netcheck 查看 NAT 类型;改善方法:开启路由器的 UPnP、设置 DMZ 主机,或为设备配置 IPv6 |
| 能 ping 通但丢包严重 | 执行 tailscale ping --until-direct=true 强制尝试直连;检查 MTU 配置(默认 1280) |