主页 > 路由器 > 再战DNS域名解析污染

再战DNS域名解析污染

2016年12月23日 再战DNS域名解析污染无评论 阅读: 20,536 次

tips:

windows下清除dns缓存:

C:\Users\Administrator>ipconfig/flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。

openwrt下清除dns缓存:
root@Open743:~# /etc/init.d/dnsmasq restart

DNS域名请求和响应报文为明码UDP报文(端口为53),中间设备很容易对域名解析的返回结果进行修改,从而使你访问不到你想要访问的网站。

 

正文:

原来在用VPN时使用openwrt的dnsmasq将国外域名列表指向8.8.8.8的google服务器进行解析:
使用DNSMASQ解决OPENWRT的DNS解析问题

 

此种方法在使用VPN时正常,国外IP(含8.8.8.8)全走加密VPN,包括TCP、UDP,中间设备无法对内容进行修改。

 

但此种方法在使用SSR时发现失效,原因是没有将SSR的UDP隧道转发打开,SSR缺省只对TCP报文进行透明代理,UDP报文在中间被劫持修改

上图第一次ping是没打开隧道转发时的IP地址,返回一个随机的垃圾IP(意大利的地址),第二次是打开隧道转发后的正确IP。

 

隧道转发打开方式

openwrt上安装openwrt-ssr

打开UDP转发:

在WAN设置中取消“使用端局通告的DNS服务器”:

在DNS配置中设置“DNS转发”为“127.0.0.1#5300”:

按上述设置可以正确解析所有域名,但是有个问题,国内的域名也交给google去解析了,导致访问淘宝变成国际淘宝网站。

 

问题1:能不能不开启隧道,用UDP中继服务器中转DNS请求?

目前测试,从openwrt上发出的dns不理会UDP中继服务器设置,直接不走代理出去,但是局域网内其他的计算机发出的UDP报文会转发到UDP中继服务器。因此如果不开隧道,开UDP中继服务器,可以将局域网中的计算机的dns手动设置成8.8.8.8,也可以防止DNS污染:

 

问题2:如何设置使国内域名走国内DNS,国外走google的DNS?

在openwrt上打开UDP隧道,不要修改WAN和DNS配置,修改openwrt上/etc/dnsmasq.d/foreign_list.conf文件,将8.8.8.8改为127.0.0.1#5300

重启dnsmasq:

/etc/init.d/dnsmasq restart

 

另发现SS的openwrt客户端在域名污染情况下仍然可以正常使用,而SSR必须开隧道,具体原因待查。

【补充】

新版本SSR已经修复了在域名污染情况下无法使用的问题,已经不需要上述步骤。

新版SSR for OpenWRT地址:

http://github.com/ywb94/openwrt-ssr

发表评论

新用户的评论需审核后才会显示;

电子邮件地址不会被公开;
必填项已用*标注