和校园网斗智斗勇的日子(第八辑)
warning:
这篇文章距离上次修改已过35天,其中的内容可能已经有所变动。
前情提要:
和校园网斗智斗勇的日子
和校园网斗智斗勇的日子(第二辑)
和校园网斗智斗勇的日子(第三辑)
和校园网斗智斗勇的日子(第四辑)
和校园网斗智斗勇的日子(第五辑)
和校园网斗智斗勇的日子(第六辑)
和校园网斗智斗勇的日子(第七辑)
本期概要是:总算相对稳定下来了
点击此处,展开目录
时不时的闪断
一直没提到的一点是,从今年年中,也就是五月份左右开始,学校似乎多了对二级设备的检测。如果在校园网上接入一个路由器,不论你是啥类型的,只要下面接了不同类型的设备,比如说电脑+手机,那么就会稳定触发闪断,具体表现是:
- 上网——阻断——上网——阻断 不断循环
- 阻断表现为,IP/UDP全部丢包,TCP被RST(不论端口),且HTTP流量不跳转
- 访问内网地址正常,因此可以排出自己设备问题
- 访问不可达地址(例如google.com)的TCP流量不会被阻断,猜测中间设备需要对方回复后才能注入RST,排除学校设备故障的可能性
也正是这个故障,笔者和学校撕逼大战几百个回合,最终确定,学校是不可能松口的了,只能自己下功夫
根据以上情况判断,学校主要是在检测跨系统共享上网的情况,因此笔者把能找到的方法全部用上去了,把路由器糊成了一块疙瘩
1. 应对TTL,NTP,DNS检测
# 以下内容写入/etc/rc.local
# 其中,eth0是内网卡,eth1是连接校园网的网卡
# 重定向DNS请求
iptables -t nat -I PREROUTING -i eth0 -p udp ! -d 10.1.1.233 --dport 53 -j DNAT --to 10.1.1.233
iptables -t nat -I PREROUTING -i eth0 -p tcp ! -d 10.1.1.233 --dport 53 -j DNAT --to 10.1.1.233
# 劫持 NTP UDP 123
iptables -t nat -I PREROUTING -i eth0 -p udp ! -d 10.1.1.233 --dport 123 -j DNAT --to 10.1.1.233
# 阻断 非本机 DoT
iptables -I FORWARD -p tcp --dport 853 -o eth1 -j REJECT
# 修改 IP TTL
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 128
2. 修改HTTP UA
网上的传统方案是UA2F,但是那玩意需要编译内核模块,有不稳定风险(而且笔者也不会),因此最后采用的技术栈是UA3F + Tun2socks + 策略路由
UA3F是一个Socks服务器,会嗅探其中的HTTP请求,并动态修改UA为指定字符串。为了减轻压力(而且,画重点,学校似乎没有做UA检测,即使有,估计也只是对常用端口进行检测)起见,笔者的策略路由里面规定的是,只有端口为常见HTTP端口的,才会导入到修改器里面
# 给流量打标
iptables \
-t mangle -I PREROUTING -i eth0 -p tcp -m multiport \
--dport 80,8080,8000,9080,8081,9081,81,888,800,808,8880,2052,2082,2086,2095 \
-j MARK --set-mark 0x33
# 设定路由表
ip route add default via <tun2socks的IP地址> table 33
ip rule add fwmark 0x33 table 33
后记
小小地水一期,之后可能考虑一下别的折腾方案了
老实说,这个学校的氛围实在不浓厚, 没有了以前那种全楼二层局域网联机的氛围,也没有了校内网风生水起的论坛/PT/资源站,只有可能还存在的,像站长这样的网络孤岛——谁知道呢
也许,我应该去校园墙问问?