V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
52acca
V2EX  ›  DNS

国内 dns 解析国外域名竟然这么慢

  •  
  •   52acca · 120 天前 · 5594 次点击
    这是一个创建于 120 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来用的 AdGuardHome 白名单模式分流国内外域名,腾讯系域名用的 dnspod ,国内其他域名用的 alidns ,其他域名用的 quad9 、cloudflare 、opendns 等国外 dns ,今天突然改成黑名单模式,少数域名用国外 dns ,剩下的腾讯系继续用 dnspod ,其他的都用 alidns 。结果发现打开很多国外网站特别慢,一看查询日志,原来 alidns 解析很多国外域名都是 1000ms+,这不慢才怪了,看来还是白名单模式更适合,虽然会存在部分错杀(部分国内域名由于用了默认的国外 dns 解析到了非最优的国内 ip 上)。

    第 1 条附言  ·  120 天前
    暂时解决办法:少数已知被和谐域名走国外 dns ,腾讯系域名走 dnspod ,已知国内域名走 alidns ,剩余域名走默认:阿里 dns 、dnspod 和国外 dns ,设置的并行请求,这样国内 dns 解析特别慢的域名会走国外 dns 解析。
    第 2 条附言  ·  117 天前
    mosdns 的确 yyds ,基本上能完全实现我的需求,由于本来就有分流域名和 IP 的名单,基本上做到了无缝转换
    49 条回复    2024-09-04 14:24:11 +08:00
    xiaomoxian
        1
    xiaomoxian  
       120 天前 via Android
    先过一遍饭炸系统
    JensenQian
        2
    JensenQian  
       120 天前
    哥们别折腾了
    国内直接走运营商的拉到了,国外走 8888 和 1111 ,完事
    Atomo
        3
    Atomo  
       120 天前   ❤️ 1
    听劝,国内统一走运营商,国外统一走 1111
    52acca
        4
    52acca  
    OP
       120 天前 via Android
    @JensenQian 关键问题是你如何能确定完整的国内域名名单?如果能有全名单,那我除国内域名外的其他域名走国外 dns 就简单了。而且运营商 dns 有个挺致命的问题,HTTPS 解析,也就是 type 65 要么没结果,要么就是错的,这算是我国内用 alidns 最大的原因吧,当然成都电信 alidns 的速度本来也就跟电信 dns 差不多,5ms 左右吧
    GeekGao
        5
    GeekGao  
       120 天前
    @52acca 如果你不是在经营机场,那么盲猜你访问的国内站点是非常有限的有限集,除非后缀为 GOV.CN / .CN 外大概不会超过 40 个 (日常访问 [国内站点不超过 10+ 个] ,每个站点有 3 个不同的 CDN 域,这么计算) 这个国内的站点列表,有相关的开源项目 https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/Clash/China
    52acca
        6
    52acca  
    OP
       120 天前
    @GeekGao 我是将 https://github.com/felixonmars/dnsmasq-china-list 项目中的所有中国域名用 alidns 解析的,但总会有一些漏网之鱼,而打开一个 app 或者网站的速度很多时候是由那个 app 或网站访问的所有域名解析+连接速度决定的,也就是短板效应,由于其中部分域名解析慢或者更可能是解析到了慢的 IP 上,就可能导致访问慢。
    52acca
        7
    52acca  
    OP
       120 天前
    @GeekGao 而且你不用 AdGuardHome 这种软件估计对自己一天的 dns 解析数量没太大概念,我也是用了之后才大吃一惊,我一个人在家的时候一天的解析量就有 5w 左右吧,这还是没开屏蔽的情况下,如果开了屏蔽会窜到将近 10W (有些 app 在得不到相应的情况下会重复请求)。虽然这其中绝大多数是重复的,但其中不重复的也有几百上千个域名吧,很多 app 和网站一打开就会请求两位数域名的。
    maxus
        8
    maxus  
       119 天前
    你为什么不用 adh 加 mosdns 方案,mosdns 国内外分流解析,还能缓存,国内外网页一般都秒开,我觉得很好用
    Terminl
        9
    Terminl  
       119 天前
    alidns 和 dnspod 开始限速了你居然不知道,现在只支持个人使用,家里设备一多请求速上来不卡才怪嘞。
    GeekGao
        10
    GeekGao  
       119 天前
    @52acca 没什么银弹,除非你在低延迟墙外地区(例如 HK )自己搭建 DoH 服务器,负面作用就是成本高。
    52acca
        11
    52acca  
    OP
       119 天前 via Android
    @Terminl 我当然知道要开始限速了,不过不是还没开始吗,而且我除了用公共的外,还都用了个人账户的,并不是这个原因,应该是国外域名在 alidns 和 dnspod 服务器上没缓存,导致访问缓慢
    lw4free
        12
    lw4free  
       119 天前
    我一般是 黑名单走国外 dns 其他走国内 dns 查询结果匹配国内 IP 不匹配的继续走国外 dns 国内 IP 是有限的 哪怕用的是 mmdb 数据库 我估计匹配准确率也超过 99.9% 遇上某些特殊的域名就单独处理 如果加上白名单只走国内 dns 就基本不会错了(我的 openswrt 内存不足 没搞白名单)
    yyysuo
        13
    yyysuo  
       119 天前
    1:Adguard Home 不要开屏蔽,没效果还能整疯一些 app
    2:国内域名国内 dns 解析,国外域名国外 dns 解析,不在列表中的域名,统一带 ecs (所在城市 IP )发到 8888 解析。
    3:阿里的 api ,已经有实现了: https://github.com/mili-tan/ArashiDNS.Aha
    52acca
        14
    52acca  
    OP
       119 天前 via Android
    @yyysuo 这跟我以前差不多吧,不过我是除了少数不需要 ecs 的国外域名用 cloudflare 和其它不支持 ecs 的国外 dns 解析,不在名单内的默认走国外支持 ecs 的 dns 。alidns 每月一千万额度,即使 doh 或者 dot 暂时也够用了,dnspod 每月三百万额度是真不够,只敢用来解析腾讯系域名,这样做 7 月份都还超了,额外付了费。只是这样存在一个问题我,就是不在国内名单中走了默认的国外支持 ecs 的域名被解析成国内 ip 但是非最优 ip 的情况不可避免,而解析成国外 ip 反倒不用担心,这部分会流入科学软件中做了进一步分流,先国内 dns 解析,如果不是国内 ip 会走不支持 ecs 的国外 dns 。
    52acca
        15
    52acca  
    OP
       119 天前 via Android
    @lw4free AdGuardHome 实现不了这个功能啊,不能根据解析结果再做判断。
    nonfxck
        16
    nonfxck  
       119 天前
    这个题目我知道,我周末刚用 mosdns ,体验效果非常好,比以前 smartdns 简单多了
    nonfxck
        17
    nonfxck  
       119 天前   ❤️ 1
    adguardhome 使用 53 替换 dnsmasq
    adguardhome 上游 dns 使用 openclash dns 端口
    openclash dns 设置上游仅保留 mosdns
    mosdns 配置腾讯阿里谷歌 CF dns
    yyysuo
        18
    yyysuo  
       119 天前
    @52acca 怎么区分一个域名是不是需要带 ecs 解析呢,另外像你标题中说的,国内的 dns 对小众域名的支持不好,解析也慢,准确度也不好说,我用 8888 带 ecs 解析,目前看来准确度很好,原来解析出中国 ip 还用国内 dns 再解析一次,现在干脆直接采用了。
    52acca
        19
    52acca  
    OP
       119 天前 via Android
    @yyysuo 少数已知被和谐或者我希望走代理的域名走不带 ecs 的国外 dns ,其他都走带 ecs 的。本来昨天替换成默认走国内 dns 是想减少这种国外 dns 因为 ecs 解析到国内非最优 ip 的情况,但偶然发现国内 dns 解析国外小众域名速度太慢的问题,所以又想改回去了。
    52acca
        20
    52acca  
    OP
       119 天前 via Android
    @nonfxck 这个思路貌似不错,我也研究一下 AdGuardHome 的上游使用 xray 的 dns 解析
    nonfxck
        21
    nonfxck  
       119 天前
    https://doh.apad.pro/dns-query 不在家在外面临时用下还可以用这个 doh ,做了自动分流
    mytsing520
        22
    mytsing520  
       119 天前
    阿里 DNS 的限频针对非热度域名,热度域名如 baidu.com 是不会有限频的,技术上做不到
    52acca
        23
    52acca  
    OP
       119 天前 via Android
    @mytsing520 但我访问这些冷门域名的频率也不高,不可能超过限制啊,而且不只是 dns.dlidns.com ,个人账户带前缀的解析也慢,应该主要还是服务器上没缓存的原因
    52acca
        24
    52acca  
    OP
       119 天前 via Android
    @nonfxck 我有公网 ip ,在外也可以用家里面的 AdGuardHome
    2000wcw
        25
    2000wcw  
       119 天前
    你觉得 GFW 是吃素的?访问国外域名先来个全身大检查.....
    52acca
        26
    52acca  
    OP
       119 天前 via Android
    @2000wcw 以前是真没想到国内 dns 解析国外域名比直接从国外 dns 解析还慢的,访问多外 dns 多出那几十上百 ms 跟国内 dns 解析慢的上千 ms 比起来真不算啥
    Jinnrry
        27
    Jinnrry  
       119 天前
    mosdns +1 体验太好了
    Andim
        28
    Andim  
       119 天前
    用了几年的 dnscrypt-proxy 解析外网,速度还可以,不过 dnscrypt-proxy 默认包含了阿里,奇虎,腾讯,要把这些屏蔽了

    jackOff
        29
    jackOff  
       119 天前
    adguardhome1:劫持全局 dns ,上游整个分流容器 1
    adguardhome2:局部 dns ,比如给 openclash 调用,上游整个分流器 2
    adguardhome3:国内上游查询,阿里百度。是分流器 1 和 2 的国内 dns 查询
    adguardhome4:国外上游查询,8888,1111 ,是分流器 2 的国外 dns 查询
    分流器 1 的国外 dns 查询接 openclash 的 dns 端口
    maxus
        30
    maxus  
       119 天前 via iPhone
    mosdns 上游国内外分流
    AdGuardhome 上游 moddns
    passwall 上游 AdGuardhome
    yyws2012
        31
    yyws2012  
       119 天前 via Android
    v2ray/xray 有一个功能是根据返回 ip 判断取这个结果或者往后 fallback 。我现在的策略是,先域名列表 cn 直接用国内,然后都走国外,如果解析出的 ip 是国内的再回落到国内。这样只会有两种情况回落不生效:一是 geoip 不全,这个找 chinamax 库的应该不多见;二是在海外有服务器,这种直接走代理就完事。可以试试用这个做 adguard 的上游。
    Nyarime
        32
    Nyarime  
       119 天前
    可以用这两个,实测无污染
    162.14.21.178
    162.14.21.56
    lw4free
        33
    lw4free  
       119 天前
    @52acca 我用的是 routedns 用 mosdns 也行 不能判断的话很难实现 dns 完美分流
    52acca
        34
    52acca  
    OP
       119 天前 via Android
    @yyws2012 你这样还是会有个问题,有些有国内 ip 的域名会被国外 DNS 解析成国外 ip 而不会回落
    52acca
        35
    52acca  
    OP
       119 天前 via Android
    @lw4free AdGuardHome 没有根据解析结果判断后进一步处理的功能,的确很难做到完美分流
    52acca
        36
    52acca  
    OP
       119 天前 via Android
    @Andim dnscrypt-proxy 也用过一段时间,功能其实跟 AdGuardHome 差不多,都只能通过 upstream 文件指定哪些域名走哪些 dns ,但相比于 AdGuardHome 不支持 dot
    52acca
        37
    52acca  
    OP
       119 天前 via Android
    @jackOff 你这比我之前的还复杂,我以前是两台机器上分别运行了两个 AdGuardHome (一个全局,一个作为国内域名的上游),然后是软路由上的 dnsmasq 分别同时查询这两台机器
    jackOff
        38
    jackOff  
       119 天前
    @52acca 这个方案在于可以一个机器解决 dns 泄露的问题,也不会造成国内网络卡顿。尤其是 adguardhome 的设计很轻量,多部署几个也没有什么负担
    52acca
        39
    52acca  
    OP
       119 天前
    @maxus 没研究过 mosdns ,但既然 mosdns 都已经分流了,还套 AdGuardHome 干啥呢?
    52acca
        40
    52acca  
    OP
       119 天前
    @jackOff AdGuardHome 不算轻量啊,软路由多跑几个没问题,但硬路由的内存就很捉急了。套多了还有个问题,其中某一环出了问题可能全都挂了。所以自从 AdGuardHome 支持在 upstream 文件中在一串域名后列出多个 dns 后我就改成一层了,同时在软路由和一台 debian 虚拟机上都运行了 AdGuardHome 来做负载均衡。
    crysislinux
        41
    crysislinux  
       119 天前 via Android
    规则还是简单点好。国内域名就走运营商 dns ,剩下的全部 ecs 走 Google dns 。Google 的 ecs 还是比较准的,要是实在不放心就再判断下 ip ,国内 IP 再走一遍运营商的 dns
    52acca
        42
    52acca  
    OP
       119 天前
    @yyws2012 刚才摸索了一下,并没有找到适合将 xray 用作上游 dns 的入站连接方式,Dokodemo-Door 不返回数据,你有这么操作吗?
    maxus
        43
    maxus  
       119 天前
    @52acca agh 屏蔽广告,还能看访问了什么网站,通过 agh ,发现有个 docker 异常自动访问一些网站
    Jack927
        44
    Jack927  
       119 天前
    > 本来用的 AdGuardHome 白名单模式分流国内外域名,腾讯系域名用的 dnspod ,国内其他域名用的 alidns ,其他域名用的 quad9 、cloudflare 、opendns 等国外 dns ,今天突然改成黑名单模式,少数域名用国外 dns ,剩下的腾讯系继续用 dnspod ,其他的都用 alidns

    ---

    刚用 AdGuardHome 的新手求问,目前只用上了它自带的屏蔽功能。请问下这个怎么配的? 能简单说下,或者贴下文档地址吗?
    Jack927
        46
    Jack927  
       118 天前
    #45 @52acca 感谢
    anytk
        47
    anytk  
       118 天前
    mosdns+++ 用了真的比以前丝滑
    52acca
        48
    52acca  
    OP
       117 天前 via Android
    @anytk 确实是好东西
    52acca
        49
    52acca  
    OP
       117 天前 via Android
    @maxus 用上 mosdns 后还真是秒开了,mosdns yyds !
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2286 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.