发新话题
打印

如何判断是否被网关或ISP劫持了DNS或HTTP流量?

如何判断是否被网关或ISP劫持了DNS或HTTP流量?


注意:
1)每次更换DNS服务器后,需要在DOS窗口下执行 ipconfig/flushdns 命令,才能真正生效。最好是先关闭再打开浏览器,再测试上网结果。chrome浏览器下可以打开chrome://net-internals/#dns,查看、清空DNS解析结果。
2)OPENVPN客户端需要注意避免DNS泄露,否则即使建立了VPN连接,也可能存在DNS查询流量不经过VPN连接而导致的DNS泄露,进而被DNS劫持。
3)有的SOHO路由器存在漏洞,导致路由器的DNS服务器设置被黑客篡改,进而导致使用者的DNS被劫持。

一、DNS劫持的危害:
1)对于常见的https网站,如果出现了证书警告页面,则有可能是被劫持了,需要仔细查看证书内容以验证网站的身份。
2)普通网站域名被劫持后,可能被用于钓鱼网站套取用户信息或滥发广告。
3)某些DNS转发服务器不接受IPv6域名的查询,无法获得域名的IPv6 IP地址。


二、检测DNS劫持

方法一:
设置Windows的DNS服务器为任意公网IP,仍然可以解析域名,可以上网,表明网关或ISP对DNS查询流量做了劫持。

方法二:
同时在本地和国外主机上ping www.google.com,显示的IP不一致,且本地无法直接上https://www.google.com,表明网关或ISP对DNS查询流量做了劫持,并且污染了google域名。

方法三:
下载namebench
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/namebench/namebench-1.3.1-Windows.exe

安装运行,点击右下角的“Start Benchmark”按钮,如果出现“Outgoing requests were intercepted!”的结果,表明网关或ISP对DNS查询流量做了劫持。

方法四:
https://www.dnsleaktest.com/
点击“Standard Test”或“Extend Test”按钮,如果出现“Query round Progress... Servers found”的结果,表明网关或ISP对DNS查询流量做了劫持。


三、防范DNS劫持
防范DNS劫持的方法分为四类:
1)设法绕过:使用OpenDNS等非UDP 53端口的DNS服务器,由于Windows、Linux、安卓、iOS都不能直接设置非标准端口DNS服务器,所以必须通过DNS代理服务器转发间接使用;
2)提前响应:在内网里搭建自己的DNS代理服务器,抢在上级网关/ISP劫持之前对特定域名做解析,不过,对于标准端口、没有做设置的域名仍可能被上级网关/ISP劫持,可以使用非标准端口DNS服务器转发。
3)远程解析:使用WEB在线/HTTP/SOCKS代理服务器,使得DNS域名解析在远端服务器上进行,还可以在远程服务器上设置自动更新的IPV6 hosts文件,加快IPV6网络的访问。使用DNS over TLS服务,或使用包含DNS over HTTPS技术的Yandex、Firfox浏览器上互联网。
4)本机解析:使用hosts文件,无需DNS域名解析即可访问互联网,但是维护难度大,只能一台机器用

直接验证远程非UDP 53端口的DNS服务器:
nslookup -vc hm.baidu.com 8.8.8.8
kdig -d @8.8.8.8 +tls-ca +tls-host=dns.google.com www.google.com
dig @121.42.51.234 -p 666 hm.baidu.com
dig @121.42.51.234 -p 53 +tcp hm.baidu.com
dig @114.114.114.114 -p 53 +tcp hm.baidu.com
dig @8.8.8.8 +short test.openresolver.com +tcp TXT
参见:dig的windows版本

对比UDP 53端口的查询结果,可以验证UDP 53端口存在DNS劫持
nslookup hm.baidu.com 8.8.8.8
kdig -d @47.110.70.185 +tls-ca +tls-host=ipv4.ddns.group www.google.com
dig @121.42.51.234 -p 53 hm.baidu.com


方法一:
设置DNS服务器为局域网IP,再通过此DNS服务器(可内置在专门的路由器中)forwarder到其它非UDP 53端口的DNS服务器,例如OpenDNS服务器等。
208.67.222.222:5353
208.67.222.222:443
208.67.220.220:5353
208.67.220.220:443

安卓用户可以安装运行dnspipe APP,实现全局DNS代理,并可使用非UDP 53端口的DNS服务器。DNS Changer APP也实现全局DNS代理,并且可以对DNS服务器做测速,但无法使用非UDP 53端口的DNS服务器。

方法二:
使用DNS over TLS(DOT)功能,DOT使用853/TCP端口,服务器需要真实域名且安装正式SSL证书,使用时,先由系统DNS服务器解析DOT加密服务器域名,之后再用DOT服务器解析所有域名。Android 9 及以上的版本支持加密DNS功能。
参考:
安卓系统在4G移动数据流量及WIFI时设置(DOT加密)DNS服务器 http://www.trustcomputing.com.cn/bbs/viewthread.php?tid=1631

Linux下验证:
apt-get install knot-dnsutils
yum install knot-utils
# For macOS:
# brew install knot
kdig -d @8.8.8.8 +tls-ca +tls-host=dns.google.com example.com

方法三:
使用DNS over HTTPS(DOH)功能,Yandex、Firefox浏览器自带有DNS over HTTPS功能
服务器选择Cloudflare等

Linux下验证:
# json
curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A' | jq .
# dns wireformat
curl -H 'accept: application/dns-message' 'https://dns.google/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

curl --doh-url https://cloudflare-dns.com/dns-query https://www.google.com

方法四:
VPN服务器可以只下发DNS服务器IP为VPN路由,各OS都有内置的VPN拨号客户端,无需安装第三方APP软件,适用于4G/5G移动数据流量及WIFI网络环境,由此构成DNS over VPN(DOV)解决方案,比DNS over TLS(DOT)、DNS over HTTPS(DOH)更容易普及。

方法五:
无需专门的路由器,可以将DNS服务器设置为127.0.0.1,再通过UDP Proxy等工具将127.0.0.1:53的流量转发到其他非USP 53端口的DNS服务器上。或者修改注册表项,启用TCP 53端口查询。

下载Simple UDP Proxy/Pipe:
http://download.softpedia.com/dl/3fea07e334b4263f405655a7db3375ae/579197d9/100094357/software/network/sudppipe.zip

运行:
sudppipe.exe -p 121.42.51.234 666 53

再将本机DNS服务器设置为 127.0.0.1。

管理员身份DOS窗口下输入命令实现修改DNS服务器:
netsh interface IPv4 set dnsserver "以太网" static 127.0.0.1 both
netsh interface show interface:找到网卡名"以太网"

方法六:
下载:
https://sourceforge.net/projects/dns2socks/

运行:
DNS2SOCKS.exe /t 121.42.51.234:8081 121.42.51.234:666 127.0.0.1:53

将本机DNS服务器设置为 127.0.0.1。方法同上。

方法七:
下载使用dnscrypt,网址:https://dnscrypt.org/

方法八:
win7用户可以修改dnsapi.dll,,强制使用TCP而不是UDP协议进行DNS查询

方法九:
直接用HTTP/SOCKS代理服务器,由代理服务器在远端做DNS解析
121.42.51.234:8086

方法十:
直接使用WEB在线代理,由WEB在线代理在远端做DNS解析
http://121.42.51.234:99/www

方法十一:
架设自己的DNS服务器,普通是利用bind、dnsmasq软件,但是设置比较繁琐,缺乏WEB管理界面,推荐使用中神通大地云控来解决这些问题

四、防范HTTP流量劫持
现在运营商等可以对接入的宽带线路做分光劫持,旁路监听80端口等明文流量,插入广告等骚扰内容,或者对HTTP流量做Cache缓存,即使用户的DNS没有被劫持,仍然会导致查看的网页被篡改、下载的文件不正确,为此用户可以使用非80、8080端口的HTTP代理服务器,同时在HTTP代理服务器端使用带广告过滤数据库的DNS服务器。


参考:

1)中神通大地DNS&URL&VPN云控管系统
http://www.trustcomputing.com.cn/cn/index.php/product/dns-url

2)dig的windows版本
http://www.trustcomputing.com.cn/bbs/viewthread.php?tid=1132

3)OpenDNS测试
https://support.umbrella.com/hc/en-us/articles/234692027-Umbrella-Diagnostic-Tool

4)DNS服务器实时测速比较
https://www.grc.com/dns/benchmark.htm

5)当DNS泄漏让VPN不再安全,我们该怎么办?
http://www.freebuf.com/articles/network/67591.html

6)揭开“流量劫持”的神秘面纱


7)绕过运营商HTTP劫持
https://onebitbug.me/2013/12/19/escape-isp-http-hijacking/

8)工信部投诉
http://www.chinatcc.gov.cn:8080/cms/shensus/
https://dxss.miit.gov.cn/

[ 本帖最后由 linda 于 2021-9-22 17:52 编辑 ]

TOP

发新话题