鉴于境外技术网站经常有河蟹出没,所以有必要折腾一下。
关于DNS劫持和DNS污染的概念和区别,就不多说了。网上都有很多解释。解决方案无非就几种。
1.使用非53的udp端口。这个方法显然不具备实操意义,好少有开放非53UDP端口的dns服务器。
2.使用TCP 53端口查询,其中google的8.8.8.8就支持
3.使用加密的DNS协议,opendns貌似提供了解决方案。
查了一下openwrt有提供unbound这个软件包,可以非常方便地部署到路由器上。
unbound支持使用TCP协议进行DNS查询,所以只需要把DNS请求用TCP协议转发出去境外的DNS,就可以解决污染问题了。
虽然DNS的协议规定TCP协议也是其可以使用的协议,一般软件发出都是UDP 53端口来,所以需要做一个UDP转TCP的DNS转发器。
利用Openwrt里面自带了dnsmasq就能实现了。以下是实现方法。
先下载unbound。
opkg update
opkg install unbound
需要注意的是,如果使用Dreambox,他提供的unbound版本过低,不能提供TCP转发功能。我已提交了patch给Dreambox项目了,不过貌似项目管理者太繁忙没有处理这个任务单....
https://dev.openwrt.org.cn/ticket/84#
如果在Dreambox强行安装trunk或者Attitude Adjustment提供的unbound,会有l