开了一台境外的 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 服务器推荐吗?
经过一段时间的尝试,境内直接使用境外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,方便在不同地区不同设备上使用。
![]() |
1
sky92682 42 天前
国外 Google 的 DNS 和 IBM 的 9.9.9.11 支持 ECS 且比较好用。另外百度确实是个问题,我的应对方法是针对百度的域名指定上游:
[/*.baidu.com/]114.114.114.114 |
![]() |
2
sky92682 42 天前 ![]() 补充一下我的配置(用的负载均衡模式):
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 |
![]() |
3
sky92682 42 天前
另外再补充一点:adguardhome 里面设置一下客户端白名单,使用指定的路径查询,例如“/dns-query/hello”,不要直接使用默认的/dns-query 后缀,否则遇到扫描可能会导致域名被墙。
|
![]() |
5
billytom 42 天前
不是你这么用的,要找个香港轻量鸡,尽量便宜你访问延迟低的,然后上面装个 Adguardhome ,开 DOH ,之后不用我说了吧,这个 Adguardhome 的上游配 1111 1001 ,如果喜欢用 gg 的,记得关掉 edns
|
![]() |
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 ``` |
![]() |
7
HenryHe613 42 天前
@HenryHe613 为什么不能发 CodeBox ,markdown 失效了吗?
![]() 回复一下 OP 在主题中的最后的问题。我只使用自建 DoH ,配合 Shadowrocket 使用,Mac+iOS 都能用。所有解析都用自己 DoH 了,可能延时比较高但我能忍受。 |
![]() |
8
HenryHe613 42 天前
还有现在我还有一台 Claw 的 8 刀机,晚高峰能跑 600Mbps/500Mbps (浙江电信千兆对等测速)。延迟也不高做 DoH 挺好的。我也研究研究
|
9
MacsedProtoss 42 天前 via iPhone
我实在是不理解自建境外 doh 的目标是啥🤔
使用境外 doh 的话境内网站的 dns 可能会出问题 唯一能想到的就是解析出不受污染的 DNS 结果之后按照 geoip 分流? 从代理的角度来说 很多时候细节的分流还是依赖域名的 没办法仅用 IP 来做吧 如果只是想要使用 doh 来防止传统 dns 的劫持和泄漏的话 应该是所有已知要代理的那些域名都走你的代理节点来完成全部的解析与访问流程 客户端此时表现即 fakeip 模式 同时对于非规则内的域名均采用境内公开 doh 即可 |
10
whjlinyi 42 天前 via iPhone
nextdns 对 edns 支持不错 用两年多了
|
11
whjlinyi 42 天前 via iPhone
我国内外只用这个 感觉还行
|
![]() |
12
sky92682 42 天前 ![]() @peasant 白名单可以以客户端名称来设置 不需要固定 IP 。在“设置→DNS 设置→访问设置里面”,设置一下允许的客户端,假如为 xxxx ,这样就只能用 https://xx.xx.com/dns-query/xxxx 这样的格式来解析。
|
![]() |
13
peasant OP @MacsedProtoss 在境外使用 EDNS 就是为了解决境内网站 CDN 的问题,这样境内只需要设置使用自建的 DoH 就可以获得无污染并且支持境内 CDN 的解析结果,完全不需要乱七八糟的分流什么的,当然梯子还是得挂的。
|
![]() |
14
baraja 42 天前 ![]() 看我的帖子,总结了适合作为 agh 上游的 ecd dns
/t/1086059 |
![]() |
16
totoro625 42 天前
直接用的境内 vps 做的 doh ,套了境内 cdn
通过代理访问境外 doh ,感觉还不错 |
19
olive1223 42 天前
我写下我的方案,mosdns 分流到 smartdns 国内和外服务器
smartdns 国内使用阿里腾讯 360 dot doh ,开启测速;国外使用代理访问 vps 上自建的 dns 。 |
![]() |
21
Joming 41 天前
我一直在找 AdGuardHome 主备记录同步的方案。
|
![]() |
22
billytom 41 天前
你都弄错了
1 、你的梯子在那里(指地点:国家城市区) 2 、找出梯子的 IP ,在 adguardhome 里,把梯子的 IP 输入 edns 的手动输入 IP 栏 或者 如果你不是用机场是自建的 vps ,直接就用 clash 的 fake-ip ,然后本机只设置 nameserver 为 223.5.5.5 和 119.29.29.29 |
23
popzuk 40 天前
adgh 可以设置分流文件,可以把 cn 规则集域名分流给阿里和腾讯。但是怎么弄都是有可能遇到 edns 解析返回不正确的 IP 。最终解决方法是,如果你设备会一直开着代理软件,不如直接使用代理软件的 dns 分流功能。mihomo/ray/sb 这些内核是支持 dns 规则集分流的,iOS 设备 surge/egern 也支持,你将 cn 规则集 dns 分流给系统或其他 dns ,默认 dns 设置为你自建的 dns 。
|
![]() |
24
Sekai 40 天前
不用那么麻烦,境外鸡装个 adguard ,家里 openwrt 装个 mosdns 插件做域名分流,完事儿。。
|
25
buchiluobo 39 天前
@billytom 为什么用 g 歌要关掉 edns 呢?
|
![]() |
26
billytom 39 天前
因为 8888 和 208.67.222.222 支持 edns(1111 不支持),如果你在广东,用香港的梯子这样勉强也行,但如果你在广东用日本或者美国的梯子,自己想想为什么... 举个例子,美国的梯子访问 youtube 给你返回香港的 cdn
|