V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a86913179
V2EX  ›  DNS

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

  •  
  •   a86913179 · 2016-09-22 16:29:34 +08:00 · 2189 次点击
    这是一个创建于 2979 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由于 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 也被封了,估计又要折腾。
    第 1 条附言  ·  2016-09-25 19:17:36 +08:00
    为了不占内存,把 dnsmasq 列表放到 tmp 去了

    wget -N -P /tmp --no-check-certificate https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf
    cat /tmp/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
    第 2 条附言  ·  2016-10-24 16:21:37 +08:00
    修正以下,手快打错了

    include: "/etc/unbound/unbound.forward-zone.China.conf"
    forward-zone:
    name: "."
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4
    forward-addr: 208.67.222.222@5353
    forward-addr: 208.67.220.220@5353
    forward-first: no
    第 3 条附言  ·  2016-10-24 20:42:26 +08:00
    自动转换成 pppoe 获取的 DNS1,DNS2

    cat /tmp/accelerated-domains.china.conf|grep -v '^#server'|sed 's/server=\//forward-zone:\n\tname: "/g'|sed 's/\/114.114.114.114/"\n\tforward-addr: '$(awk 'NR==1{print$2}' /etc/ppp/resolv.conf)'\n\tforward-addr: '$(awk 'NR==2{print$2}' /etc/ppp/resolv.conf)'\n\tforward-first: no/g'>/etc/unbound/unbound.forward-zone.China.conf
    第 4 条附言  ·  2016-12-14 21:42:31 +08:00
    需要梯子可以 Email 我: [email protected] ,或者直接前往 https://www.xpdaili.ml 。 YouTube 8K 不是梦!!!
    第 5 条附言  ·  2016-12-24 12:17:34 +08:00
    梯子新地址: http://t.cn/RIOM6wA
    第 6 条附言  ·  2017-03-25 15:45:45 +08:00
    wget -N -P /etc/unbound ftp://ftp.internic.net/domain/named.cache && wget -N -P /tmp --no-check-certificate https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf && cat /tmp/accelerated-domains.china.conf|grep -v '^#server'|sed 's/server=\//forward-zone:\n\tname: "/g'|sed 's/\/114.114.114.114/"\n\tforward-addr: '$(awk 'NR==1{print$2}' /etc/ppp/resolv.conf)'\n\tforward-addr: '$(awk 'NR==2{print$2}' /etc/ppp/resolv.conf)'\n\tforward-first: no/g'>/etc/unbound/unbound.forward-zone.China.conf && service unbound restart
    26 条回复    2016-11-04 23:19:31 +08:00
    a86913179
        1
    a86913179  
    OP
       2016-09-22 16:40:27 +08:00
    如果需要 host 加速和去广告屏蔽,可以去 CNMAN 的 github 上看。
    a86913179
        2
    a86913179  
    OP
       2016-09-23 19:34:56 +08:00
    好像这里都是大神,应该有更好的方案了
    a86913179
        3
    a86913179  
    OP
       2016-09-23 19:47:51 +08:00
    而且 unbound 不止在 openwrt 上有, windows 也有,默认监听端口 0.0.0.0 ,局域网设备也可以使用,直接把 PC 的 IP 地址设为 DNS 。
    a86913179
        4
    a86913179  
    OP
       2016-09-23 21:06:45 +08:00
    用 google 的 namebench 测过,路由器架设的比运营商的 DNS 还快。无劫持无污染。
    a86913179
        5
    a86913179  
    OP
       2016-09-23 21:07:15 +08:00
    秒杀一切 DNS
    a86913179
        6
    a86913179  
    OP
       2016-09-24 01:06:19 +08:00
    吓老子一跳,迅雷下载都快了。绝壁不是心理作用,以前不通的 tracker 现在正常了
    a86913179
        7
    a86913179  
    OP
       2016-09-24 01:10:27 +08:00
    而且我不打算用路由器去广告, chrome+unblock origin+广告净化器(视频去广告)很好使,腾讯视频需要打开 ublock 的请求日志,找到 livemsg?这条,复制到自定义规则加前面加 @@ 。 ublock 去不了的,广告净化器可以去。
    tangzho
        8
    tangzho  
       2016-09-24 08:08:21 +08:00 via Android
    高手,我计划简单点, unbound 只是负责 tcp 。其他工作都给 dnsmasq 。
    a86913179
        9
    a86913179  
    OP
       2016-09-24 12:59:25 +08:00 via iPhone
    @tangzho UDP 53 不管换什么 dns 无法解决运营商针对某些域名单独劫持到缓存服务器,现在不搞端口全局劫持,只搞部分域名。投诉多了都学聪明了,平时常用网站你发现用公共 dns 好像正常了,但是有些你不知道的域名可能已经被劫持,浙江人事考试网就被劫持了,我手机直接 AppStore 里下个 dig 就看到了。
    tangzho
        10
    tangzho  
       2016-09-25 09:46:11 +08:00 via Android
    装了个 unbound ,占了 1.13 兆空间,根本不轻量。那些 tp 之流卖的 1 兆 8 兆的配置,这个路由器安装 unbound 显得太奢了。
    2001225354
        11
    2001225354  
       2016-09-25 09:54:25 +08:00
    可否提供配置文件
    tangzho
        12
    tangzho  
       2016-09-25 11:22:57 +08:00 via Android
    我没有折腾成功。 error: outgoing tcp: connect: Permission denied for 2001:500:2f::f
    a86913179
        13
    a86913179  
    OP
       2016-09-25 12:10:19 +08:00
    @tangzho 我是淘宝几十块买的 wndr3800
    a86913179
        14
    a86913179  
    OP
       2016-09-25 12:11:15 +08:00
    @tangzho 你用 dig +tcp @你的运营商 DNS ,能解析出来吗
    a86913179
        15
    a86913179  
    OP
       2016-09-25 12:12:01 +08:00
    @2001225354 直接复制粘贴了,还要配置文件?不用这么懒吧
    fwkimi
        16
    fwkimi  
       2016-09-25 17:06:24 +08:00
    小白用 aa65535 的 openwrt-dns-forwarder + chinadns +ss ,全部 luci 配置
    a86913179
        17
    a86913179  
    OP
       2016-09-25 18:55:55 +08:00
    @fwkimi 因为 chinadns 也是只有 UDP ,所以我就忽略了
    20150517
        18
    20150517  
       2016-09-25 21:05:53 +08:00 via Android
    谢楼主, 我之前也是在折腾 unbound 但后来别人指点了,直接访问 5353 端口 opendns 就行了 确实没有污染 而且 tcp 现在也不解决问题 你 tcp 8.8.8.8 直接被 reset
    a86913179
        19
    a86913179  
    OP
       2016-09-25 22:23:03 +08:00
    @20150517 不不不,国内 DNS 用 TCP 防运营商污染,运营商不会对你的 TCP RESET ,国外 DNS 用非 53 端口防 GFW 。你直接用 opendns 国内网站 CDN 就乱跳了
    a86913179
        20
    a86913179  
    OP
       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 好点
    tangzho
        21
    tangzho  
       2016-09-27 22:45:53 +08:00 via Android
    折腾了两个同型号的路由,一个装 unbound ,一个装 pdnsd 。都和 dnsmasq 配合使用。
    a86913179
        22
    a86913179  
    OP
       2016-09-28 19:09:29 +08:00
    @tangzho 这 2 个本身就不需要配合 dnsmasq , github 都有对应的 dnsmasq chinalist 转换列表, dnsmasq 没什么卵用
    HalloCQ
        23
    HalloCQ  
       2016-10-21 10:25:59 +08:00
    pandora 固件好像不支持 unbound
    HalloCQ
        24
    HalloCQ  
       2016-11-03 13:51:53 +08:00
    cat: can't open '/tmp/accelerated-domains.china.conf': No such file or directory
    HalloCQ
        25
    HalloCQ  
       2016-11-03 15:23:58 +08:00
    改了一下:
    wget -O- http://www.internic.net/domain/named.cache > /etc/unbound/named.cache
    wget -O- --no-check-certificate https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf > /tmp/accelerated-domains.china.conf
    但是还有未知问题,不能解析任何网址。
    a86913179
        26
    a86913179  
    OP
       2016-11-04 23:19:31 +08:00
    @HalloCQ 确定 unbound 已经启动,若没有 unbound.forward-zone.China.conf 这个文件, unbound 无法启动,需要注释掉 include 那行,或者 touch 一个 unbound.forward-zone.China.conf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.