校园网禁止多终端共享上网解决方案

免责声明

如若您开始阅读本文,则默认您已阅读、了解、遵守以下免责声明的内容;如您不同意以下声明的任何一项条款,请关闭本页面,并按照学校推荐的上网方式连接到校园网

部分学校明令禁止使用路由器上网( 如禁止任何单位及个人私建 DHCP 服务器或代理服务器等 ),相关规定请检阅网络使用协议或向校方咨询;若有规定明令禁止进行本文中的任何一项内容,本人强烈不推荐您进行相关实践,同时本人亦不会提供任何协助,否则产生的一切后果将由您自行承担

实践本文中提及的内容仅为您个人意愿,本人从未怂恿您进行相关实践,若造成意外、问题与事故,如学校追责、网络中断、硬件损坏、数据丢失、网络安全,与本人无关,本人概不承担任何责任

本文仅供学习交流请勿将相关实践应用于任何商业行为或任何违法、违规行为,否则产生的一切后果将由您自行承担

在进行相关实践后,请于 12 小时内将路由器卸载相关软件、拆除相关设备、恢复到出厂设置,并按照学校推荐的上网方式连接到校园网

前言

今年 3 月初,学校根据省教委的要求,加强了校园网络的安全防护,其中就包括了禁止多终端共享上网。

学校的本意虽好,但却忽略了有多终端共享上网的需求。防火墙也开始检测多终端共享上网的流量,如若检测到,则封禁 3 分钟到 10 分钟不等。虽说不像其他学校封禁半小时、几天那么变态,但毫无规律的封禁(可能是人工手动封禁)十分的恼人。向校方反馈,网管解释“这是为了网络安全”,也不了了之。

正如伟大的敬爱的毛主席所言,“自己动手,丰衣足食”,靠别人还不如靠自己。遂只能上网找文档、手动实践,寻找到去除限制的方法。

本人仅略微了解相关领域的知识,并未专攻,倘若本文存在技术性错误,多多包涵,敬请斧正。阅读这篇文章需要一定的网络知识、电脑知识基础,以及足够的耐心。

情况说明

网络环境

  • 深信服 上网行为管理 AC( 网上有人说用了深信服的防火墙后,破解多终端共享上网的限制基本上是无望了 )
  • Drcom 认证计费网关( 透过 Web Portal 进行用户认证,对非 Windows 的设备十分友好,也省了抓包或重写路由器的认证客户端的屑事了)

局域网内设备

  • Newifi Mini
  • WNDR 4300
  • MacBook Air
  • iPhone SE
  • iPad
  • NAS
  • 智能家居设备

检测原理分析及对应解决技巧

网络上流传着运营商常用的几种检测多终端方法:

IP 包内 TTL 字段的变化

原理

存活时间( Time To Live,简写 TTL )是计算机网络技术的一个术语,指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。每当数据包经过一个路由器时,其存活次数就会被减一。当其存活次数为 0 时,路由器便会取消数据包并发送一个ICMP TTL数据包给原数据包的发出者。其设计目的是防止数据包因不正确的路由表等原因造成的无限循环而无法送达及耗尽网络资源。
例如:如果一个主机的 TTL 是 64,那么当它经过 64 个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。
来源:百度百科

不同的操作系统的默认 TTL 值是不同的,因此运营商可以通过 TTL 值来判断主机的操作系统,但是当用户修改了 TTL 值的时候,会影响判断结果,所以这种方法的准确性并不高。Linux 系统的默认 TTL 值通常为 64,Windows 的通常为 128 或 255。

应对 TTL 检测可以通过修改设备默认 TTL 值来应对,但对于局域网内设备,最好的办法是在网关处进行设置。其余设备的修改方法请自行搜索。

应对方法:通过 iptables 在 OpenWRT 修改 TTL 值( Padavan 固件可在 LAN 设置中直接调整为 TTL 值不减少 )

  • 以 Root 用户登入路由器 SSH
# 在 OpenWRT 路由器上安装必要的软件包
opkg update && opkg install iptables-mod-ipopt kmod-ipt-ipopt
  • 进入 OpenWRT 防火墙设置,在 自定义设置 中填入以下内容( WAN 、LAN 口名称需根据实际情况进行更改 )
  • 点击 保存并应用
# 通过 iptables 修改 TTL 值
iptables -t mangle -A PREROUTING -i eth0.2 -j TTL --ttl-set 64 //修改 WAN 口 TTL 值
iptables -t mangle -A PREROUTING -i br-lan -j TTL --ttl-set 64 //修改 LAN 口 TTL 值

IP 包的 ID 标识检测

原理

IPID 共享检测的机制适用于 Windows 系统的主机。Windows 网络协议栈实现时,IP 报文中 ID 字段的值随着发送 IP 报文数的增加而增加,这里将此 IP 报文连续的值的特征称之为轨迹。Identification 的初始值是随机值,一般来说,不同主机的初始值有较大的差异,所以当检测到多个不同连续的 IP 轨迹即可判断共享主机的数目。IPID 检测技术可以较准备地判断出是否为共享上网用户,判断出共享上网主机数,完全被动监听,不发送探测信息。
来源:Panabit

应对方法:通过 iptables 将 IPID 修改为随机值( 十分困难,需在路由器上手动编译相关模块 )

# 通过 iptables 设置 IPID
iptables -t mangle -A POSTROUTING -j IPID --ipid-pace 1

时钟偏移检测

原理

不同主机物理时钟偏移不同,网络协议栈时钟与物理时钟存在对应关系,不同主机发送报文频率与时钟存在统计对应关系,通过特定的频谱分析算法,发现不同的网络时钟偏移来确定  不同主机。时钟漂移检测以其复杂的计算方法可以非常准确地判断出共享上网主机数以及共享上网用户。
来源:Panabit

应对方法:在局域网中建立 NTP 服务器统一时间戳

  • 进入 OpenWRT 系统设置
    候选的 NTP 服务器地址填写 ntp1.aliyun.com、time1.cloud.tencent.com、stdtime.gov.hk
  • 进入 OpenWRT 防火墙设置,在 自定义设置 中填入以下内容
  • 点击 保存并应用
iptables -t nat -N ntp_force_local
iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1

User-Agent 检测

原理

当一个软件在一个网络协议进行操作时,它通常向它的 Operating peer 提交一个特定的字符串来标示自己,该字符串通常包含了其应用程序类型、操作系统、软件供应商……等等,有时还会包含软件修订版本等信息。在 HTTP、SIP 以及 SMTP / NNTP 协议中,这个识别是通过 User-Agent的头字段传送的。
在 HTTP 中,User-Agent 字符串通常被用于内容协商,而原始服务器为该响应选择适当的内容或操作参数。例如,User-Agent 字符串可能被网络服务器用以基于特定版本的客户端软件的已知功能选择适当的变体。
来源:百度百科

应对方法:统一所有终端的 User-Agent

  • 以 Root 用户登入路由器 SSH
# 更新 OpenWRT 路由器的软件源,并安装 Privoxy 软件包
opkg update
opkg install privoxy luci-app-privoxy luci-i18n-privoxy-zh-cn
  • 进入 OpenWRT Web 后台,进入 Privoxy 管理页面设置
  • 进入文件与目录
  • Action Files 中只保留 match-all.action
  • Filter Files 与 Trust Files 留空
  • 进入访问控制
  • Listen Address 填写 0.0.0.0:8118
  • Permit Address 填写 192.168.0.0/16
  • 勾选 Enable Action File Editor
  • 进入杂项
  • 勾选 Accept Intercepted Requests
  • 进入日志
  • 取消全部选项
  • 点击保存并应用
  • 进入 OpenWRT 防火墙设置,在自定义设置中填入以下内容( 相关地址需根据路由器地址进行调整 )
  • 点击保存并应用重启防火墙
# 将局域网内的 HTTP 请求转发到 Privoxy 代理服务器上
iptables -t nat -N http_ua_drop
iptables -t nat -I PREROUTING -p tcp --dport 80 -j http_ua_drop
iptables -t nat -A http_ua_drop -m mark --mark 1/1 -j RETURN
iptables -t nat -A http_ua_drop -d 0.0.0.0/8 -j RETURN
iptables -t nat -A http_ua_drop -d 127.0.0.0/8 -j RETURN
iptables -t nat -A http_ua_drop -d 192.168.0.0/16 -j RETURN
iptables -t nat -A http_ua_drop -p tcp -j REDIRECT --to-port 8118
  • 打开 http://config.privoxy.org/edit-actions-list?f=0
  • 点击Edit
  • 在 Action 那一列中,hide-user-agent 改选为 Enable(绿色)
  • 在右侧 User Agent string to send 框中填写 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36
  • 其它全部选择为 No Change (紫色)
  • 点击 Submit 按钮
  • 检测修改效果
  • 在所有终端打开 http://www.atool.org/useragent.php
  • 检查 UA 结果是否为刚才所填的“ Macintosh …… ”,如果相等,即生效。否则请重启路由器、关闭终端上的其它代理客户端、重新配置。

原理

同 Http Cookie 一样,Flash Cookie 也就是记录用户在访问 Flash 网页的时候保留的信息,鉴于 Flash 技术的普遍性,几乎所有的网站都采用,所以具有同 Http Cookie 一样的作用。但是Flash Cookie更加强大:1、容量更大;2、没有默认的过期时间;3、存储在不同的地点。只要当用户打开浏览器去上网,那么就能被 AC 记录到 Flash Cookie 的特征值。由于 Flash Cookie 不容易被清除,而且具有针对每个用户具有唯一,并且支持跨浏览器,所以被用于做防共享检测,极大的减少了共享上网的漏判率和误判率,使得我们 AC 防共享方案成为了行业内技术领先、获得众多客户认可的解决方案。当经过代理的电脑上网时,AC 会给每台电脑种植不同的 Flash Cookie,当 AC 检测到一个用户有多个 Flash Cookie 时,则认为是有代理上网。
来源:深信服文档

但通过这种方法来检测也有一定的局限性,Flash Cookie 检测机制会使用到 TCP 89 端口,需要确保测试电脑到设备 TCP 89 端口正常通信。需要电脑安装 Flash id: 45Player,且 Flash Playid: 30id: 30
er 设置”允许站点在此计算机上保存信息”。因此我们可以以此为切入点找到对应的解决方案。

应对方法:禁用 Flash、iptables 拒绝 AC 检测

  • 禁用、卸载所有终端上的 Flash Player
  • 进入 OpenWRT 防火墙设置,在 自定义设置 中填入以下内容( 相关地址需根据路由器地址进行调整 )
  • 点击保存并应用重启防火墙
# iptables 拒绝 AC 进行 Flash 检测
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP

奇淫巧技

深信服 AC 多终端共享检测有一个弊端:无法区分安卓模拟器或虚拟机的流量。因此我们可以向网管投诉:“ 为什么我用安卓模拟器或者是虚拟机也会被当作多终端共享上网 Bla bla bla 之类的 ”;还有另外一点就是 Flash Cookie 检测,在浏览页面时,会常常出现暂时性的空白页面,我们可以就此向网管投诉:“ 为什么会经常出现空白页面 Bla bla bla 之类的 ”。久而久之,网管有可能会向你开放白名单(有生之年系列)。

实践效果

在对路由器统一出口 TTL、统一时间戳标识及统一 UA 外,本人还在一台腾讯云的国内服务器上部署了私人隧道,用于网络流量的加密与混淆,以尽量避免 DPI、DFI 等设备对网络流量的分析。

参考

在编写本文时,本人参考了以下网页的内容,在此由衷地感谢文章作者的无私奉献。

多终端检测

综合

TTL

User Agent

时间戳

iptables 设置

IPID

Flash Cookies

其它