OpenWrt DNS 优化分流设置 DNS 原理解析

DNS 全称 “Domain Name System”,是互联网的一项基础服务,将域名和 IP 地址相互映射,使得人们可以更方便的访问互联网,但有时需要一些自定义 DNS 操作,以解决某些网络故障,本文演示在 OpenWrt 上进行 DNS 优化分流设置,以及相关的原理解析。

DNS 原理

互联网的各类服务和各种软件联网实际使用的是 IP 地址模式,但相关 IP 地址并未内置到客户端中,而是通过域名解析后即时获得,域名更易记忆,可以固定不变,通过 DNS 服务器,网络服务的管理者可以随时更换域名对应的 IP 地址,用于更换服务器、网络流量 CDN 分流等,而用户则无需关心服务器 IP 地址的变化,只需记住域名即可。

DNS 服务器通常都是固定 IP 地址的形式,客户端直接向这个 IP 地址发送 DNS 查询请求,以此来获得域名对应的 IP 地址。
DNS 服务器好比是一座酒店的前台,而 DNS 查询好比是向前台查询住户的房间号。

例如客户端浏览器要访问一个网站,首先是向 DNS 服务器发出域名查询请求,由 DNS 服务器返回一个 IP 地址,然后客户端的浏览器与这个 IP 地址通信,随后显示出网站的内容。

互联网的 DNS 系统是由很多 DNS 服务器所组成,有各地网络运营商提供的 DNS,也有大型互联网公司提供的 DNS,这些 DNS 服务器的解析效果各不相同。

DNS 污染

DNS 服务器作为一项公共基础互联网服务,理论上来说应当公正可靠的返回正确的 IP 地址,但 DNS 服务器毕竟是由人管理的,在各种利益驱使或某些国家政策的控制下,某些公共 DNS 服务器会故意设置一些污染策略,把部分域名解析到错误的 IP 地址上,以使得用户无法访问或导致网络故障。

这些不可靠的公共 DNS 服务器还能实施更多功能,例如把正常的用户请求专门解析到某个特定的 IP 地址,以此来利用海量用户的访问流量实施网络攻击,例如详细记录用户的查询请求等隐私信息。

注意:如果你在中国境内上网,则必然会遭遇 DNS 污染问题,因为中国防火墙 GFW 会主动污染所有的权威 DNS 查询结果。

OpenWrt DNS 优化分流设置

由上面的 DNS 原理可知,有些公共 DNS 服务器并不可靠,为了避免公共 DNS 服务器的污染策略,不得不进行本地 DNS 优化设置,以解决因 DNS 污染而导致的网络故障或网络风险。

本示例以典型的单个路由器上进行 DNS 优化设置,使用的方案:Dnsmasq + ChinaDNS-NG + SmartDNS + DNSCrypt v2

Dnsmasq 是 OpenWrt 系统默认的 DNS 服务器,负责给所有的局域网客户端提供 DNS 服务。
ChinaDNS-NG 内置域名列表文件,对查询的域名进行匹配,按规则进行分流查询。
SmartDNS 用于解析中国网站的域名。
DNSCrypt v2 用于解析被污染的域名。

DNS 优化分流的效果:客户端无需额外设置,由网关路由器负责代理 DNS 查询,对中国域名使用中国的 DNS 服务器,被污染的域名则使用可信任的 DNS 服务器,以此获得正确的 DNS 查询结果。

注意:各类客户端均默认使用 UDP 53 或 TCP 53 端口进行 DNS 查询,所以路由器必须具备一个监听 53 端口的 DNS 服务器。

客户端也可以自行设置一个其它 DNS 服务器来绕过路由器进行 DNS 查询,如果不希望客户端使用自定义 DNS,则需要在网关路由器上添加 53 端口的劫持规则。

注意:此优化分流方案仅用于演示 DNS 分流原理,不对此方案的稳定性或相关软件的性能做任何保证。

请根据自身需求,合理搭配各种 DNS 软件来实现目的,有些 DNS 软件能独立实现域名分流功能,具体请根据实际情况配置,不同的 DNS 软件也可以分别部署在不同的设备上。

注意:不要盲目配置过于复杂的 DNS 规则,否则反而可能会导致对网络产生负面影响。

Dnsmasq 设置要点:在 “常规设置” 选项卡中,将 “DNS 转发” 配置为 127.0.0.1#5335
在 “HOSTS 和解析文件” 选项卡中,勾选 “忽略解析文件” 选项。

ChinaDNS-NG 设置要点:注意 “监听端口” 要与 Dnsmasq 中的设置相对应。
“中国 DNS” 和 “可信 DNS” 要与其它 DNS 软件的监听地址相对应。

注意:ChinaDNS-NG 默认刚安装时并没有下载域名文件,请点击 “更新域名文件” 按钮下载所需文件。

SmartDNS 设置要点:监听端口号不要与其它软件相冲突。

DNSCrypt v2 设置要点:监听端口号不要与其它软件相冲突。