首先安装unbound:
1 2 |
opkg update opkg install unbound |
然后修改/etc/unbound/unbound.conf文件,把以下内容相关的条目的注释取消,并按如下形式修改:
1 2 3 4 5 6 7 8 9 10 |
# unbound本地端口 由于dnsmasq占用53端口所以改用其他 如5353 port: 5353 # 启用TCP模式 tcp-upstream: yes # 设置转发的DNS服务器 forward-zone: name: "." forward-addr: 8.8.8.8 forward-addr: 8.8.4.4 forward-first: no |
启动unbound:
1 |
/etc/init.d/unbound start |
配置dnsmasq的转发功能:
修改/etc/dnsmasq.conf文件,在末尾直接按如下格式添加被劫持污染的站点:
1 |
server=/example.com/127.0.0.1#5353 |
example.com改为需要的域名,127.0.0.1#5353表示转发至unbound,5353是unbound的本地端口号,下面是一个例子:
1 2 3 4 5 6 7 8 9 |
#Youtube server=/youtube.com/127.0.0.1#5353 #Facebook server=/facebook.com/127.0.0.1#5353 server=/fbcdn.net/127.0.0.1#5353 #Twitter server=/twitter.com/127.0.0.1#5353 |
然后转至luci进行下一步配置:
WAN接口的高级设置里,取消“使用端局通告的DNS服务器”的勾并留空下面的自定义服务器,我们只用DHCP/DNS设置中的条目来控制DNS服务器,不希望这里通告的DNS服务器影响我们的配置:
记得点击保存&应用后,切换到DHCP/DNS设置中,在DNS转发配置中填入默认的国内DNS,强烈推荐用114DNS代替ISP的DNS,如果你希望全局转发至unbound完全使用国外公众DNS,此处填写127.0.0.1#5353:
填入完毕后点击保存并应用,dnsmasq自动重启,至此配置完成。
PC端测试(Windows)
清空DNS缓存:
1 |
ipconfig /flushdns |
nslookup直接向GoogleDNS查询twitter.com,结果被污染:
1 2 3 4 5 6 7 8 |
C:Userscokebar>nslookup twitter.com 8.8.8.8 服务器: google-public-dns-a.google.com Address: 8.8.8.8 非权威应答: 名称: twitter.com Addresses: 59.24.3.173 59.24.3.173 |
加 -v 参数的nslookup通过TCP向GoogleDNS获得真实结果:
1 2 3 4 5 6 7 8 9 |
C:Userscokebar>nslookup -v twitter.com 8.8.8.8 服务器: google-public-dns-a.google.com Address: 8.8.8.8 非权威应答: 名称: twitter.com Addresses: 199.59.150.39 199.59.150.7 199.59.148.10 |
不加任何参数的nslookup,默认查询方式,向路由器的dnsmasq查询,结果正常,DNS转发生效:
1 2 3 4 5 6 7 8 9 |
C:Userscokebar>nslookup twitter.com 服务器: OpenWrt.lan Address: 192.168.1.1 非权威应答: 名称: twitter.com Addresses: 199.59.149.198 199.59.148.10 199.59.150.39 |
OVER!
引用: OpenWRT路由器unbound+dnsmasq解决DNS污染与劫持 | OnlyForTest
引用: h2byte:那些从墙上学会的知识 – 海浪家园
引用: 那些从”墙”上学会的知识 – My Blog
引用: 在 OpenWrt 上解决 DNS 污染 – zzss.cf