再战DNS域名解析污染
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地址:
发表评论