[宽带症候群] 对上海联通限速的观察和讨论

起因

前天在外用 WireGuard 云回家时发现游戏更新速度异常缓慢,物理回家后开始调查:

  1. 使用 speedtest.net 和全球网测 APP 的上海联通节点测速正常,排除设备问题。

  2. 使用 iperf3 和上海腾讯云对拉,宽带的 TCP/UDP 、单线程/多线程上行均只有 5 Mbps 。

  3. 重新拨号、更换 Mac 地址后重新拨号未能恢复,等到凌晨测试也未能恢复。

基于以上情况,初步确定宽带被上海联通善意限速!😡

测试限速策略

iperf3 测试

如前文所述,无论 TCP 还是 UDP 测试均会触发上行限速。

抽测了从上海联通往香港阿里云、上海电信/联通/移动/腾讯云上传,均会触发 5 Mbps 限速。

HTTPS 流量

根据先前 上海电信精品网限速 的经验,自建测速网站测试 SNI 和端口限速策略。

注:受多种原因影响,网页测试并不能完全跑满,以下将 >= 50 Mbps 的上行测试结果视为“未观察到明显限速”。不能排除限速值高于 50 Mbps 的可能性。测试网站使用 LibreSpeed 搭建,全部位于同一台服务器上。

  1. https://speedtest.xxx.yyy 未观察到明显限速。
  2. https://speedtest.xxx.yyy:11111 未观察到明显限速。
  3. https://speedtest.xxx.yyy:8080 未观察到明显限速。

  1. https://speedtest.sbcu.xxx.yyy 未观察到明显限速。
  2. https://speedtest.sbcu.xxx.yyy:11111 未观察到明显限速。

  1. https://speedtestsbcu.xxx.yyy 未观察到明显限速。
  2. https://speedtestsbcu.xxx.yyy:11111 上行限速 10 Mbps 。
  3. https://speedtestsbcu.xxx.yyy:8080 未观察到明显限速。

  1. https://sbcuspeedtest.xxx.yyy 未观察到明显限速。
  2. https://sbcuspeedtest.xxx.yyy:11111 未观察到明显限速。

  1. https://speed.sbcu.xxx.yyy 未观察到明显限速。
  2. https://speed.sbcu.xxx.yyy:11111 上行限速 10 Mbps 。
  3. https://speed.sbcu.xxx.yyy:8080 上行限速 10 Mbps 。

可以看出,上海电信的几个白名单规则都能在上海联通复现。HTTPS 流量满足以下任意一条规则即可进入白名单绕过上行限速:

  • 目标端口 == 443 。
  • 目标端口 == 8080 ,且 SNI 包含 speedtest 字符串。
  • SNI 包含 speedtest. 字符串。

与上海电信不同,上海联通将白名单以外的 HTTPS 流量上行限速放宽到了 10 Mbps 。

我猜是 HTTPS 流量较为常用,为了避免上行限速 5 Mbps 会导致下行速度太差?

虚拟局域网 / 代理流量

以下云回家方案默认以上海联通 5G 蜂窝网络为客户端、使用全球网测进行测速:

  • WireGuard:无论在 51820 还是其他高位端口均会被限速到 5 Mbps 。

  • OpenVPN:无论是 TCP 还是 UDP 模式、无论在 8443 还是高位端口均不会被限速。

  • 裸 VLESS 无加密:无论在 8443 还是高位端口均不会被限速。

  • 裸 VMESS AES-128-GCM:无论在 8443 还是高位端口均会被限速到 5 Mbps 。

  • 裸 VMESS ZERO:无论在 8443 还是高位端口均不会被限速。

  • 裸 VMESS ZERO 作为 SS AES-128-GCM 的前置代理:被限速到 5 Mbps 。

  • 裸 VMESS ZERO:使用 speedtest.net APP 指定节点 ID=5396 进行测试,被限速到 5 Mbps 。在家直接测试节点 ID=5396 不会被限速。

显然,使用非加密代理协议云回家不被限速的前提是上海联通能认出代理里面跑的是白名单流量,没认出来的话就只能给你限速速啦 ^^_

既然 OpenVPN 使用 TLS 外层,那给代理也套上 TLS 会怎样呢?

  • VLESS 无加密 + TLS ( SNI:off ):无论在 8443 还是高位端口均被限速 10 Mbps 。

  • VLESS 无加密 + TLS ( SNI:speed.sbcu.xxx.yyy ):无论在 8443 还是高位端口均被限速 10 Mbps 。

  • VLESS 无加密 + TLS ( SNI:speedtest.xxx.yyy ):无论在 8443 还是高位端口均不会被限速。

看来上海联通并不关心流量方向,与 HTTPS 流量的测试结果一样,TLS 入站流量不符合白名单规则还是会被限速。

OpenVPN 是单独被加白了?还是正好碰到了某个隐藏的白名单规则?🤔

测速网站

speedtest.net 网页端测试无法有效进行,不像上海电信精品网随便选节点都能跑满,上海联通就算选取符合白名单规则的境外节点也无法测试出两位数的上行速度,更不要说特殊节点了。(特殊节点是指不符合 HTTPS 流量白名单规则的节点)

speedtest.net 的 iOS APP 和 Linux CLI 上测试特殊节点 ID=27628 、ID=44745 、ID=74653 没有观察到明显上行限速。由于 APP 与网页版测速方式不同,APP 未使用标准 HTTPS 进行测试,可能是上海联通对这类流量做了单独的白名单处理。

绝大部分网页测速方式都能直接匹配 HTTPS 流量白名单规则,不会触发上行限速。

混合测试

在同时进行 iperf3 TCP 上行测速和 WireGuard 测速过程中,iperf3 和 WireGuard 客户端并非同一 IP 地址,仍可以稳定观察到带宽竞争,意味着白名单以外的所有流量将共享 5 Mbps 带宽。

被限速的原因?

比起限速策略,我更关心触发限速的原因,毕竟被限速约等于被扣了个滥用的帽子,实在让人不爽。

先介绍一下使用情况:

  • 自路由器 WAN 上次重拨之后,21 天内 WAN 下行 1.34 TB 、上行 60 GB 。
  • 自路由器上次重启后,51 天内 LAN 下行 137 GB 、上行 2.34 TB ( LAN 和 WAN 的上下行方向相反)。
  • 这条上海联通宽带上近一年内有且仅有的五个用途:
    • WireGuard 在 260 天内上行流量 56 GB 。
    • qBittorrent-Enhanced-Edition 在 256 天内下行流量 50 GB 、上行流量 140 GB 。
    • 百度网盘 30 天内上下行流量共计 7 GB 、一直未启用“优化加速”那个 P2P 功能。
    • 网络质量监测,会对国内外约 50 个公网 IP 进行 ICMP ping 测试,260 天内上行流量 17 GB 。
    • 自动下载备份,每天会从自己的网站上下载约 50 GB 备份文件。

基于以上情况,个人观点:

  • 高上行流量是导致限速的原因的可能性较低。
  • 不能排除网络质量监测、BT 或百度网盘的行为特征是触发限速的原因,例如多连接数、异地 IP 连接次数、针对 BT 或百度网盘的流量黑名单等。
  • 不能排除上下行流量总和是触发限速的原因。
  • 上下行比例不是免死金牌。

所以为什么会给我限速嘞?大家有啥思路不?难道是看我套餐太便宜了吗😰

结尾

以上是我目前能想到的所有相关测试内容,如果有更好的想法欢迎进行补充。

之后就该去报障了,希望有投诉上海联通/解限速经验的坛友分享一下流程~

比如这种限速会不会每月自动解封?之后要上门吗?有没有不平等条约?解完还会再限速吗?能不能要到限速原因?

如果能像上海电信那么好解决就好了呢 :(