这几天搓了一个 小而美的 小工具,用于对付一些刁钻的 CDN 域名分区解析策略,大概是通过调 Globalping 的 API 得到域名在其他区域的解析结果,然后选择 ICMP 延迟最低的 IP 写入本地 hosts 文件
代码:Zhousiru/opti-hosts,中文 README.md
预构建的二进制可以在 Releases 下载
# Why
家里电视连海外的某 Emby 媒体服务器,Emby 域名本身配置了分区解析到 HK 和 US 的 CDN 节点,但是线路依旧不太行,晚高峰 QoS 很严重,又不舍得用机场的流量,就在 HK VPS 上搞了个反代,经隧道连到境内的 VPS 中转,再隧道回家。
结果发现在境内 Emby 的域名解析到了 HK 的节点(~60 ms),而在 HK VPS 上却解析到了 US 的节点(~150 ms)Σヽ(゚Д ゚; )ノ
不知道是不是故意这么配置的。。我就在反代配置中直接写了 HK CDN 节点的 IP,手动加上 Host
header,一开始很好用,不过后来结果也在预料之中:IP 失效,只能手动换 IP,这种定时维护也太麻烦了。
所以就搓了这么一个小工具来自动测量 IP 和延迟,更新 hosts。类似于“Cloudflare 优选”,但这个工具不局限于套 CF 的域名,也不内置 CF 的 CIDR,是靠 Globalping 测量各地的解析结果。
# 有趣的小细节
开脑洞把工具的配置结合到了现有的 hosts 文件里面,试着用 pest 定义了一个小小的 DSL,称为 hosts directive,大概像这样:
|
|
不需要额外的配置文件,直接运行一下 opti-hosts
就更新好了,是不是很简洁呢(x
(虽然用正则解析也完全 OK,但就是想试试 parser generator 233)
# 一些局限
Globalping 在不登陆的情况下限制每个 IP 一小时内最多创建 250 次查询,登陆后带上 token 可以提升到 500 次(虽然现在的版本没有提供设置 token 的选项 233333)
另外,虽然提到了 Cloudflare 优选,但是和它的原理不同,Opti Hosts 选择 IP 的依据仅仅是 ping 测得的延迟,没有考虑 TCP 延迟和带宽等等因素(也没法考虑),不过大部分情况下应该没有问题,够用
目前只提供 AMD64 & ARM64 架构 Linux 的预构建版本,Windows 和 macOS 需要自己 build(逃