DNS-Forwarder 的简单教程

下面就是使用 DNS-Forwarder 的简单教程。注意,本教程教你安装的是 DNS-Forwarder for openwrt 版本,编译机器是 Arch Linux, 运行环境是 Netgear 的某款智能路由器。

安装 DNS-Forwarder

DNS-Forwarder 是一款开源软件,在 openwrt 的官方仓库里没有,需要自己编译。openwrt 的软件编译一般是在 Linux 或 Windows 主机上交叉编译成可执行软件包。我的编译环境是 Arch Linux。

  1. 首先下载安装 openwrt 的 SDK,openwrt 的官方教程: https://wiki.openwrt.org/doc/howto/obtain.firmware.sdk
    假设下载的是 OpenWrt-SDK-15.05.1-ar71xx-nand
cd OpenWrt-SDK-15.05.1-ar71xx-nand
./script/feeds update -a
./script/feeds install -a
make menuconfig    # 仅用于测试 SDK 能够正常运行

注意很多 Linux 平台可能会见到这个错误:glob failed: No files found "package/utils/busybox/config/libbb/Config.in" make: *** [menuconfig] Error 1。解决方法:ln -s ../feeds/base/package/utils package/utils ,参考:https://dev.openwrt.org/ticket/18552

  1. 编译 DNS-Forwarder
  • 获取 Makefile
    git clone https://github.com/aa65535/openwrt-chinadns.git package/chinadns
  • 选择要编译的包 Network -> ChinaDNS
    make menuconfig
  • 开始编译
    make package/chinadns/compile V=99
    编译 DNS-Forwarder 可能依赖 ccache, 在你的系统上安装即可。不出意外,编译出的可执行软件躺在 bin/ar71xx/packages/base/dns-forwarder_1.2.0-1_ar71xx.ipk 下, 通过 scp 传到 openwrt 里即可。
  1. 设置 DNS-Forwarder
    DNS-Forwarder 通过文件设置,配置好记得将 ChinaDNS 的上游服务器配置为 DNS-Forwarder 的地址。
# /etc/config/dns-forwarder

config dns-forwarder
	option listen_addr '0.0.0.0'
	option listen_port '5300'
	option dns_servers '8.8.8.8'
	option enable '1'
  1. 启动
/etc/init.d/dns-forwarder start

总结

现在,我的 DNS 查询的流程就是: dnsmasq -> ChinaDNS -> DNS-Forwarder -> SS (TCP) -> 国外DNS服务器(e.g: 8.8.8.8)
本文作为 DNS 系列文章中的第三篇,终于我可以正常的用上 DNS 了。

----------

使用DNS-Forwarder提升ChinaDNS的稳定性

很多人使用Openwrt的路由器配合SS来提升访问海外网站的速度和稳定性,其中ChinaDNS被很多人作为防DNS污染的利器,但是大多数人目前还是使用ss-tunnel创建一个UDP转发隧道作为ChinaDNS的上游来进行查询,这在不少地区的ISP环境下常常出现不稳定的现象,aa65535的DNS-Forwarder for OpenWrt很好的解决了这个问题,参考Wiki整理如下.

 安装DNS-Forwarder for OpenWrt

从v1.1.0版本开始,DNS-Forwarder for OpenWrt把Luci设置界面分离到了OpenWRT-Dist-Luci,因此根据你的平台不同,你需要分别下载两个程序:

下载完成后,在路由器上执行opkg install安装即可

 配置DNS-Forwarder和ChinaDNS

DNS-Forwarder配置比较简单,只需要设置监听端口和上游DNS即可,这里我设置了监听端口为5352:

f:id:briteming:20190617113622j:plain

df1

 

然后配置ChinaDNS的上游服务器,把原先使用UDP隧道转发的上游去掉,改为DNS-Forwarder的地址,这里是127.0.0.1:5352,另一个上游服务器保持不变,可以是114.114.114.114这种公共DNS,也可以是你的ISP的DNS:

f:id:briteming:20190617113814j:plain

 

完成

设置完成,如果你第一次使用ChinaDNS的话,需要在网络-DHCP/DNS中,把ChinaDNS配置为本地的DNS服务器,如下图所示,如果之前已经配置了,那这一步就可以忽略了:

f:id:briteming:20190617113935j:plain

在这个模式下,ChinaDNS使用DNS-Forwarder作为上游,而DNS-Forwarder又使用TCP协议直接向上游(通常是8.8.8.8)服务器进行查询,如果配合了SS,TCP查询会自动走SS线路,也同时解决了线路优化的问题。