Abstract
每一位理工科专业的学生,都有连接世界互联网的需求。在校园范围内,无论是使用校园网还是手机流量连接互联网,都有可能存在隐私泄露的隐患。而问题的源头常见于DNS环节:DNS 查询可能被网络提供方记录,造成隐私暴露风险。本文将基于校园网环境下,探讨不同上网配置造成的DNS泄露情况,以此给出应对DNS泄露的解决方案。实验表明,DNS泄露问题普遍存在,完全规避 DNS 泄露在复杂网络环境下具有一定难度。使用clash内核衍生出的代理软件,解决DNS泄露较为复杂;而其他分流简单的软件如nekoray则相对容易。文末给出了不同软件的使用建议。
Introduction
科学上网时,传输层使用TCP链接代理服务器,在应用层上使用各类加密协议。因此理论上,网络监管者只能看到用户与代理服务器持续的TCP链接,但是看不到访问的实际网站,包括使用的协议、网站的域名、传输的内容等。尽管可以通过流量特征等判断出存在科学上网的行为,但访问内容的隐私仍然是有保证的。
在解析域名时,要向DNS服务器发起查询请求,获得服务器的ip地址。理性的情况当然是:访问国内域名,使用国内最快的DNS服务器(如运营商DNS,校园网DNS);访问海外域名,由代理服务器代理,使用海外DNS。DNS查询不会只使用一个DNS服务器,而是查询多个DNS服务器,选取最快响应的结果。这就导致了严重的问题:解析海外域名时,代理软件不只向海外DNS查询,同时也把请求发送给了国内的DNS,这也就是DNS泄露。
DNS泄露会导致严重的隐私问题:
-
校园网(CERNET)、运营商会知道你访问的海外网站,具体到网站域名。(比如你的导员)
-
海外网站(如netfix)可判断你在科学上网,拒绝为你提供服务。


判断自己是否存在DNS泄露,可以访问下面两个网站,可尝试规则模式和全局模式:
browserscan: https://www.browserscan.net/zh/dns-leak
browserleaks : https://browserleaks.com/dns
判断标准:网站检测到的DNS中,只要存在中国大陆DNS服务器,则存在DNS泄露。
下面的图展示了DNS泄露:

如上图,检测结果里出现了大陆DNS,并且该DNS就是学校里面的街道名称。即访问海外域名的同时,也把请求发给了学校的DNS,造成了DNS泄露。在学校范围内,校园网(教育网)和通讯运营商之间存在合作关系,最终出口服务器仍然有学校参与管理。因此无论使用校园网还是手机流量,DNS泄露后域名解析都可被校方记录。
目前常用的代理软件仍然是clash主流。clash作者宣布停更后,社区转向了mihomo内核。本文只考虑mihomo版本,并同时与sing-box内核的nekoray(nekobox)比较。clash 与 sing-box 尽管不是最新的代理内核,但其可在Windows、Android、软路由上简易安装和配置。
Implements
实验分为软路由和客户端两部分。在软路由方案下,使用openclash(mihomo)插件尝试不同的配置;在客户端方案下,Windows 使用 Clash Verge Rev(mihomo)、nekobox(sing-box),Android使用Flclash(mihomo)、nekoray(sing-box)。

判别DNS泄露的标准是访问上文提到的两个检测网站,出现大陆DNS则存在泄露。为了区别DNS泄露的程度,会记录下每次检测的DNS服务器的数量、ISP、Location数,并着重记录是否存在校园网DNS。
软路由方案
以下均在openclash Fake-IP模式下。
- testA-1:原生设置,rule模式。
- testA-2:testA-2下,rule改成global。
- testA-3:自定义上游DNS, 分流不同请求,rule模式。
- testA-4:testA-3下,rule改成global。
客户端方案
以下方案均进行双端测试。
- testB-1:mihomo默认设置,rule模式。
- testB-2:testB-1下,rule改成global。
- testB-3:sing-box默认设置(开启Fake-IP),绕过大陆。
- testB-4:testB-3下,全局模式。
- testB-5:mihomo开启Fake-IP,DNS路由,rule模式。
- testB-6:testB-5下,rule改成global。
Result


上述结果可以看出,mihomo在rule模式下,启用Fake-IP与否均会DNS泄露,在global模式下泄露消失。而sing-box启用Fake-ip后均不会出现DNS泄露。
Solution
软路由模式
软路由下解决DNS泄露,存在已验证的方案:MosDNS + openclash自定义DNS分流。
参考: 哔哩哔哩:MosDNS+Openclash 设置防止 DNS 泄露:https://www.bilibili.com/video/BV1SEp4zeEfW/
该方案可在Fake-IP下,遵循rule模式并解决DNS泄露。
客户端模式
mihomo内核客户端开启global,或者参照软路由方案修改配置文件yaml,达到类似效果。总之,mihomo在rule模式下解决DNS泄露较为麻烦。
Recommendations
在大学校园网的环境下,进行科学上网时应当注重隐私保护。有的人会反驳:既然都选择用校园网了,并且还科学上网,有什么隐私可言?这是一种典型的“躺平”脑回路。
注重网络空间的隐私是有必要的,尽管加密流量会被侦测,社工库屡禁不止,数据泄露事件频发。借用徐涛老师说的,这是一个“应然”和“实然”的问题。应然是人们的隐私应当受到主动的和被动的保护,实然是大多数人不在乎他人和自己的隐私。为了实现真正的隐私权,必然要有所行动。
如果你是宿舍神圣的网络管理员,你有义务做到:
- 开启DoH/DoT加密DNS
- 排查DNS泄露的问题
- 拦截错误发给校园网DNS的UDP包
如果你是使用者,你也应当自查:
- DNS泄露情况
- 尽量开启global
- 尽量不使用分流
- 在移动设备上配置DoT