使用 Speedtest 服务器定点定栈测试 IPv6 带宽

271 天前
 onion83

背景和动机

鉴于某些地区家庭宽带 IPv4 和 IPv6 上下带宽并不对等,需要分开测速,Ookla 的测速服务器越来越少,支持双栈的服务器更少,官方的 Web 端 和 cli 端 没有 ipv6 only 和指定地域选项,默认会根据 IP 返回服务器列表,speedtest 域名本身就在国外,获取服务器列表接口不小心分流后就会出现无法返回中国服务器的情况,所以需要精确找出中国地区的服务器,并且支持 IPv6 。其实可以通过 修改系统 hosts 指定 IPv4/IPv6 地址,干预程序域名解析,这样就可以 定点 (指定服务器 ID ) 定栈 ( IPv4/IPv6 )进行测速了。

前期准备

因为官方客户端闭源,通过阅读非官方客户端 https://github.com/sivel/speedtest-cli 可知,目前官方尚有 API 查询接口可用 https://www.speedtest.net/api/js/servers?engine=js&search=china 通过遍历中国地区服务器,使用 dig 命令找出有 AAAA 记录的服务器即可 (以下命令请确保 jq 程序已安装)

for host in $(curl -s https://www.speedtest.net/api/js/servers\?engine\=js\&search\=china | jq ".[].url" | awk -F'[:/]' '{print $4}'); do if r=$(dig +short AAAA $host @223.5.5.5 | head -n 1) && [[ -n "$r" ]]; then echo "$r" $host; fi; done

成果如下 (更新:2023/08/04):

# 成都电信 29071 China - China Telecom
240e:16:1001:150::3 speedtest1.sc.189.cn 

# 重庆广电 5530 Chongqing - CCN
2401:7e00:fffe:22::6a speedtest1.cqccn.com

# 兰州电信 3973 Lanzhou - China Telecom
# 240e:2a:1:ff00::2 speed.bajianjun.com

# 上海联通 24447 Shanghai - China Unicom 5G
2408:8000:9000:20e6::5dd 5g.shunicomtest.com

# 北京联通 43752 Beijing - BJ Unicom
2408:8000:1010:10::254:31 beijing.unicomtest.com

# 北京移动 25828 Beijing - China Mobile Group Beijing Co.Ltd
2409:8087:0:45:600::9 speedtest.bmcc.com.cn

修改 hosts 文件

Linux/Mac:/etc/hosts
Windows:C:\Windows\system32\drivers\etc\hosts

追加上述内容,如果使用了 dnsmasq/smartdns 等自建 DNS 也可以加入相关规则进行全局干预。

测速方式 1:使用官方网站测速

打开 https://ipv6.speedtest.net Change Server 输入关键字切换切换服务器,按 F12 观察网络请求

优点:使用方便,所见即所得
缺点:浏览器开销太大,在低配软路由开虚拟机,跑一个 windows 再开一个浏览器,机器本身就快死了,测速偏低

测速方式 2:使用官方 cli 客户端测速

https://www.speedtest.net/apps/cli 根据系统下载官方 cli 客户端,使用 speedtest -s <服务器 ID> 进行定点测速(定栈已通过 hosts 文件干预),通过抓包分析,程序会通过 cli.speedtest.net 域名获取服务器列表并进行 ISP 定位,可根据实际情况加入分流名单,解决其使用境外服务器导致的 程序卡顿/报错,或者 ISP 定位不准的问题。

优点: 多平台官方客户端,程序占用资源小,可在裸机/容器中运行,性能优良,测速准确
缺点: 闭源黑盒

测速方式 3:使用非官方 cli 客户端测速

非官方客户端高 stars 项目 sivel/speedtest-cli release 版本中依然使用了根据 IP 返回最近服务器列表,使用参数--server <服务器 ID> 有可能报会服务器不存在。在 pull request #784 "Add option --custom to perform test with custom servers" 有大佬加入了自定义补丁,但是没有被作者 merge 到主干分支中,并目前已经和主干冲突,但是实测可用,具体使用步骤:

wget "https://raw.githubusercontent.com/sivel/speedtest-cli/ca087bac99f94608f65d050f2401f08aea6d376f/speedtest.py" -O speedtest-cli
chmod 755 speedtest-cli
./speedtest-cli --custom "https://www.speedtest.net/api/js/servers?engine=js&search=china" --server <服务器 ID>

优点:开源、跨平台
缺点: python 脚本程序,包依赖复杂,程序占用资源小,但性能一般(估计测速时间过短,未到 QoS 上限窗口就结束了,有兴趣朋友可修改读数据的时长试试),测速偏低

还原与恢复

  1. 取消 hosts 文件自定义部分,还原 DNS 配置即可,无任何副作用。
  2. IPv4 定点定栈测速原理类似,也是通过 hosts 文件 DNS 干预程序服务器选择
  3. 已知问题:可能测速服务器 IPv6 地址会变,测速前最好确认以下 AAAA 记录是否有变,具体做法 dig aaaa +short <服务器地址> 或者 host -t aaaa <服务器地址>
  4. 已知问题:测速服务器可能会随时关闭,服务器可能会针对异地 IP 针对性限速或者限制访问。
2120 次点击
所在节点    宽带症候群
5 条回复
JensenQian
271 天前
ipv6.stream
论坛大佬做的,有一堆大学的 ipv6 测速点
iijboom
270 天前
我这里三网都是 v4 v6 一起限速地非常准确
yyzh
270 天前
官方 api 返回的节点数量有限制的,目前还没找到能列出全部的方法
loukky
270 天前
iijboom
262 天前
“目前观察到 v4+v6 的合计带宽会出现远远 大于签约带宽 的现象”
我这里会牢牢限制死,一点都不多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/964800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX