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

国外 Google 的 DNS 和 IBM 的 9.9.9.11 支持 ECS 且比较好用。另外百度确实是个问题,我的应对方法是针对百度的域名指定上游:
[/*.baidu.com/]114.114.114.114

补充一下我的配置(用的负载均衡模式):

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
2001:4860:4860::8888/dns-query
2001:4860:4860::8844/dns-query
8.8.8.8/dns-query
8.8.4.4/dns-query
9.9.9.11/dns-query
149.112.112.11/dns-query
2620:fe::11/dns-query
2620:fe::fe:11/dns-query
[/*.baidu.com/]114.114.114.114

另外再补充一点:adguardhome 里面设置一下客户端白名单,使用指定的路径查询,例如“/dns-query/hello”,不要直接使用默认的/dns-query 后缀,否则遇到扫描可能会导致域名被墙。

动态 IP 不太好设置白名单,不过我用 nginx 反向代理改了查询路径,应该没啥问题

不是你这么用的,要找个香港轻量鸡,尽量便宜你访问延迟低的,然后上面装个 Adguardhome ,开 DOH ,之后不用我说了吧,这个 Adguardhome 的上游配 1111 1001 ,如果喜欢用 gg 的,记得关掉 edns

我刚刚搜了一下 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  223.5.5.5/dns-query -group domestic
server  223.6.6.6/dns-query -group domestic
server  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  dns.google/dns-query -group oversea -proxy socks5
server  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

为什么不能发 CodeBox ,markdown 失效了吗?
回复一下 OP 在主题中的最后的问题。我只使用自建 DoH ,配合 Shadowrocket 使用,Mac+iOS 都能用。所有解析都用自己 DoH 了,可能延时比较高但我能忍受。

还有现在我还有一台 Claw 的 8 刀机,晚高峰能跑 600Mbps/500Mbps (浙江电信千兆对等测速)。延迟也不高做 DoH 挺好的。我也研究研究

我实在是不理解自建境外 doh 的目标是啥🤔
使用境外 doh 的话境内网站的 dns 可能会出问题
唯一能想到的就是解析出不受污染的 DNS 结果之后按照 geoip 分流?
从代理的角度来说 很多时候细节的分流还是依赖域名的 没办法仅用 IP 来做吧
如果只是想要使用 doh 来防止传统 dns 的劫持和泄漏的话 应该是所有已知要代理的那些域名都走你的代理节点来完成全部的解析与访问流程 客户端此时表现即 fakeip 模式 同时对于非规则内的域名均采用境内公开 doh 即可

nextdns 对 edns 支持不错 用两年多了

我国内外只用这个 感觉还行

白名单可以以客户端名称来设置 不需要固定 IP 。在“设置→DNS 设置→访问设置里面”,设置一下允许的客户端,假如为 xxxx ,这样就只能用 xx.xx.com/dns-query/xxxx 这样的格式来解析。

在境外使用 EDNS 就是为了解决境内网站 CDN 的问题,这样境内只需要设置使用自建的 DoH 就可以获得无污染并且支持境内 CDN 的解析结果,完全不需要乱七八糟的分流什么的,当然梯子还是得挂的。

看我的帖子,总结了适合作为 agh 上游的 ecd dns
/t/1086059

原来如此,居然还可以设置客户端 ID ,学到了,感谢

直接用的境内 vps 做的 doh ,套了境内 cdn
通过代理访问境外 doh ,感觉还不错

最近两天 nextdns->Recv failure: Connection was reset

但是/dns-query 路径事实上也还是能被扫到吧(返回的不是 404 )

我写下我的方案,mosdns 分流到 smartdns 国内和外服务器
smartdns 国内使用阿里腾讯 360 dot doh ,开启测速;国外使用代理访问 vps 上自建的 dns 。

会返回“Bad Request”。

我一直在找 AdGuardHome 主备记录同步的方案。

你都弄错了
1 、你的梯子在那里(指地点:国家城市区)
2 、找出梯子的 IP ,在 adguardhome 里,把梯子的 IP 输入 edns 的手动输入 IP 栏
或者
如果你不是用机场是自建的 vps ,直接就用 clash 的 fake-ip ,然后本机只设置 nameserver 为 223.5.5.5 和 119.29.29.29