跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

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)
作者

老丹

关注我
其他文章
上一个

vsftpd.conf 完整配置项清单

下一个

Linux 网络管理之争:systemd-networkd vs NetworkManager

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • Ubuntu 防火墙迁移指南:从 UFW 到 firewalld 的完整实践 2026年9月12日
  • Nano 编辑器完全操作指南:从入门到熟练 2026年9月12日
  • SSCG:让自签名证书不再“危险”的生成工具 2026年9月12日
  • Ubuntu Samba 服务安装与配置完全指南 2026年9月12日
  • 从零开始:用 Docker 部署 Jellyfin 并启用英特尔核显硬件加速 2026年9月11日

文章分类

  • C/C++开发 (22)
  • Docker容器 (5)
  • Linux工具包 (17)
  • Linux服务配置 (50)
  • Linux系统 (16)
  • OpenWrt路由 (3)
  • Shell脚本 (3)
  • 代码管理 (1)
  • 安防技术 (4)
  • 数据安全 (36)
  • 未分类 (1)
  • 网络协议 (25)
  • 计算机理论 (23)
  • 音视频技术 (5)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号