基础知识篇:为什么使用组织网络看绿色网站会被铁拳制裁?

本人非计科类及相关专业,如有错误欢迎指正

本篇作为实际教程的先导篇,力争使用通俗易懂的语言向你讲解组织如何审查及管理网络流量

校园网共享检测实际上就是针对不同类设备合用同一接入方法的特制审查

本文的讨论仅基于所有权归属于自己的设备,归属于组织的设备请不要尝试作为个人设备使用

一切的开端

拦截示例
小A结束了上午早八下午实验的一天,晚上夜深人静打算看点好康的,于是保持校园网(受管制的组织网络)连接打开了JMComic,没想到还没起飞就被跳转到了一个拦截页面,吓得他没起飞就坠机了,达成了个人最快飞行成就 第二天辅导员找到小A想要小A解释访问绿色网站的事,喜提检讨书一封,小A虽然不知道自己是如何被发现的,但已经预定了的行程自然是不可取消的,于是第二天晚上他尝试断开校园网连接,飞行一切顺利,好像昨天的事情未发生过一般

网站是怎样被访问的?

既然小A可以使用数据起飞,那组织的网络中必然有蹊跷,在此之前,让我们先来看看客户端是怎样访问网站的。我们先来了解访问网站相关的基本概念:

  • 客户端:你的手机,电脑及其上面运行的软件等
  • 服务器:一台不关机的特殊电脑,负责给客户端提供内容。比如你访问 baidu.com 就会有百度的服务器发送给你百度的logo等内容
  • DNS:DNS就是互联网的电话本,比如你的联系人里AD对应10010,你呼叫10010只需要输入AD即可。DNS同理可以将人类容易记忆的域名(此例中为18comic.vip)转化为相对难以记忆的IPv4地址(172.66.162.116)或更难记忆的IPv6地址(2001::c73b:95ef)
    • 需要注意的是,普通的DNS请求由于没有加密,连接的参与者(如路由器,ISP,甚至是中间人等)可以做完全的监听和修改,后文会介绍如何使用加密DNS
  • HTTP与HTTPS:是用于进行网络数据交换的协议,小白需要知道的是HTTP是明文,即组织能看到你使用HTTP发送的内容,而HTTPS由于对内容的加密,获取HTTPS内容比较复杂
    • 审查漏洞(SNI):虽然HTTPS加密了具体内容,但在建立连接的初期,客户端会发送一个叫 SNI(服务器名称指示) 的明文字段。根据此字段仍能知道你访问的网站,并以此进行拦截
  • 在HTTP协议中,存在一种名为HTTP标头(HTTP header)的特殊字段,我们需要了解的主要是以下两个:
    • Host:HTTP协议中用于确定客户端希望获得的网站名称
    • User-Agent (UA):HTTP协议中客户端的“自我介绍”,分析User-Agent即可判别当前客户端的种类及使用的软件,例如:
      • Mozilla/5.0 (Linux; Android 12; HarmonyOS; CET-AL00; HMSCore 6.15.0.312) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.6.310 Mobile Safari/537.36 这是一台华为Mate 50使用华为内置浏览器发出的请求
      • Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0 这是一台Windows电脑使用Firefox浏览器发出的请求

让我们以一次对18comic.vip的请求为例,展开说明各项的作用及其中可能被用作识别的薄弱点

  1. 客户端发起DNS请求
  2. DNS服务器返回18comic.vip对应的服务器地址
  3. 客户端与18comic.vip服务器进行明文的HTTP连接,其中发送了请求的 Host: 18comic.vip 以及客户端UA
  4. 服务器响应301(地址发生转移),需客户端以HTTPS协议访问该站点
  5. 客户端与18comic.vip服务器进行加密的HTTPS连接,在加密前发送了SNI: 18comic.vip建立加密连接后开始浏览网站
WireShark示DNS响应的结构
Reqable示HTTP请求中的Host和User-Agent字段

网站是怎样被拦截的?

通过上文的描述,我们了解了网站是如何被访问的,站在整个连接建立的视角,我们可以发现以下漏洞以帮助我们识别某客户端正尝试访问的网站:

  • DNS拦截:组织对内网的DNS服务器完全可控,且客户端默认使用随网络配置下发的内网DNS服务器,商品化的管理系统一般都会配备数据库,比如向DNS请求18comic.vip会被自动标记为请求疑似绿色网站,此时DNS可以仅标记(响应正确的IP并在后台记录);篡改(修改到本地服务器以实现警告页效果,如果此时正在试图建立HTTPS连接则会弹出连接不可信);响应空地址(如0.0.0.0,将表现为网页始终连接错误)
  • 服务器黑名单:检查客户端尝试访问的IP地址,如172.66.162.116,若该地址在禁止访问的绿色网站规则内则切断连接或屏蔽,表现为浏览器白屏或显示网页被重置
  • HTTP Host(仅HTTP):通过对HTTP包Host字段的嗅探检查客户端是否在访问被禁止的域名,如果是则切断连接
  • HTTPS SNI(仅HTTPS):通过对HTTPS加密协商前SNI字段的嗅探检查客户端是否在访问被禁止的域名,如果是则切断连接

校园网是怎样判定网络共享的?

前文提到,校园网共享检测实际上就是针对不同类设备合用同一接入方法的特制审查,让我们看看哪些字段可以用来检测某一个设备后有其他设备共享连接:

  • User-Agent
    • 前文提到,分析User-Agent即可判别当前客户端的种类,而且即使加以注意总会有HTTP流量成为漏网之鱼,于是基于User-Agent的设备检测即成为可行方案,还是之前的例子:
      • Mozilla/5.0 (Linux; Android 12; HarmonyOS; CET-AL00; HMSCore 6.15.0.312) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.6.310 Mobile Safari/537.36 这是一台华为Mate 50使用华为内置浏览器发出的请求
      • Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0 这是一台Windows电脑使用Firefox浏览器发出的请求
    • 在上两个UA中,可以很容易获取到Windows NT 10.0以及Android 12等关键词,甚至可以直接获取设备的型号,可以被用于广告营销等其他用途
  • 存活时间(Time To Live,TTL),指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。 每当数据包经过一个路由器时,其存活次数就会被减一。当其存活次数为0时,路由器便会取消该数据包转发。其设计目的是防止数据包因不正确的路由表等原因造成的无限循环而无法送达及耗尽网络资源
    • 不同的操作系统的默认 TTL 值是不同的,一般来讲 Windows 是 128, macOS/iOS、Linux 是 64
    • 简单来讲,如果将Linux设备A的网络共享给Linux设备B,形成如下拓扑:Internet - A - B,由于B连接网络需要A作为路由器中转,故由B始发A转发的包会出现TTL值为 64 - 1 = 63 的情况,而A自己发出的包 TTL 仍为64,由此即可检测共享
  • TimeStamp:由于每种设备所附带的计时方案并不是相同的,所以可能在较小的时间单位上存在误差,这种差异是可被察觉的,由此即可检测共享
  • Captive URL:
    • 你一定碰到过这样的情况,连接到机构网络但未登录账号无法访问外部网络,此时设备会提示你无网络甚至帮你打开网络登录页面,这就是Captive URL的作用,现代操作系统一般会定时访问某个特定地址(如 30s 一次)来确认自己是否连接互联网,这个特定地址就叫做Captive URL,比如小米的Captive URL:https://connect.rom.miui.com/generate_204
    • 此URL厂商可自定义,各家手机厂均有自己的Captive URL,服务器地址均相对固定,上文中介绍我们可以通过嗅探Host/SNI获得域名,如果同一个设备访问了多个厂商的Captive URL则有共享网络的嫌疑

如何避免上网行为被记录?

通过上文的讨论,可以得出以下结论:
1. 我们需要避免使用组织提供的DNS
2. 我们需要规避使用明文的HTTP协议
3. 如有可能我们需要打造自己的网络出口
具体的实现方法:
1. 使用腾讯、阿里等服务商提供的的加密DNS(DNS over TLS/HTTPS),这种查询方式可确保查询结果不被第三者查看和篡改,但需要客户端支持
2. 打开浏览器的HTTPS-Only模式
3. 搭建中转代理

设置加密DNS

Windows 10/11
  • 设置 -> 网络和 Internet
  • 属性
  • DNS 服务器(右侧编辑)
    按照如下顺序填入:
    120.53.53.53
    https://doh.pub/dns-query
    223.5.5.5
    https://dns.alidns.com/dns-query
Android
  • 搜索“私人DNS”(一般在第一个设置区即网络与连接区的最后一项内)
  • 选择指定DNS服务器并填入 dot.pub
iOS / iPadOS
  • iOS 缺少用户层面的设置,需配合描述文件更改
  • 描述文件可更改系统隐藏的设置项,请务必审阅描述文件内容并信任其来源!
  • 使用 Safari 打开:api.965server.top/apple-dns
  • 下载描述文件后打开设置,转到通用 - VPN与设备管理
  • 点击 DNSPod-DoT 并右上角安装

HTTPS-Only 模式

  • 浏览器的HTTPS-Only模式优先连接HTTPS而不是HTTP,从源头上杜绝第一次HTTP请求的信息泄露
  • 火狐浏览器(安装包)打开设置 -> 隐私与安全 即可找到HTTPS-Only模式
  • Safari默认连接HTTPS,推荐打开不安全连接警告:设置 - > APP -> Safari -> 隐私与安全性 -> 不安全连接警告

搭建中转代理

  • 某些情况下也需要大陆内的服务器做代理来更好的抗共享检测,入门篇暂不涉及,巨坑待填

写在最后

  • 本文第一次写于2025.07.23
  • 参考文档:
    • 关于某大学校园网共享上网检测机制的研究与解决方案
    • 腾讯 DNSPod Public DNS
    • 阿里公共 DNS
    • 免费公共 DNS 服务器大全