登录 Tailscale 后,托盘图标一直停在 Starting。
它像一位不断重复“马上开门”的前台,但门后其实没人能把保险柜打开。最开始我以为是网络、登录回调或者虚拟网卡出了问题,最后才发现:真正卡住的是 Tailscale 的本地状态文件,以及一把已经不被 TPM 承认的旧钥匙。
先看服务,不急着重装
先用 PowerShell 检查服务和进程:
Get-Service -Name Tailscale
Get-Process | Where-Object { $_.ProcessName -like '*tailscale*' }
当时服务状态是 Running,桌面前端也在运行。进程列表里还能看到两个 tailscaled.exe,乍看很像后台重复启动了。
进一步检查后确认,其中一个是 Windows 服务进程,另一个带有 /subproc 参数,是它正常拉起的子进程,并不是两个后台在抢方向盘。
再看网络配置,Tailscale 虚拟网卡已经存在。这说明安装和驱动至少不是完全失灵,问题更像是桌面前端与后台状态不同步。
普通终端只看见了“拒绝访问”
执行:
tailscale status
tailscale version
版本可以正常显示,但查询状态时提示无法访问本地 tailscaled。这是一个容易带偏方向的现象:普通权限终端可能没有权限访问后台服务使用的本地管道,它并不等于服务本身已经崩溃。
于是改用管理员 PowerShell 检查,并重启了一次服务:
Restart-Service -Name Tailscale
Start-Sleep -Seconds 3
tailscale status
这一次,后台终于不再只说“Starting”,而是把真正的问题交代了出来:
State store failed to initialize
failed to unseal state file
failed to unseal encryption key with TPM
TPM_RC_INTEGRITY: integrity check failed
unexpected state: NoState
原来是 TPM “不认旧钥匙”了
Tailscale 的设备状态保存在本地,某些版本会借助 TPM 封存加密密钥。如果升级 BIOS、更换主板或 TPM、迁移系统盘,或者虚拟机恢复过快照,TPM 的内部状态可能发生变化。
状态文件还在,钥匙看起来也还在,但 TPM 会冷着脸说:“这把钥匙不是我发的。”于是 Tailscale 无法解密原来的设备身份,后台进入 NoState,桌面前端只能一直卡在 Starting。
Windows:备份状态文件后重新登录
直接卸载重装未必有用,因为损坏的状态文件可能仍留在 ProgramData。相比整目录删除,更稳妥的办法是先把状态文件改名备份。
在管理员 PowerShell 中执行:
Stop-Process -Name 'tailscale-ipn' -Force -ErrorAction SilentlyContinue
Stop-Service -Name Tailscale -Force
Rename-Item `
-LiteralPath 'C:\ProgramData\Tailscale\server-state.conf' `
-NewName 'server-state.conf.tpm-broken.bak'
Start-Service -Name Tailscale
Start-Process 'C:\Program Files\Tailscale\tailscale-ipn.exe'
然后检查:
tailscale status
如果输出变成:
Logged out.
说明后台已经从“打不开旧保险柜”恢复成了一个干净、可初始化的状态。此时从托盘图标重新登录即可。
需要注意:这样会生成新的 Tailscale 设备身份。确认新设备连接正常后,可以到 Tailscale 管理后台删除旧的离线设备。备份文件包含设备状态信息,应妥善保管;确认不再需要恢复时再删除。
Linux:同样先备份,不要一上来就删
Linux 上遇到相同的 TPM 解封错误,也可以先停止服务并备份状态目录:
sudo systemctl stop tailscaled
sudo mv /var/lib/tailscale /var/lib/tailscale.tpm-broken.bak
sudo systemctl start tailscaled
随后重新登录:
sudo tailscale up
确认运行正常后,再决定是否清理备份目录。
最后复盘
这次故障最迷惑的地方,是三个表象同时存在:服务显示 Running、虚拟网卡已经创建、桌面端却一直 Starting。
真正有效的排查顺序是:
- 确认 Windows 服务和前端进程是否存在;
- 区分正常子进程与异常重复进程;
- 用管理员终端执行
tailscale status,绕过本地管道权限干扰; - 根据 health check 找到
TPM_RC_INTEGRITY; - 备份无法解密的状态文件,让 Tailscale 重新生成设备身份。
所以,下次再看到 Tailscale 一直说“正在启动”,不妨去后台问一句:到底是网络没通,还是 TPM 突然失忆了?
若无法加载请检查网络环境。
若无法加载请检查网络环境,或切回 Disqus 稍后再试。