用 Rust 写了个能返回 Cloudflare CDN 最快的 IP 的本地 DNS 解析器。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
unknown666
V2EX    分享创造

用 Rust 写了个能返回 Cloudflare CDN 最快的 IP 的本地 DNS 解析器。

  •  
  •   unknown666 2022-10-31 11:36:59 +08:00 4672 次点击
    这是一个创建于 1083 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 国外很多网站都在使用 Cloudflare CDN ,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。

    • 虽然有人写过测速的脚本,但是需要手动改 hosts ,或者有自动改 hosts 的脚本(但是需要 root 权限,不安全)。

    • 于是写了个 DNS 解析器, 配置文件指定使用了 Cloudflare CDN 的域名, 即可返回最快的 IP 地址,如果不在配置文件中的域名则转发到上游的 DNS 服务器,上游服务器可配置为 smartdns/dnsmasq/其他公共 DNS 服务器地址。

    • github 仓库地址: cfdns, 欢迎 star/fork/提建议 /提 issue 。

    13 条回复    2022-12-01 16:38:53 +08:00
    z100
        1
    z100  
       2022-10-31 11:44:11 +08:00
    水一个
    XIU2
        2
    XIU2  
       2022-10-31 12:08:04 +08:00
    看了下,你这还需要一行一行把域名加到 domain.txt 来指定这些域名返回最快 IP 呀。。。

    其实用我写的 CloudflareST 搭配 mosdns 也能实现一样的效果,而且一劳永逸。

    上游解析结果是 Cloudflare CDN IP 的话,mosdns 就给改为最快 IP 返回给你。
    https://github.com/XIU2/CloudflareSpeedTest/issues/115

    上面这篇教程是网友写的,我自己以前也研究过,写了一个依靠本地代理来 IP 重定向的方案。
    https://github.com/XIU2/CloudflareSpeedTest/discussions/71


    很多人也想让我把 XX 功能内置到软件中,但是这样就锁死软件用途了,还是现在这样更灵活一些,可以根据不同需求与各种软件、脚本搭配使用,我自己也写了几个简单脚本、教程。

    至于改 Hosts 确实需要管理员权限,至于脚本内容都是明文的,不存在安全不安全的问题~
    unknown666
        3
    unknown666  
    OP
       2022-10-31 12:21:21 +08:00
    @XIU2 填域名确实不方便。突然想到可以先发到上游拿到返回的 ip 地址,判断在不在 Cloudflare CDN 的地址范围内。在的话后续直接返回最快的 ip 。
    molezznet
        4
    molezznet  
       2022-10-31 13:10:15 +08:00
    有可能有 v6 的吗, 有时感觉 v6 的更低,能到 30ms
    Chinr
        5
    Chinr  
       2022-10-31 13:35:19 +08:00
    @molezz765 你什么地区呀,我这边分配到的节点都是 170-200ms 左右
    molezznet
        6
    molezznet      2022-10-31 13:38:38 +08:00
    @Chinr 移动,35ms 有的 我发你几个看看吧

    2606:4700:90c3::580b:fbf9:a05b
    2606:4700:83b0:950c:910:c1b2:5a2a:9e0d
    2606:4700:90ce:606f:b094:ef05:e863:df26
    2606:4700:83b4:26:b9cb:bb71:882e:f13d
    2606:4700:90c0:0:fd3d:824f:151b:60c2
    XIU2
        7
    XIU2  
       2022-10-31 14:17:10 +08:00   1
    @molezz765 IPv6 因为 IP 太多,目前我写的 CloudflareSpeedTest 采取的方案是全段随机,即使这样我还嫌多,每次延迟测速都最少几万个 IP 。。。

    @Chinr 只有移动才能这么低延迟,因为是直连的香港节点,而电信联通连香港节点都是绕道的,一般扫出的 IP 大都是美西的,一百多延迟。

    现在主要是很多人反馈 Cloudflare CDN 的 IPv4 阻断(包括我也出现了,还专门发了 Issues ),因此我很早改用 IPv6 了,虽然延迟比以往 IPv4 多大概 20~30ms ,但起码不会时不时阻断恶心人了。。。
    https://github.com/XIU2/CloudflareSpeedTest/issues/217
    nzhl
        8
    nzhl  
       2022-10-31 15:34:20 +08:00
    支持下, 看看代码学学 rust
    unknown666
        9
    unknown666  
    OP
       2022-10-31 17:50:19 +08:00
    更新了一版, 支持自动识别 Cloudflare 域名了。
    FightPig
        10
    FightPig  
       2022-11-01 01:38:52 +08:00
    这个看下,说不定用的到
    molezznet
        11
    molezznet  
       2022-11-01 09:20:44 +08:00
    @XIU2 测试了下,果然如此, 以前一直用 6 ,没发现 4 已经被盯上了,haproxy 测试了下,列表里 4 一会全红了,6 还是绿的。 一会 4 恢复,真 3min

    https://s1.ax1x.com/2022/11/01/xTc9eO.png
    tofuliang
        12
    tofuliang  
       2022-11-03 19:57:12 +08:00
    不支持 ipv6 啊
    molezznet
        13
    molezznet  
       2022-12-01 16:38:53 +08:00
    @XIU2 最近移动 v4 的阻断没了,延迟 30+,反而 v6 的延迟普遍 180+了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2748 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 09:14 PVG 17:14 LAX 02:14 JFK 05:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86