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

94 天前
 peasant

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

5077 次点击
所在节点    DNS
26 条回复
sky92682
94 天前
国外 Google 的 DNS 和 IBM 的 9.9.9.11 支持 ECS 且比较好用。另外百度确实是个问题,我的应对方法是针对百度的域名指定上游:
[/*.baidu.com/]114.114.114.114
sky92682
94 天前
补充一下我的配置(用的负载均衡模式):

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

回复一下 OP 在主题中的最后的问题。我只使用自建 DoH ,配合 Shadowrocket 使用,Mac+iOS 都能用。所有解析都用自己 DoH 了,可能延时比较高但我能忍受。
HenryHe613
94 天前
还有现在我还有一台 Claw 的 8 刀机,晚高峰能跑 600Mbps/500Mbps (浙江电信千兆对等测速)。延迟也不高做 DoH 挺好的。我也研究研究
MacsedProtoss
94 天前
我实在是不理解自建境外 doh 的目标是啥🤔
使用境外 doh 的话境内网站的 dns 可能会出问题
唯一能想到的就是解析出不受污染的 DNS 结果之后按照 geoip 分流?
从代理的角度来说 很多时候细节的分流还是依赖域名的 没办法仅用 IP 来做吧
如果只是想要使用 doh 来防止传统 dns 的劫持和泄漏的话 应该是所有已知要代理的那些域名都走你的代理节点来完成全部的解析与访问流程 客户端此时表现即 fakeip 模式 同时对于非规则内的域名均采用境内公开 doh 即可
whjlinyi
94 天前
nextdns 对 edns 支持不错 用两年多了
whjlinyi
94 天前
我国内外只用这个 感觉还行
sky92682
94 天前
@peasant 白名单可以以客户端名称来设置 不需要固定 IP 。在“设置→DNS 设置→访问设置里面”,设置一下允许的客户端,假如为 xxxx ,这样就只能用 https://xx.xx.com/dns-query/xxxx 这样的格式来解析。
peasant
94 天前
@MacsedProtoss 在境外使用 EDNS 就是为了解决境内网站 CDN 的问题,这样境内只需要设置使用自建的 DoH 就可以获得无污染并且支持境内 CDN 的解析结果,完全不需要乱七八糟的分流什么的,当然梯子还是得挂的。
baraja
94 天前
看我的帖子,总结了适合作为 agh 上游的 ecd dns
/t/1086059
peasant
94 天前
@sky92682 原来如此,居然还可以设置客户端 ID ,学到了,感谢
totoro625
94 天前
直接用的境内 vps 做的 doh ,套了境内 cdn
通过代理访问境外 doh ,感觉还不错
BanShe
94 天前
@whjlinyi 最近两天 nextdns->Recv failure: Connection was reset
jcfkccp
94 天前
@sky92682 但是/dns-query 路径事实上也还是能被扫到吧(返回的不是 404 )
olive1223
93 天前
我写下我的方案,mosdns 分流到 smartdns 国内和外服务器
smartdns 国内使用阿里腾讯 360 dot doh ,开启测速;国外使用代理访问 vps 上自建的 dns 。
sky92682
93 天前
@jcfkccp 会返回“Bad Request”。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1116284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX