V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
unknown666
V2EX  ›  分享创造

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

  •  
  •   unknown666 · 2022-10-31 11:36:59 +08:00 · 4139 次点击
    这是一个创建于 790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 国外很多网站都在使用 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
    zenghy0529
        1
    zenghy0529  
       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   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 12:35 · PVG 20:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.