登录之后 Tailscale 托盘图标一直停在 Starting,怎么等都不动。
最后查出来是本地状态文件解不开了:TPM 不认之前那把密钥。下面是排查过程,以及 Windows 和 Linux 的处理方法。
先别急着重装
用 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 已经不认它了。结果就是设备身份解不开,后台进 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.
后台已经回到一个干净、可初始化的状态,从托盘重新登录就行。
两点注意:重新登录会生成新的设备身份,确认新设备连通之后,去管理后台把旧的离线设备删掉;备份文件里有设备状态信息,先收好,确认不用了再删。
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。
看到这个组合,别猜网络——直接用管理员终端跑一次 tailscale status,让后台自己说话。
若无法加载请检查网络环境。
若无法加载请检查网络环境,或切回 Disqus 稍后再试。