Repository navigation
troubleshooting.zh Hans
Warning
机器翻译,未经母语者审核。以英文版为准。
先运行内置的环境检查,它能发现大多数问题:
lightspeed --check它会验证:拦截器可用性、包过滤工具、游戏配置解析和代理连通性。
CLI: 你的操作系统缺少所需的包过滤工具,或者你没有足够权限。
| 操作系统 | 所需条件 | 修复方法 |
|---|---|---|
| Linux | nftables 或 iptables + root | sudo lightspeed ... |
| macOS | pfctl(内置)+ root | sudo lightspeed ... |
| Windows | WinDivert 驱动 + 管理员 | 右键单击 → 以管理员身份运行 |
用以下命令验证:
lightspeed --checkCLI: 拦截器在预期的端口范围内找不到游戏数据包。
- 确认你的游戏已连接到服务器(不只是停留在主菜单或大厅)
- 用
--scan-processes确认游戏:lightspeed --scan-processes
- 试试别的游戏配置,或者使用手动服务器模式
图形界面(Windows): 等 15 秒。如果出现琥珀色的 "⚠ No game traffic seen" 横幅:
- 打开提权的 PowerShell:
Get-NetUDPEndpoint -OwningProcess (Get-Process RustClient).Id | Where-Object LocalPort -gt 1024 | Select-Object LocalPort
- 在高级 → 手动设置服务器中使用显示的端口
检测器还没有在 1.5 秒内看到发往同一目的地的 3 个数据包。
- 确认你已连接到游戏服务器(移动角色以产生流量)
- 如果 15 秒后仍然检测不到数据包,说明你的服务器用的是非标准端口,请使用手动服务器模式
- 连接到服务器后,停止并重新启动拦截器
数据包到达了代理,但响应没有回到游戏。通常是防火墙问题。
Linux:
sudo iptables -I INPUT -p udp --sport 4434 -j ACCEPTmacOS:
sudo pfctl -d # Temporarily disable pf to testWindows:
# Check if the firewall rule exists
netsh advfirewall firewall show rule name="LightSpeed WinDivert Tunnel"
# Add it manually if missing
netsh advfirewall firewall add rule name="LightSpeed" protocol=UDP dir=in action=allow program="C:\path\to\lightspeed-gui.exe"# Test connectivity
curl http://YOUR_PROXY_IP:8080/health
# Expected response:
# {"status":"ok","node_id":"relay-1","uptime_secs":86400,...}如果无法访问:
- 检查代理是否在运行:
systemctl status lightspeed-proxy - 检查防火墙是否允许 UDP 4434 和 TCP 8080
- 检查代理日志:
journalctl -u lightspeed-proxy --tail 50
拦截器在游戏收到响应之前就抢走了数据包,而注入路径失败了。
Windows:
- 确认
WinDivert64.sys和WinDivert.dll与.exe在同一目录 - 断开次要网卡(Docker、VMware、Hamachi 虚拟网卡)
- 在启动拦截器之前先连接到游戏服务器
Linux:
- 检查 nftables 规则:
sudo nft list ruleset | grep lightspeed - 如果规则是过期的:
sudo lightspeed --check来诊断
WinDivert 会为每个打开的句柄注册一个 WFP callout/filter。如果某个句柄从未被关闭,那份过滤器状态就会残留,下一次 WinDivertOpen 会以 FWP_E_IN_USE (0x8032000A) 失败,即使没有任何进程在明面上使用 WinDivert。
较新的 LightSpeed 版本会在每一条正常的关闭路径上同时关闭捕获句柄和注入句柄,包括 --watch 和 --start-interceptor 下的 Ctrl+C,以及图形界面里的退出,并且会先用 WinDivertShutdown 解除接收循环的阻塞再关闭,让拆除过程是确定性的。强制结束(taskkill /f、崩溃,或者关闭控制台窗口)仍然可能让 WinDivert 2.2.x 驱动留下过期状态;这是上游驱动的局限(basil00/WinDivert#294、#406),进程一旦消失,用户态就无法清除。
如果你还是遇到这个问题:
- 优雅退出并稍等片刻:使用 CLI 的 Ctrl+C 或图形界面的退出,然后给句柄一两秒时间关闭再重新启动。
-
停止 WinDivert 服务(某些情况下可以免去重启;注意该驱动与机器上任何其它基于 WinDivert 的应用共用):
sc stop windivert
- 完全关机,而不是重启:Windows 的"重启"可能复用那个持有过期状态的内核会话;完全关机 → 开机可以清除它。
提示: 在 v1.2.2 及更早版本上,还有一个单独的缺陷(数据面认证拒绝所有数据包,issue #59)会卡死连接,迫使用户反复强杀客户端,这正是大多数
FWP_E_IN_USE报告的触发原因。那个认证缺陷已在 v1.2.3 修复。
以下内容适用于 Windows 上的 lightspeed-gui 应用。
在 v1.4.2 之前的版本上,从托盘菜单选择退出可能会让进程继续在后台运行(一个僵尸进程),所以窗口关了,引擎还在跑,之后再次启动就表现得很奇怪。v1.4.2 修复了这个问题:退出现在会干净地终止进程。
如果你用的是旧版本而且进程卡住了,请手动结束它:
Get-Process lightspeed-gui -ErrorAction SilentlyContinue | Stop-Process然后升级到 v1.4.2 或更高版本。
在 v1.4.2 之前的版本上,启动图形界面两次会叠出第二个窗口和第二个引擎。现在图形界面有单实例保护:第二次启动只会短暂提示 "LightSpeed is already running" 然后退出,不会再启动一个引擎。如果出于诊断需要强行开第二个实例,可以传 --force 或设置 LIGHTSPEED_GUI_FORCE=1。
图形界面通过签名注册表发现社区中继。如果中继列表一直是空的:
- 确认你能上网,并且防火墙或 VPN 没有阻断到注册表的出站 HTTPS。
- 检查图形界面日志(见下文)中是否有注册表获取或签名验证错误。
- 在 CLI 版本上,运行
lightspeed-client --probe-proxies直接查看发现和探测报告。如果 CLI 也什么都找不到,那就是网络侧的问题,不是图形界面特有的问题。 - 修复连通性后重启图形界面;发现过程在启动时运行。
图形界面会把跟踪日志写入:
%LOCALAPPDATA%\Lightspeed\gui-trace.log
把这个路径粘贴到文件资源管理器的地址栏即可打开该文件夹,然后用任意文本编辑器打开 gui-trace.log。请把它附在缺陷报告里。
像 Heartbeat 0 in 这样的行表示引擎在当前窗口期内发送了零个心跳保活。实际上,它出现在客户端还没有建立起可用的控制面连接、因而没有发出任何心跳的时候。常见原因:
- 客户端还没有向任何中继注册(检查状态视图中的注册信息那一行)。
- 所选的中继不可达。
- 拦截器尚未启动,所以没有活动会话。
一旦注册成功、心跳开始发送,这个计数就会增长。如果某个中继显示健康但计数一直是 0,请运行 lightspeed-client --test-control 来判断控制面是否可达。
用调试日志运行,以捕获详细的诊断信息:
# CLI
RUST_LOG=debug lightspeed --start-interceptor --game rust --proxy YOUR_PROXY:4434 2>&1 | tee lightspeed.log
# Windows GUI
cd C:\path\to\lightspeed
lightspeed-gui.exe 2>&1 | tee lightspeed-log.txt请把日志文件附在你的 GitHub issue中。
- 常见问题 - 常见疑问
- GitHub Issues - 搜索已有的报告
- 提交一个新 issue,附上你的操作系统、游戏和日志输出