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

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

  •  
  •   peasant · 9 小时 54 分钟前 · 1731 次点击

    开了一台境外的 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 服务器推荐吗?

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

    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  
       9 小时 26 分钟前
    另外再补充一点:adguardhome 里面设置一下客户端白名单,使用指定的路径查询,例如“/dns-query/hello”,不要直接使用默认的/dns-query 后缀,否则遇到扫描可能会导致域名被墙。
    peasant
        4
    peasant  
    OP
       9 小时 9 分钟前
    @sky92682 动态 IP 不太好设置白名单,不过我用 nginx 反向代理改了查询路径,应该没啥问题
    billytom
        5
    billytom  
       8 小时 58 分钟前
    不是你这么用的,要找个香港轻量鸡,尽量便宜你访问延迟低的,然后上面装个 Adguardhome ,开 DOH ,之后不用我说了吧,这个 Adguardhome 的上游配 1111 1001 ,如果喜欢用 gg 的,记得关掉 edns
    HenryHe613
        6
    HenryHe613  
       8 小时 45 分钟前
    我刚刚搜了一下 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  
       8 小时 41 分钟前
    @HenryHe613 为什么不能发 CodeBox ,markdown 失效了吗?

    回复一下 OP 在主题中的最后的问题。我只使用自建 DoH ,配合 Shadowrocket 使用,Mac+iOS 都能用。所有解析都用自己 DoH 了,可能延时比较高但我能忍受。
    HenryHe613
        8
    HenryHe613  
       8 小时 39 分钟前
    还有现在我还有一台 Claw 的 8 刀机,晚高峰能跑 600Mbps/500Mbps (浙江电信千兆对等测速)。延迟也不高做 DoH 挺好的。我也研究研究
    MacsedProtoss
        9
    MacsedProtoss  
       8 小时 15 分钟前 via iPhone
    我实在是不理解自建境外 doh 的目标是啥🤔
    使用境外 doh 的话境内网站的 dns 可能会出问题
    唯一能想到的就是解析出不受污染的 DNS 结果之后按照 geoip 分流?
    从代理的角度来说 很多时候细节的分流还是依赖域名的 没办法仅用 IP 来做吧
    如果只是想要使用 doh 来防止传统 dns 的劫持和泄漏的话 应该是所有已知要代理的那些域名都走你的代理节点来完成全部的解析与访问流程 客户端此时表现即 fakeip 模式 同时对于非规则内的域名均采用境内公开 doh 即可
    whjlinyi
        10
    whjlinyi  
       8 小时 10 分钟前 via iPhone
    nextdns 对 edns 支持不错 用两年多了
    whjlinyi
        11
    whjlinyi  
       8 小时 9 分钟前 via iPhone
    我国内外只用这个 感觉还行
    sky92682
        12
    sky92682  
       8 小时 8 分钟前   ❤️ 1
    @peasant 白名单可以以客户端名称来设置 不需要固定 IP 。在“设置→DNS 设置→访问设置里面”,设置一下允许的客户端,假如为 xxxx ,这样就只能用 https://xx.xx.com/dns-query/xxxx 这样的格式来解析。
    peasant
        13
    peasant  
    OP
       7 小时 55 分钟前
    @MacsedProtoss 在境外使用 EDNS 就是为了解决境内网站 CDN 的问题,这样境内只需要设置使用自建的 DoH 就可以获得无污染并且支持境内 CDN 的解析结果,完全不需要乱七八糟的分流什么的,当然梯子还是得挂的。
    baraja
        14
    baraja  
       7 小时 36 分钟前   ❤️ 1
    看我的帖子,总结了适合作为 agh 上游的 ecd dns
    /t/1086059
    peasant
        15
    peasant  
    OP
       7 小时 36 分钟前
    @sky92682 原来如此,居然还可以设置客户端 ID ,学到了,感谢
    totoro625
        16
    totoro625  
       7 小时 31 分钟前
    直接用的境内 vps 做的 doh ,套了境内 cdn
    通过代理访问境外 doh ,感觉还不错
    BanShe
        17
    BanShe  
       6 小时 5 分钟前
    @whjlinyi 最近两天 nextdns->Recv failure: Connection was reset
    jcfkccp
        18
    jcfkccp  
       4 小时 1 分钟前
    @sky92682 但是/dns-query 路径事实上也还是能被扫到吧(返回的不是 404 )
    olive1223
        19
    olive1223  
       2 小时 24 分钟前
    我写下我的方案,mosdns 分流到 smartdns 国内和外服务器
    smartdns 国内使用阿里腾讯 360 dot doh ,开启测速;国外使用代理访问 vps 上自建的 dns 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3198 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:48 · PVG 20:48 · LAX 04:48 · JFK 07:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.