由于 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.cachewget -N -P /etc/unbound --no-check-certificate
https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.confcat /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 也被封了,估计又要折腾。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/308200
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.