折腾了这么多天的 unbound,我来分享下我的最终方案!

2016-09-22 16:29:34 +08:00
 a86913179
由于 15.05.1 取消了 pdnsd ,不再对此讨论,试过 14.07 的包拿来直接用,有未知问题,延迟高,没有 unbound 流畅。
unbound 支持 TCP 支持非 53 端口支持向根域名服务器解析,又轻巧,真是没理由不用它。

我直接用的官方固件, opkg install unbound 和 wget 后由于 dnsmasq 占用 53 端口 unbound 安装会有提示无法启动,进 dhcp/dns ,把 local domain 里的 lan 删掉,再到高级选项,把 dns server port 设为 0 ,在接口 lan 的高级选项 dhcp-option 添加 6,192.168.1.1 。然后到启动项 startup 里运行 start unbound 或 /etc/init.d/unbound start 。然后打开 /etc/unbound/unbound.conf 修改如下:

tcp-upstream 去掉注释改为 yes ,直接用 UDP 向根域名服务器解析会遭到运营商的投毒和 GFW 的投毒。

2 个 access-control 后面的 allow 改为 allow_snoop ,为了能 dig +trace

注释掉 auto-trust-anchor-file ,运营商 DNS 不支持 DNSSEC 。 DNSSEC 只有域名和权威 NS 、递归 DNS 同时支持才有效果,而大部分域名和权威 NS 并没有。所以没什么用,我试过开启并关掉 TCP 向根域名服务器请求,还是被运营商污染投毒了。 GFW 更不用说。

由于直接向根域名服务器请求 TCP 会因为有些 NS 不支持 TCP 导致无法返回结果,同时也会由于 GFW RST 阻断无法解析被投毒的域名,根据 CNMAN 提供的代码精简后,获取国内域名走 TCP 53 运营商 DNS ,被 GFW 投毒污染的域名走 TCP 53 或者非标端口 5353 、 443 之类的。

在 unbound.conf 末尾添加

include: "/etc/unbound/unbound.forward-zone.China.conf"
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.8.8
forward-addr: 208.67.222.222@5353
forward-addr: 208.67.220.220@5353
forward-first: no

forward-first 设为 no 是无法向根域名服务器 TCP 解析的才会用这些来解析,设为 yes 就不向根域名服务器请求,直接用这些列表里的。

include 跟 forward 的顺序不能错。类似白名单的效果。

pppoe 联网启动脚本里 /etc/ppp/ip-up.d(此目录需要权限 755)目录下新建一个脚本,例如 ip-up(此文件需要权限 755):

#!/bin/sh

wget -N -P /etc/unbound ftp://ftp.internic.net/domain/named.cache
wget -N -P /etc/unbound --no-check-certificate https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf
cat /etc/unbound/accelerated-domains.china.conf|grep -v '^#server'|sed 's/server=\//forward-zone:\n\tname: "/g'|sed 's/\/114.114.114.114/"\n\tforward-addr: 211.140.13.188\n\tforward-addr: 211.140.188.188\n\tforward-first: no/g'>/etc/unbound/unbound.forward-zone.China.conf
/etc/init.d/unbound restart

搞定以后, sh /etc/ppp/ip-up.d/ip-up ,然后 dig 一下,是不是发现国内 CDN 和运营商的解析结果一致,国外的也正常了?哈哈!每次联网都会更新一遍根服务器和国内白名单。

第一条是更新根域名服务器地址,第二条是下载 dnsmasq-chinalist ,第三条是转换成 unbound 规则, 211.140.13.188 和 211.140.188.188 是我 pppoe 拨号自动获取的运营商 DNS ,支持 TCP 解析, UDP 解析有污染有投毒有劫持,你可以换成自己的运营商 DNS ,或者支持 TCP 的公共 DNS (只有运营商不支持 TCP 才使用,因为公共的 TCP 解析 CDN 有时会乱跑)。所以这个方案是全程 TCP 解析,外加非 53 端口解析。支持非 53 端口的 DNS 很多,好像 dnscrypt 那里有提供列表。

白天上班,每天晚上回家弄测试到半夜,真是给搞得欲仙欲死。

要是哪天所有非 53 端口的 DNS 也被封了,估计又要折腾。
1805 次点击
所在节点    DNS
26 条回复
a86913179
2016-09-22 16:40:27 +08:00
如果需要 host 加速和去广告屏蔽,可以去 CNMAN 的 github 上看。
a86913179
2016-09-23 19:34:56 +08:00
好像这里都是大神,应该有更好的方案了
a86913179
2016-09-23 19:47:51 +08:00
而且 unbound 不止在 openwrt 上有, windows 也有,默认监听端口 0.0.0.0 ,局域网设备也可以使用,直接把 PC 的 IP 地址设为 DNS 。
a86913179
2016-09-23 21:06:45 +08:00
用 google 的 namebench 测过,路由器架设的比运营商的 DNS 还快。无劫持无污染。
a86913179
2016-09-23 21:07:15 +08:00
秒杀一切 DNS
a86913179
2016-09-24 01:06:19 +08:00
吓老子一跳,迅雷下载都快了。绝壁不是心理作用,以前不通的 tracker 现在正常了
a86913179
2016-09-24 01:10:27 +08:00
而且我不打算用路由器去广告, chrome+unblock origin+广告净化器(视频去广告)很好使,腾讯视频需要打开 ublock 的请求日志,找到 livemsg?这条,复制到自定义规则加前面加 @@ 。 ublock 去不了的,广告净化器可以去。
tangzho
2016-09-24 08:08:21 +08:00
高手,我计划简单点, unbound 只是负责 tcp 。其他工作都给 dnsmasq 。
a86913179
2016-09-24 12:59:25 +08:00
@tangzho UDP 53 不管换什么 dns 无法解决运营商针对某些域名单独劫持到缓存服务器,现在不搞端口全局劫持,只搞部分域名。投诉多了都学聪明了,平时常用网站你发现用公共 dns 好像正常了,但是有些你不知道的域名可能已经被劫持,浙江人事考试网就被劫持了,我手机直接 AppStore 里下个 dig 就看到了。
tangzho
2016-09-25 09:46:11 +08:00
装了个 unbound ,占了 1.13 兆空间,根本不轻量。那些 tp 之流卖的 1 兆 8 兆的配置,这个路由器安装 unbound 显得太奢了。
2001225354
2016-09-25 09:54:25 +08:00
可否提供配置文件
tangzho
2016-09-25 11:22:57 +08:00
我没有折腾成功。 error: outgoing tcp: connect: Permission denied for 2001:500:2f::f
a86913179
2016-09-25 12:10:19 +08:00
@tangzho 我是淘宝几十块买的 wndr3800
a86913179
2016-09-25 12:11:15 +08:00
@tangzho 你用 dig +tcp @你的运营商 DNS ,能解析出来吗
a86913179
2016-09-25 12:12:01 +08:00
@2001225354 直接复制粘贴了,还要配置文件?不用这么懒吧
fwkimi
2016-09-25 17:06:24 +08:00
小白用 aa65535 的 openwrt-dns-forwarder + chinadns +ss ,全部 luci 配置
a86913179
2016-09-25 18:55:55 +08:00
@fwkimi 因为 chinadns 也是只有 UDP ,所以我就忽略了
20150517
2016-09-25 21:05:53 +08:00
谢楼主, 我之前也是在折腾 unbound 但后来别人指点了,直接访问 5353 端口 opendns 就行了 确实没有污染 而且 tcp 现在也不解决问题 你 tcp 8.8.8.8 直接被 reset
a86913179
2016-09-25 22:23:03 +08:00
@20150517 不不不,国内 DNS 用 TCP 防运营商污染,运营商不会对你的 TCP RESET ,国外 DNS 用非 53 端口防 GFW 。你直接用 opendns 国内网站 CDN 就乱跳了
a86913179
2016-09-25 22:29:34 +08:00
@20150517 不是所有网站用 8.8.8.8 tcp 会被 reset 只有关键字被锁定了才会 reset , 8.8.8.8 的 CDN 定位比 opendns 的要好一点,所以我是能 tcp 8.8.8.8 尽量用这个,不行了才去用 opendns 。我的这个方案是国内域名用运营商 DNS+TCP ,不再列表内的国外域名 8.8.8.8 优先,被 reset 的被墙域名用 opendns 。 dig 测试过国外的网站用 google dns 结果会比 opendns 好点

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

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

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

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

© 2021 V2EX