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

看大家讨论境外 DoH 被屏蔽挺热闹的,尝试自建但是遇到了问题,希望解惑

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

    开了一台境外的 VPS ,安装了 AdGuardHome ,启用了 EDNS ,但是选择上游 DNS 的时候遇到了点问题。

    网上找了所谓境外支持 ECS 的 DNS 服务器列表,实际使用体验不是很好,有些说是支持,实际不支持,有些你说支持吧,但是传了 subnet 得到结果到处乱跑。

    最后试了阿里的 DNS 在境外也挺好用,传了 subnet 能解析出来国内的 IP ,但是早上遇到了 apple 的域名响应 SERVFAIL ,也不能鸡蛋全放一个篮子里,还是得加上别的。

    Google 的 DNS 也支持 ECS ,但是我测试的时候使用百度的域名踩到坑了,一会儿返回国内的,一会儿返回国外的。

    国内 IP
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ; CLIENT-SUBNET: 58.40.75.0/24/24
    ;; QUESTION SECTION:
    ;www.baidu.com.			IN	A
    
    ;; ANSWER SECTION:
    www.baidu.com.		115	IN	CNAME	www.a.shifen.com.
    www.a.shifen.com.	115	IN	A	180.101.49.44
    www.a.shifen.com.	115	IN	A	180.101.51.73
    

    下面是返回了国外的 IP ,可以看到 CLIENT-SUBNET: 从 58.40.75.0/24/24 变成了 58.40.75.0/24/0

    国外 IP
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ; CLIENT-SUBNET: 58.40.75.0/24/0
    ;; QUESTION SECTION:
    ;www.baidu.com.			IN	A
    
    ;; ANSWER SECTION:
    www.baidu.com.		1057	IN	CNAME	www.a.shifen.com.
    www.a.shifen.com.	4	IN	CNAME	www.wshifen.com.
    www.wshifen.com.	282	IN	A	119.63.197.139
    www.wshifen.com.	282	IN	A	119.63.197.151
    

    而且解析结果有两条 CNAME ,但是把 www.a.shifen.com 单独拿出来携带 subnet 是查询不到 www.wshifen.com 这条记录的。

    不知道 Google 的 DNS 还有没有别的坑,大家自建的 DoH 有用来在国内日常使用吗?还是只用来解析国外的域名? 还有什么对 ECS 支持良好的 DNS 服务器推荐吗?

    第 1 条附言  ·  34 天前

    经过一段时间的尝试,境内直接使用境外DoH避免DNS泄露并返回无污染解析结果的最佳方式是自建支持EDNS的递归服务器,然后搭配AdGuardHome的客户端白名单机制以及指定上游DNS功能。

    递归服务器与AdGuardHome最好都关闭缓存功能,第三方公共DNS就算支持EDNS也不太靠谱,另外apple的域名对EDNS支持的很让人迷惑,国外的IP传国内的子网无效,这个特性在多个公共DNS上表现一致,但是223.5.5.5例外,可以指定apple的域名使用阿里的DNS,其余域名使用自建的递归服务器即可。

    另外建议在本地的AdGuardHome里为whoami.akamai.net指定运营商的DNS,因为国内某些软件会通过解析这个域名获取DNS服务器出口的IP。

    目前在家中路由器、公司电脑、手机网络,外地朋友的网络等几个不同运营商的网络里同时使用在境外自建的DoH,体验良好。

    再强调一遍,本人使用自建DoH与梯子无关,跟分流也没有关系,纯粹就是想要一个无污染并且对CDN友好的DNS,方便在不同地区不同设备上使用。

    26 条回复    2025-03-09 02:57:51 +08:00
    sky92682
        1
    sky92682  
       42 天前
    国外 Google 的 DNS 和 IBM 的 9.9.9.11 支持 ECS 且比较好用。另外百度确实是个问题,我的应对方法是针对百度的域名指定上游:
    [/*.baidu.com/]114.114.114.114
    sky92682
        2
    sky92682  
       42 天前   ❤️ 2
    补充一下我的配置(用的负载均衡模式):

    tls://2001:4860:4860::8888
    tls://2001:4860:4860::8844
    tls://8.8.8.8
    tls://8.8.4.4
    tls://9.9.9.11
    tls://149.112.112.11
    tls://2620:fe::11
    tls://2620:fe::fe:11
    https://2001:4860:4860::8888/dns-query
    https://2001:4860:4860::8844/dns-query
    https://8.8.8.8/dns-query
    https://8.8.4.4/dns-query
    https://9.9.9.11/dns-query
    https://149.112.112.11/dns-query
    https://2620:fe::11/dns-query
    https://2620:fe::fe:11/dns-query
    [/*.baidu.com/]114.114.114.114
    sky92682
        3
    sky92682  
       42 天前
    另外再补充一点:adguardhome 里面设置一下客户端白名单,使用指定的路径查询,例如“/dns-query/hello”,不要直接使用默认的/dns-query 后缀,否则遇到扫描可能会导致域名被墙。
    peasant
        4
    peasant  
    OP
       42 天前
    @sky92682 动态 IP 不太好设置白名单,不过我用 nginx 反向代理改了查询路径,应该没啥问题
    billytom
        5
    billytom  
       42 天前
    不是你这么用的,要找个香港轻量鸡,尽量便宜你访问延迟低的,然后上面装个 Adguardhome ,开 DOH ,之后不用我说了吧,这个 Adguardhome 的上游配 1111 1001 ,如果喜欢用 gg 的,记得关掉 edns
    HenryHe613
        6
    HenryHe613  
       42 天前
    我刚刚搜了一下 EDNS ,看起来(因为我还没用过)非常好用。

    我个人是通过在阿里云上用 SmartDNS 自建 DoH ( path 用 Nginx 改为自定义的),国外域名通过 xray+socks 送到 US 去查询(延迟非常高),国内域名通过阿里 DoH 查询,但是依然会出现 DNS 解析绕路的情况。看来 EDNS 是一个非常好的解决方案。

    附上我的 SmartDNS 配置:

    ```
    # 监听 53 端口
    bind :53
    bind-tcp :53
    bind-https :444

    # --- Domestic 域名 ---
    # 定义 domestic 域名集
    domain-set -name domestic_domainlist -file /etc/smartdns/domestic.txt

    # 国内 DNS 服务器组
    server https://223.5.5.5/dns-query -group domestic
    server https://223.6.6.6/dns-query -group domestic
    server https://dns.pub/dns-query -group domestic

    # 匹配 domestic 域名集中的域名
    domain-rules /domain-set:domestic_domainlist/ -nameserver domestic -speed-check-mode ping

    # --- Oversea 域名 ---
    # 代理服务器,用于 oversea 解析
    proxy-server socks5://127.0.0.1:1082 -name socks5

    # Oversea DNS 服务器组(通过代理)
    server https://dns.google/dns-query -group oversea -proxy socks5
    server https://dns.cloudflare.com/dns-query -group oversea -proxy socks5

    # 未匹配到的域名使用 oversea 服务器解析
    domain-rules /./ -nameserver oversea

    # 日志(系统+审计)
    log-level info
    log-size 50m
    log-file /etc/smartdns/smartdns.log
    log-num 3
    audit-enable yes
    audit-file /etc/smartdns/smartdns-audit.log
    audit-size 50m
    audit-num 2

    # 缓存配置
    cache-size 65536
    cache-persist yes
    prefetch-domain yes
    cache-file /etc/smartdns/smartdns.cache

    # 开启过期缓存服务功能
    serve-expired yes

    # 设定过期缓存服务最长超时时间(秒)
    serve-expired-ttl 3

    # 设定回应的过期缓存 TTL (秒)
    serve-expired-reply-ttl 5

    # 禁用 IPV6
    force-AAAA-SOA yes

    # 强制指定 qtyp 返回 SOA
    force-qtype-SOA 65
    ```
    HenryHe613
        7
    HenryHe613  
       42 天前
    @HenryHe613 为什么不能发 CodeBox ,markdown 失效了吗?

    回复一下 OP 在主题中的最后的问题。我只使用自建 DoH ,配合 Shadowrocket 使用,Mac+iOS 都能用。所有解析都用自己 DoH 了,可能延时比较高但我能忍受。
    HenryHe613
        8
    HenryHe613  
       42 天前
    还有现在我还有一台 Claw 的 8 刀机,晚高峰能跑 600Mbps/500Mbps (浙江电信千兆对等测速)。延迟也不高做 DoH 挺好的。我也研究研究
    MacsedProtoss
        9
    MacsedProtoss  
       42 天前 via iPhone
    我实在是不理解自建境外 doh 的目标是啥🤔
    使用境外 doh 的话境内网站的 dns 可能会出问题
    唯一能想到的就是解析出不受污染的 DNS 结果之后按照 geoip 分流?
    从代理的角度来说 很多时候细节的分流还是依赖域名的 没办法仅用 IP 来做吧
    如果只是想要使用 doh 来防止传统 dns 的劫持和泄漏的话 应该是所有已知要代理的那些域名都走你的代理节点来完成全部的解析与访问流程 客户端此时表现即 fakeip 模式 同时对于非规则内的域名均采用境内公开 doh 即可
    whjlinyi
        10
    whjlinyi  
       42 天前 via iPhone
    nextdns 对 edns 支持不错 用两年多了
    whjlinyi
        11
    whjlinyi  
       42 天前 via iPhone
    我国内外只用这个 感觉还行
    sky92682
        12
    sky92682  
       42 天前   ❤️ 1
    @peasant 白名单可以以客户端名称来设置 不需要固定 IP 。在“设置→DNS 设置→访问设置里面”,设置一下允许的客户端,假如为 xxxx ,这样就只能用 https://xx.xx.com/dns-query/xxxx 这样的格式来解析。
    peasant
        13
    peasant  
    OP
       42 天前
    @MacsedProtoss 在境外使用 EDNS 就是为了解决境内网站 CDN 的问题,这样境内只需要设置使用自建的 DoH 就可以获得无污染并且支持境内 CDN 的解析结果,完全不需要乱七八糟的分流什么的,当然梯子还是得挂的。
    baraja
        14
    baraja  
       42 天前   ❤️ 1
    看我的帖子,总结了适合作为 agh 上游的 ecd dns
    /t/1086059
    peasant
        15
    peasant  
    OP
       42 天前
    @sky92682 原来如此,居然还可以设置客户端 ID ,学到了,感谢
    totoro625
        16
    totoro625  
       42 天前
    直接用的境内 vps 做的 doh ,套了境内 cdn
    通过代理访问境外 doh ,感觉还不错
    BanShe
        17
    BanShe  
       42 天前
    @whjlinyi 最近两天 nextdns->Recv failure: Connection was reset
    jcfkccp
        18
    jcfkccp  
       42 天前
    @sky92682 但是/dns-query 路径事实上也还是能被扫到吧(返回的不是 404 )
    olive1223
        19
    olive1223  
       42 天前
    我写下我的方案,mosdns 分流到 smartdns 国内和外服务器
    smartdns 国内使用阿里腾讯 360 dot doh ,开启测速;国外使用代理访问 vps 上自建的 dns 。
    sky92682
        20
    sky92682  
       41 天前
    @jcfkccp 会返回“Bad Request”。
    Joming
        21
    Joming  
       41 天前
    我一直在找 AdGuardHome 主备记录同步的方案。
    billytom
        22
    billytom  
       41 天前
    你都弄错了
    1 、你的梯子在那里(指地点:国家城市区)
    2 、找出梯子的 IP ,在 adguardhome 里,把梯子的 IP 输入 edns 的手动输入 IP 栏
    或者
    如果你不是用机场是自建的 vps ,直接就用 clash 的 fake-ip ,然后本机只设置 nameserver 为 223.5.5.5 和 119.29.29.29
    popzuk
        23
    popzuk  
       40 天前
    adgh 可以设置分流文件,可以把 cn 规则集域名分流给阿里和腾讯。但是怎么弄都是有可能遇到 edns 解析返回不正确的 IP 。最终解决方法是,如果你设备会一直开着代理软件,不如直接使用代理软件的 dns 分流功能。mihomo/ray/sb 这些内核是支持 dns 规则集分流的,iOS 设备 surge/egern 也支持,你将 cn 规则集 dns 分流给系统或其他 dns ,默认 dns 设置为你自建的 dns 。
    Sekai
        24
    Sekai  
       40 天前
    不用那么麻烦,境外鸡装个 adguard ,家里 openwrt 装个 mosdns 插件做域名分流,完事儿。。
    buchiluobo
        25
    buchiluobo  
       39 天前
    @billytom 为什么用 g 歌要关掉 edns 呢?
    billytom
        26
    billytom  
       39 天前
    因为 8888 和 208.67.222.222 支持 edns(1111 不支持),如果你在广东,用香港的梯子这样勉强也行,但如果你在广东用日本或者美国的梯子,自己想想为什么... 举个例子,美国的梯子访问 youtube 给你返回香港的 cdn
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3240 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:23 · PVG 19:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.