在 OpenWrt 上配置 unbound 使用 DNS over TLS

本配置在 OpenWrt 18.06 上配置通过。路由器为友华 WR1200JS,CPU 是 MT7621a

OpenWrt 上缺省使用 dnsmasq 作为内建 dns server 提供给接入的设备用。因为 dnsmasq 也同时用作 DHCP 服务和 TFTP 服务,对新手来说最好不要过多碰 dnsmasq 的配置。所以本文档的方案是仍然使用 dnsmasq 做 DNS 服务,但是把所有请求转发给本机 unbound。

第一步、在控制台中安装 unbound 和 luci 配置工具

  
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install unbound ca-bundle
root@OpenWrt:~# opkg install luci-app-unbound
  

第二步、回到 Web 管理,进入 "Recursive DNS"

第三步、在这里,选中 "Manual Conf:" 和 "Extended Tabs:",然后 "Save & Apply"

第四步、新变化的界面中,进入 "Files"

第五步、把下面的配置文本复制粘贴进表单,然后 "Save"。注:本配置参考自 https://openwrt.org/docs/guide-user/services/dns/unbound,仅仅是把上游服务器替换成红鱼 DNS 的 IP 地址。

  
server:
  port: 53535
  access-control: 10.0.0.0/8 allow
  access-control: 127.0.0.0/8 allow
  access-control: 192.168.0.0/16 allow
  cache-max-ttl: 14400
  cache-min-ttl: 900
  do-tcp: yes
  hide-identity: yes
  hide-version: yes
  interface: 0.0.0.0
  minimal-responses: yes
  prefetch: yes
  qname-minimisation: yes
  rrset-roundrobin: yes
  ssl-upstream: yes
  use-caps-for-id: yes
  verbosity: 1
  do-ip4: yes
  do-ip6: no
  outgoing-port-permit: "10240-65335"
  outgoing-range: 60
  num-queries-per-thread: 30
  msg-buffer-size: 8192
  infra-cache-numhosts: 200
  msg-cache-size: 100k
  rrset-cache-size: 100k
  key-cache-size: 100k
  neg-cache-size: 10k
  target-fetch-policy: "2 1 0 0 0 0"
  harden-large-queries: yes
  harden-short-bufsize: yes
  
forward-zone:
  name: "."
  forward-addr: 118.89.110.78@853 # dns.rubyfish.cn with East-Asia upstream
  forward-addr: 47.96.179.163@853 # dns.rubyfish.cn with US-West upstream
  

第六步、回到 "Settings",再次 "Save & Apply"。现在 unbound 服务就应该启动起来了,监听 53535 端口。

第七步、现在进入 "DHCP and DNS" 去配置 dnsmasq

第八步、在 "DNS forwardings" 里填入 127.0.0.1#53535

第九步、切换到 "Resolv and Hosts Files" 配置,选中 "Ignore resolv file",这里解释一下,当前 /tmp/resolv.conf.auto 文件里配置的是 OpenWrt 接入上级网络时自动获得的 DNS 服务器地址。原本 dnsmasq 把本地的 DNS 请求都转发到上级运营商 DNS 的,现在这样配置之后就都转给了红鱼 DNS

最后一步,来到页面的最下方 "Save & Apply",大功告成!