用吃灰的树莓派建了一个自动 DNS

2018-06-05 21:34:14 +08:00
 adrianzhang
0 ) 你懂得
1 ) 使用普通 DNS 软件,bind 和 unbound,无其他 xxdns。
2 ) 无需人工参与编辑列表。
3 ) 良好使用 CDN

需要的前提条件:有个自动的路由器。

原本这里写了教程,点击“创建”后收到提示:抱歉,能不能不要在这里讨论这个。
好吧,那就不发了。有需要的发邮件吧。
14437 次点击
所在节点    DNS
70 条回复
echopan
2018-06-06 15:33:33 +08:00
angelfreedomv@gmail.com 谢谢
jinhan13789991
2018-06-06 15:43:34 +08:00
chinaDns 了解一下,配合 Docker 启动 ,爽歪歪
artandlol
2018-06-06 16:00:25 +08:00
@adrianzhang 看来你是没有使用过
adrianzhang
2018-06-06 16:44:54 +08:00
@yaoguaishou
@mrzx
@echopan
请看本文附言
adrianzhang
2018-06-06 16:49:34 +08:00
@artandlol 看来你有经验,那请解释 dnscrypt-proxy 在解析拥有国内外地址的网站时候,怎么给你最近的地址?
rio
2018-06-06 16:49:52 +08:00
直接用 unbound 不就好了,为啥还需要 bind?
adrianzhang
2018-06-06 17:01:20 +08:00
@rio 一堆人就你回复的这个还靠谱,确实是只用 unbound 就可以的。只不过用它充当 reverse+cache,配置文件跟我 po 出来的有不同。起初用 bind,是因为实现 reverse 非常简单,但是 cache ttl 又是个麻烦,所以增加了一个 unbound。
rio
2018-06-06 17:23:06 +08:00
@adrianzhang 感谢!其实 unbound 直接可以 recursive + cache + ttl 调整,没必要再套 bind。可以考虑精简改进下 :)
rio
2018-06-06 17:25:58 +08:00
@adrianzhang 另外我看你的 unbound 配置好多参数都是默认配置,没必要再写,新手看起来可能会比较晕😄 之前做了期节目专门聊 DNS,有兴趣的朋友可以听听 https://kernelpanic.fm/51
adrianzhang
2018-06-06 17:29:29 +08:00
@rio 是的,要精简个只用 unbound 的。正在听你的节目…… 看节目下的链接,研究还是比较深入的。
rio
2018-06-06 17:48:02 +08:00
@adrianzhang 嗯,不过自己搭 recursive 的话,首次解析的延迟比较头大。另外禁用 TCP/TLS 后隐私也是个问题😂
adrianzhang
2018-06-06 18:01:36 +08:00
@rio 延迟是个问题,所以增加 cache TTL 时间用来尽量减少首次解析的频率。TCP/TLS 并没有禁用,只是不强制使用 TCP 向 ROOT DNS 发起查询。如果强制 TCP,ROOT/TLD DNS 是没有响应的。
mrzx
2018-06-06 18:04:31 +08:00
不知道我的理解对不对?

首先 13 个 root dns 在国外,最终所有正确的解析信息国外的才更为准确吧。而国内的涉及 DNS 污染等各种问题。
而采用 UDP 53 更容易遭到劫持。

所以,采用自建 DNS 服务器的方式,让这台自建的 DNS 服务器通过 TCP 53 协议(或者直接加密)跟国外无污染的服务器进行查询,再把正确的结果发聩回来。至少可以解决劫持的问题。

但这里面又存在一个问题,就是丧失了 CDN 的特性,所以楼主采取的方式就是有效了避免了这点?
adrianzhang
2018-06-06 18:43:17 +08:00
@mrzx

基本上是这个思路。

问题主要发生在向各个域的权威 DNS 查询这一步,得到的主机 IP 地址是否准确。[ 实际上,真实的响应并没有变化,只不过路上有错误的响应进行了抢答,由于解析原理是接受第一个返回的响应( UDP,无验证),所以实际上接受了一个错误的响应内容。]

这种干扰主要针对权威 DNS 设置在国外的网站。那么,对于这种情况,UDP 包走加密通道,就不会有错误的应答进行干扰。

由于国内的网站,权威 DNS 基本上都在国内,因此对其的查询,是直连的,从 DNS 看来,源 IP 来自你的 ISP,所以权威 DNS 如果有设置针对不同来源响应不同 IP 的话,能够给到准确的 IP,有时候,这些 IP 是第三方 CDN 的。

已有的一些方法,向权威 DNS 查询的时候,源 IP 都已经不是本来的(例如各种公共 DNS 作为源向权威 DNS 查询,再例如用 name list 区分一部分域通过 TCP,用另外的主机发起 UDP 查询)。这类方法,对于 CDN 并不能很好适配。

这样说不知是否解释得有条理一些。若还有疑问可以进一步讨论。
mrzx
2018-06-07 10:03:53 +08:00
@adrianzhang 我主要是怕劫持。

并且 8.8.8.8 之类的不光是应用层的劫持了。在国内 8.8.8.8 是直接被丢路由黑洞或者错误引导假 DNS 收集服务器上。从 IP 层就开始劫持了。

至于 CDN 加速之类的,当时太麻烦,没搞,谢谢楼主提供这种思路。
zhjits
2018-06-07 11:55:51 +08:00
@adrianzhang 让 CDN 支持 EDNS0 Client Subnet 就好了
adrianzhang
2018-06-07 11:59:16 +08:00
@zhjits 这事谁干? CDN 厂商?各个网站?还是用户自己? 如果不是所有网站都这样做的话,单凭用户自己可以做到么?
zhjits
2018-06-08 14:14:11 +08:00
@adrianzhang 当然让 CDN 和 DNS 权威服务器做啊
adrianzhang
2018-06-08 17:34:02 +08:00
@zhjits 所以这个不由用户自己控制啊,需要等所有相关服务商都实施了才行。在没有得到这些服务之前,用本文方法不好么?
Kobayashi
2018-06-15 00:07:49 +08:00
楼主说的就是自建 Recursive DNS,自己作为向权威 DNS 的请求方,以获得最优解析。不过分流实现有点问题:1 )并不是完全不需要列表,还是要依靠 China IP List ; 2 )权威服务器的位置和要访问网站的位置没有绝对的联系,使用境内还是境外权威 DNS 解析自己的网站完全由站长决定。

依靠权威 DNS 位置分流解析境内和境外解析不靠谱。相比来说,都是使用 China IP List/CHNRoute,ChinaDNS、Overture、Pcap_DNSProxy 这种依据解析后判断 IP 位置分流的方案更准确。

@rio 嗯,是配置繁琐了,单独 Unbound 就可以实现递归 DNS,没必要再祭出 Bind 这种重型武器。1 ) Unbound 配置注释掉所有 forward-zone,不转发的结果就是最后向权威 DNS 发起递归查询。2 ) root-hints 没必要写,13 台根服务器信息已经在 Unbound 内置了,再说根服务器信息也不会频繁变化,一般随 Unbound 更新就好了。

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

https://www.v2ex.com/t/460686

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

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

© 2021 V2EX