Steam 下载速度偏低与 Clash Verge Rev 规则/CDN 调度排障报告¶
生成时间: 2026-07-08T23:42:22+08:00
1. Problem Description¶
Fedora 上 Steam 下载《ATRI -My Dear Moments-》时速度长期只有约 5 MB/s,明显低于历史上可达到的 30-40 MB/s。用户同时观察到 Clash Verge Rev TUN 模式下:
- 规则模式时下载速度甚至可能低于
1 MB/s。 - 全局模式时约
3-5 MB/s。 - 后续切换 Steam 下载地区到
China - Shanghai后仍只有约6 MB/s。
本次排障目标是确认瓶颈来自 Steam CDN、Clash Verge Rev 规则、TUN/fake-ip、系统网络链路、磁盘写入,还是 Steam 自身解包/校验阶段,并尽量恢复更合理的直连下载链路。
2. Environment and Scope¶
- 主机:Lenovo Legion Y9000P IRX8
- 系统:Fedora Linux 43 Workstation
- 内核:
Linux 7.1.3-100.fc43.x86_64 - 网络:Wi-Fi
wlp0s20f3,SSIDCMCC-mzP2-5G - 代理客户端:Clash Verge Rev +
verge-mihomo - Clash mixed-port:
127.0.0.1:7897 - Clash TUN 接口:
Meta - Steam 路径:
/home/chesszyh/.local/share/Steam - Steam 目标应用:
AppID 1230140,即ATRI -My Dear Moments-
本报告只覆盖本机 Steam 下载链路和 Clash Verge Rev 规则排障,不评估运营商侧限速、路由器 QoS、Steam 全球 CDN 当时整体健康状态。
3. Symptoms and Reproduction¶
可复现现象:
- Steam 下载速度在 UI 中显示约
5 MB/s到6 MB/s。 - Steam
content_log.txt中对应速率为几十 Mbps,例如:
Current download rate: 31.681 Mbps
Current download rate: 35.239 Mbps
- 换算后约为
4-5 MB/s,和 UI 观察基本一致。 - Clash 规则修复前,Steam 的下载源和目录服务曾出现以下现象:
cache10-sgp1.steamcontent.com
cache7-sgp1.steamcontent.com
cmp2-sgp1.steamserver.net
- 规则修复后,Steam 连接切换为直连,且目录服务和下载 CDN 发生变化:
cmp1-hkg1.steamserver.net -> DIRECT
dl.steam.clngaa.com -> DIRECT
st.dl.eccdnx.com -> DIRECT
xz.pphimalayanrt.com -> DIRECT
4. Investigation Timeline¶
4.1 初始 Steam 配置检查¶
检查 Steam 配置和日志:
rg -n "CellIDServerOverride|CurrentCellID|Rate|RecentDownloadRate" config/config.vdf
tail -n 220 logs/content_log.txt
发现:
- 初始
CellIDServerOverride为35。 - Steam 配置中存在
Rate = 30000,约等于30 MB/s下载上限。 - 这个限速不是当时
5 MB/s的直接原因,但会阻止后续恢复到超过30 MB/s的速度。
4.2 Clash/TUN 与代理环境检查¶
检查路由、TUN、进程和连接:
ip -br addr
ip route
ip rule
ss -tpn state established
ps -eo pid,ppid,comm,args | rg -i 'steam|clash|verge|mihomo|tun'
发现:
- 系统存在 Clash TUN 接口
Meta。 - DNS 和 fake-ip 使用
198.18.0.0/16。 - Steam 进程存在大量连接到
127.0.0.1:7897。
进一步检查 Steam 进程环境:
tr '\0' '\n' < /proc/<steam-pid>/environ | rg -i 'proxy|no_proxy'
发现 Steam 继承了 shell 代理环境:
http_proxy=http://127.0.0.1:7897
https_proxy=http://127.0.0.1:7897
all_proxy=http://127.0.0.1:7897
代理变量来源为:
/home/chesszyh/.zshenv
这解释了为什么 Steam 即使在 TUN 模式之外,也可能主动走 mixed-port。
4.3 规则模式下的实际命中检查¶
通过 Mihomo Unix socket 查询运行时连接:
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/connections | jq ...
早期观察到:
cache7-sgp1.steamcontent.com -> GLOBAL -> 新加坡 hy2 节点
cache10-sgp1.steamcontent.com -> GLOBAL -> 新加坡 hy2 节点
api.steampowered.com -> GLOBAL -> 新加坡 hy2 节点
cmp2-sgp1.steamserver.net -> GLOBAL -> 新加坡 hy2 节点
随后切到规则模式后,下载本体 steamcontent.com 已经能命中 DIRECT,但 steamserver.net、steampowered.com、steamstatic.com 仍会被订阅规则命中到代理策略组。
这说明问题不是单一的“是否开代理”,而是 Steam 下载链路中不同域名被拆分到了不同路径:
- 下载本体可能直连。
- 目录服务、商店/API、静态资源仍可能走代理。
- Steam CDN 源列表可能因此受代理出口和 DNS/fake-ip 影响。
4.4 下载地区切换到 China - Shanghai¶
用户将 Steam 下载地区切到 China - Shanghai 后,检查配置:
rg -n "CellIDServerOverride|CurrentCellID|Rate|RecentDownloadRate" config/config.vdf
结果:
CellIDServerOverride = 47
CurrentCellID = 47
RecentDownloadRate = 6279238
这说明地区设置确实生效,约 6.0 MB/s 的观察也被 Steam 配置记录确认。
但 Steam 日志显示,CellID 47 并不一定返回上海或国内最优源:
Got 11 download sources ... (CellID 47 / Launcher 0)
Created download interface ... cache8-tyo3.steamcontent.com
即使选择上海,Steam 一度仍调度到东京 tyo3 CDN。
4.5 磁盘与 CPU 检查¶
使用:
iostat -dx 1 5
pidstat -p <steam-pid> -d -u 1 5
发现:
- NVMe/Btrfs 没有被打满,
%util低。 - Steam 进程可能接近吃满一个 CPU 核。
- 写入速度在
5-8 MB/s左右波动。
结论:磁盘不是主瓶颈;Steam 解包/校验会影响瞬时速度,但无法解释规则修复前代理链路差异。
4.6 规则修复与热重载¶
修改 Clash Verge Rev 当前订阅使用的规则增强文件:
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/profiles/ryguEitH4tBd.yaml
同时修改当前生成配置:
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml
在规则最前面加入 Steam 相关域名直连规则,并通过 Mihomo API 热重载:
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-H 'Content-Type: application/json' \
-X PUT \
-d '{"path":"/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml","force":true}' \
http://localhost/configs
热重载返回:
HTTP 204
4.7 Steam 重启后的最终链路¶
用户通过 rofi 重启 Steam 后,速度提升到约 10 MB/s。
再次检查运行时连接,确认:
cmp1-hkg1.steamserver.net DomainSuffix steamserver.net DIRECT
store.steampowered.com DomainSuffix steampowered.com DIRECT
api.steampowered.com DomainSuffix steampowered.com DIRECT
shared.steamstatic.com DomainSuffix steamstatic.com DIRECT
community.steamstatic.com DomainSuffix steamstatic.com DIRECT
下载 CDN 切到国内/中国区常见源:
st.dl.eccdnx.com
dl.steam.clngaa.com
xz.pphimalayanrt.com
并出现跳转到国内移动网段的实际下载地址,例如:
36.137.18.59
39.135.x.x
39.137.x.x
112.29.252.215
223.76.x.x
Steam 日志中后续更新任务速率:
Current download rate: 57.539 Mbps
约等于 7.2 MB/s,UI 瞬时显示约 10 MB/s。
5. Root Cause¶
根因不是单一因素,而是多层叠加:
- Steam 进程从
/home/chesszyh/.zshenv继承了http_proxy、https_proxy、all_proxy,导致 Steam 主动使用127.0.0.1:7897。 - Clash Verge Rev 规则中,
steamcontent.com已经有直连规则,但steamserver.net、steampowered.com、steamstatic.com、steamcommunity.com等域名仍会被后续规则命中到代理策略组。 - Steam 下载链路依赖多类域名:目录服务、商店/API、静态资源、内容 CDN。部分走代理、部分直连会使 CDN 调度不稳定。
- Steam 下载地区切换到
China - Shanghai后,只是设置了CellID 47,并不保证最终一定使用上海 CDN;排障中曾返回东京cache8-tyo3源。 - 修复规则后,目录服务与内容下载均直连,Steam 调度切换到
hkg1目录服务和国内 CDN,速度从约5-6 MB/s提升到约7-10 MB/s。
剩余未恢复到历史 30-40 MB/s 的原因更可能是当前 Steam CDN/运营商路径、下载任务大小、并发连接、解包/校验阶段或 Steam 当时 CDN 负载,而不是 Clash 代理绕路。
6. Changes Made¶
6.1 持久规则增强¶
文件:
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/profiles/ryguEitH4tBd.yaml
新增在 prepend: 最前面的规则:
- DOMAIN-SUFFIX,steamcontent.com,DIRECT
- DOMAIN-SUFFIX,steamserver.net,DIRECT
- DOMAIN-SUFFIX,steampowered.com,DIRECT
- DOMAIN-SUFFIX,steamstatic.com,DIRECT
- DOMAIN-SUFFIX,steamcommunity.com,DIRECT
- DOMAIN-SUFFIX,steamusercontent.com,DIRECT
- DOMAIN-SUFFIX,steamgames.com,DIRECT
- DOMAIN-SUFFIX,valvesoftware.com,DIRECT
- DOMAIN,steampipe.akamaized.net,DIRECT
- DOMAIN,steamcommunity-a.akamaihd.net,DIRECT
- DOMAIN,steamstore-a.akamaihd.net,DIRECT
- DOMAIN,steamusercontent-a.akamaihd.net,DIRECT
- DOMAIN,steamuserimages-a.akamaihd.net,DIRECT
6.2 当前生成配置同步¶
文件:
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml
同样在 rules: 最前面加入上述 Steam 直连规则,避免等待 Clash Verge Rev 再次生成配置。
6.3 备份文件¶
修改前创建了备份:
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/profiles/ryguEitH4tBd.yaml.bak-steam-direct-20260708
/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml.bak-steam-direct-20260708
6.4 运行时热重载¶
通过 Mihomo API 加载当前配置文件,返回 HTTP 204,说明热重载成功。
7. Verification¶
7.1 YAML 语法验证¶
python3 - <<'PY'
import yaml
for p in [
'/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/profiles/ryguEitH4tBd.yaml',
'/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml',
]:
with open(p, 'r', encoding='utf-8') as f:
yaml.safe_load(f)
print('ok', p)
PY
结果:
ok .../profiles/ryguEitH4tBd.yaml
ok .../clash-verge.yaml
7.2 运行时规则顺序验证¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/rules | jq -r '.rules[0:20][] | [.type,.payload,.proxy] | @tsv'
确认前几条为:
DomainSuffix steamcontent.com DIRECT
DomainSuffix steamserver.net DIRECT
DomainSuffix steampowered.com DIRECT
DomainSuffix steamstatic.com DIRECT
DomainSuffix steamcommunity.com DIRECT
7.3 Steam 重启后连接验证¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/connections | jq ...
确认:
cmp1-hkg1.steamserver.net -> DIRECT
store.steampowered.com -> DIRECT
api.steampowered.com -> DIRECT
shared.steamstatic.com -> DIRECT
dl.steam.clngaa.com -> DIRECT
7.4 Steam 日志验证¶
tail -n 120 /home/chesszyh/.local/share/Steam/logs/content_log.txt
关键结果:
Got 3 download sources ... (CellID 47 / Launcher 0)
Created download interface ... st.dl.eccdnx.com
Created download interface ... dl.steam.clngaa.com
Created download interface ... xz.pphimalayanrt.com
Current download rate: 57.539 Mbps
7.5 用户可见结果¶
Steam 重启后,下载速度从约 5-6 MB/s 提升到约 10 MB/s。虽然没有恢复到历史 30-40 MB/s,但代理绕路和目录服务走代理的问题已被修正。
8. Problems Encountered During Debugging¶
127.0.0.1:7897不能直接等同于“最终走代理”。在 Clash TUN/mixed-port/fake-ip 场景下,连接进入本地端口后仍可能根据规则DIRECT出站。- 已建立连接不会因为规则热重载自动迁移。必须完全重启 Steam,旧连接才会重新按新规则建立。
- Steam 下载地区不是严格地理绑定。
China - Shanghai对应CellID 47,但曾返回东京cache8-tyo3源。 - Steam 下载 UI 的 MB/s 和日志中的 Mbps 需要换算。
57.539 Mbps约等于7.2 MB/s。 - 下载任务末尾可能进入校验、提交、切 depot、暂停队列等阶段,速度会瞬时下降,不应只用某一秒作为结论。
- 系统代理和 shell 环境代理是两回事。GNOME system proxy 可能为
none,但 Steam 仍可能继承.zshenv中的http_proxy等变量。 - Clash Verge Rev 的当前生成配置可能会被订阅更新或配置重生成覆盖,因此必须改持久的 profile enhancement rules,而不只改
clash-verge.yaml。
9. Reuse Notes and Lessons¶
- 遇到 Steam 下载慢时,先区分“内容 CDN 慢”和“目录服务/调度路径被代理影响”。
- 对 Steam,至少应把以下域名放在 Clash 规则最前面直连:
- DOMAIN-SUFFIX,steamcontent.com,DIRECT
- DOMAIN-SUFFIX,steamserver.net,DIRECT
- DOMAIN-SUFFIX,steampowered.com,DIRECT
- DOMAIN-SUFFIX,steamstatic.com,DIRECT
- DOMAIN-SUFFIX,steamcommunity.com,DIRECT
- DOMAIN-SUFFIX,steamusercontent.com,DIRECT
- 若 Steam 从 shell 启动,检查
.zshenv、.profile、systemd user environment 是否注入代理变量。 - 规则调整后应重启 Steam,而不是只观察热重载后的旧连接。
CellIDServerOverride可以证明 Steam 下载地区是否被写入,但不能证明最终 CDN 一定在该城市。- 判断速度瓶颈时同时看:
- Steam
content_log.txt - Clash
/connections ss -tpnpidstatiostat- Wi-Fi 链路状态
10. Appendix: Reusable Commands¶
Steam 配置与日志¶
cd /home/chesszyh/.local/share/Steam
rg -n "CellIDServerOverride|CurrentCellID|TimeCellIDSet|Rate|RecentDownloadRate" config/config.vdf
tail -n 160 logs/content_log.txt
查看 Steam 进程和环境代理¶
pgrep -a steam
tr '\0' '\n' < /proc/<steam-pid>/environ | rg -i 'proxy|no_proxy'
查看 Clash 运行时模式¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/configs | jq '{mode: .mode, mixedPort: .["mixed-port"], tun: .tun.enable}'
查看 Steam 相关连接命中¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/connections |
jq -r '.connections[]
| select((.metadata.host // "") | test("steam|steamcontent|steamserver|steampowered|steamstatic"; "i"))
| [.metadata.host,.metadata.destinationIP,.metadata.destinationPort,.rule,.rulePayload,(.chains|join(" -> ")),(.download|tostring)]
| @tsv'
查看运行时规则顺序¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-sS http://localhost/rules |
jq -r '.rules[0:30][] | [.type,.payload,.proxy] | @tsv'
热重载 Mihomo 配置¶
curl --unix-socket /tmp/verge/verge-mihomo.sock \
-H 'Authorization: Bearer <redacted>' \
-H 'Content-Type: application/json' \
-X PUT \
-d '{"path":"/home/chesszyh/.local/share/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml","force":true}' \
http://localhost/configs
磁盘与 CPU 辅助判断¶
iostat -dx 1 5
pidstat -p <steam-pid> -d -u 1 5
网络链路状态¶
iw dev wlp0s20f3 link
ip -br addr
ip route
ip rule