返回

通过Gost利用udp53实现绕过校园网认证全时段免登录上网

今天文档写到一半,突然断网了,原来学校又开始搞0点断网了,虽说本意是为了督促大家早点睡觉,但是有时候真的很不方便,并且断网后大家都改用流量上网,一点之前4G都是卡的难以使用的状态,研究生倒是不断网,但是租一个账号实在是贵,这时候我想到了以前看到的可以利用校园网网关会放行目标端口为53的udp数据包,利用这个特性来实现绕过认证直接上网。当年我想学着搞一下,但是失败了,不过经过一年多的学习,现在的我掌握了更多的知识,所以想着今天再尝试一下吧,竟然成功了!

Gost UDP53绕过网络认证上网

2021/10/4 更新: 如果你们学校没有拦截udp 53端口,那么直接使用 Hysteria就可以了,更加简单快捷且效果好。

今天文档写到一半,突然断网了,原来学校又开始搞0点断网了,虽说本意是为了督促大家早点睡觉,但是有时候真的很不方便,并且断网后大家都改用流量上网,一点之前4G都是卡的难以使用的状态,研究生倒是不断网,但是租一个账号实在是贵,这时候我想到了以前看到的可以利用校园网网关会放行目标端口为53的udp数据包,利用这个特性来实现绕过认证直接上网。当年我想学着搞一下,但是失败了,不过经过一年多的学习,现在的我掌握了更多的知识,所以想着今天再尝试一下吧,竟然成功了!

该方法可以绕过校园网的登录步骤直接上网,也就意味即使不充值也可以直接联网,但是我强烈不建议你这样做,还有请低调使用,不要大范围传播该方法,不然学校直接限制udp53的数据包该方法就失效了。

条件

首先我们要判断校园网网关是否放行目标端口为53的udp数据包,53端口的udp数据包通常用来进行dns解析,所以我们可以连接校园网(不要登陆认证),然后在cmd中输入nslookup baidu.com这样的命令来尝试查询域名。

nslookup
nslookup

可以看见,我科在不登陆校园网的情况下也可以进行dns查询,说明网关至少是放行了53端口的查询dns的udp数据包(是否所有的udp数据都放行我们也不知道,可以继续做下去看看)

准备

如果网关能够放行目标端口为53的udp数据包,那么我们也可以继续做下去了,我们需要自己的服务器来进行代理,国内的和国外的都可以用,在这个示例中,我分别于用了国内的和国外的两台服务器来做演示。 注,服务器需要能够使用53端口,而部分ISP会封禁53端口,还有就是服务器的上传带宽越高越好 我这里用到了一台国内30M上行的联通机器(有空可以试试百兆的)以及新加坡的一台Digitalocean服务器,虽说DO的服务器线路不咋地,白天速度也上不去,但是到了晚上速度还是不错的。
如果你没有服务器或者懒得弄服务器,也可以找我租用,国内国外都可以。

检查vps提供商是否禁用了udp53

这里提供一种思路,使用iperf3在53端口开启服务端,并使用另一台机器从该vps的53端口使用udp的形式下载测速,看看有没有数据传输。
服务器上
iperf3 -s -p 53
随便找一台测试的服务器
iperf3 -c 第一台服务器ip -p 53 -u -R
比如我这测得一台机器,使用udp传输的时候完全没速度

image.png
image.png

使用gost建立隧道

这里和网上那些教程里面提到的用各种VPN不同,我这里用了一个更加简单、高效的软件gost,这个软件可以建立安全隧道,使用指定的传输协议来包装实际的数据,比如可以用tcp/websocket加上tls来包装wireguard的udp流量,我们今天则是要反过来使用udp协议来包装socks5或者v2ray等软件的数据流量,并在53号端口进行监听。

服务端配置

由于gost支持直接使用socks5代理,所以这里我也不用其他的软件来进行代理了(如果你要为其他的代理程序如ss/v2/wireguard建立隧道,看官网怎么写的就好,或者在评论区留言)。

#前往https://github.com/ginuerzh/gost/releases寻找适合你的系统的版本
wget https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz
gunzip gost-linux-amd64-2.11.1.gz
chmod +x gost-linux-amd64-2.11.1
mv gost-linux-amd64-2.11.1 /bin/gost

之后即可输入gost来使用程序,建议在screen或者tmux里面运行程序或者使用&和nohup来让gost在后台运行,这样你退出ssh后gost才不会退出。
gost -L socks5+quic://:53或者gost -L socks5+quic://admin:password@:53
如果用的不是socks代理而是其他的软件可以使用
gost -L relay+quic://:53/127.0.0.1:1000
注意到,这里的传输协议我们使用的是QUIC,该协议是基于UDP的,除此之外其他基于UDP的传输协议也可用,如kcp。

客户端配置

客户端也要前往gost的release页面下载对应版本的gost,我的系统是windows,我下载了gost之后还把文件夹加入到了环境变量中,这样在任何地方都可以使用gost了,不然还要指明路径。
如果使用的是socks5代理,那么直接执行
gost-windows-amd64.exe -L :8082 -F socks5+quic://你的服务器ip:53或者gost-windows-amd64.exe -L :8083 -F socks5+quic://admin:password@ip:53

如果用的是其他的软件,如V2则执行
gost-windows-amd64.exe -L tcp://:8082 -F relay+quic://你的服务器ip:53
并修改v2中的ip和端口为你本地的设置即可。

使用代理绕过认证

浏览网页

之前配置好了客户端并在本地也开启了socks5代理,那么接着我们便可以尝试使用了,很多软件都可以设置socks或者http代理,这里以chrome为例,我这里用到了Proxy SwitchyOmega扩展,该插件的使用教程可以查看https://tmr.js.org/p/73acc153/ ,当然你也可以直接设置系统代理或者用其他的软件测试该socks5代理是否可用。
在该插件中,新建一个情景模式,然后填入客户端设置时使用的端口(如果socks5代理设置了密码这里也要填上)

image.png
image.png

然后记得点击左下角的应用选项,之后我们便可以在浏览器中选择启用该代理,让所有的页面都走该代理。
image.png
image.png

当前我们连接了教育网,但是由于我们没有登录或者到了深夜,我们是连不上网的,访问会被劫持到登录页面,但是当我们开启启用代理后再访问页面。
注意,如果还是访问不了网站的话可以看看gost的服务端是否有输出,如果有输出,那么可能是哪里配置错了,如果没有输出,那就有可能是服务器提供商禁止了53端口的访问(比如我测试的sakura的vps就禁止了53端口的udp数据包)或者校园网网关过滤了非dns查询的数据包,那就只能改用dns隧道了
看上去速度还不错
看上去速度还不错

经验证,如果电脑上想让所有软件都能直接联网的话需要使用一个能够让所有流量都走socks代理的程序,而sstap就可以做到,它虚拟出了一个网卡,并修改了系统的路由表,你甚至还可以在里面再套一个v2用来谷歌一下…不过实际体验貌似不咋地啊,不是很稳,然后速度也上不去,就图一乐吧 补充:速度上不去可能还是我用的国内机器到教育网udp连接的速度上不去,换一台好一点的机器应该还能挽救一下。

全局上网 但是我也不知道为什么那么慢
全局上网 但是我也不知道为什么那么慢

使用QQ

QQ的登陆页面的左上角有个设置按钮,点进去然后设置好代理之后就可以让QQ也使用socks5或者http代理了。

image.png
image.png

安卓使用

一开始我的方案是建立一个v2ray的隧道然后在手机v2rayng客户端里面设置全局代理,但是后来感觉这种方法太麻烦了,经过查询得知安卓可以使用一款名为SocksDroid的软件全局使用socks5代理,对于国内机器上的代理这种方式要合适一些。这个软件可以设置全局代理,然后基本上所有的手机软件都能用了。

image.png
image.png

更加优雅的使用

建议同时开启国内国外两个socks5代理,本地使用不同的端口,然后配合浏览器上的Switch Omega插件,实现浏览网页时的自动切换,国外的软件用国外的代理,国内的软件用国内的代理。

配合Openwrt实现全局免认证联网(推荐

最近给路由器刷上了openwrt,想着gost能不能用在路由器上,并修改路由表来实现客户端无需进行任何配置就可以免认证上网,经过尝试发现的确可行,当然你也可以不用openwrt,只需要路由器能支持修改防火墙规则(路由表)即可。

前往releses下载MIPS指令集版本的gost,如gost-linux-mips-softfloat-2.11.1.gz,传到路由器上,并用gunzip解压,接着我使用了上文提到的通过隧道传输socks5的方式。./gost-linux-mips-softfloat -L :8083 -F socks5+quic://admin:password@ip:53,这样本地的8083端口就运行了一个socks5代理了,接着我们需要把所有的流量都走socks5传输,这里我们还需要一个名为Redsocks的软件。

This tool allows you to redirect any TCP connection to SOCKS or HTTPS proxy using your firewall, so redirection may be system-wide or network-wide.

Redsocks可以让我们使用防火墙将TCP连接导向socks5。opkg install redsocks即可安装(redsocks2也类似)。

然后新建一个配置文件 red.conf

base {
log_debug = off;
log_info = off;
daemon = on;
redirector= iptables;
}

redsocks {
local_ip = 192.168.1.1;  #这里填本地ip
local_port = 10081;
ip = 127.0.0.1; 
port = 8083;
type = socks5;
}

保存之后使用redsocks -c ./redsocks.conf运行,成功运行是没有提示的,用lsof -i:1081可以看到端口已经占用。

接着我们需要前往 openwrt的网络->防火墙->自定义规则设置将所有的流量都导向1081端口(记得关闭openwrt上其他的代理软件,避免冲突)。

!!!注意,请一定注意第二块中的不重定向的ip范围!!!要是设置错了就连不上路由器管理界面了!!!不过实在误操作导致连不上的话,重启路由器也能解决。(别问我为什么知道的)

iptables -t nat -N REDSOCKS
iptables -t nat -A PREROUTING -i br-lan -p tcp -j REDSOCKS
iptables -t nat -A PREROUTING -i br-lan -p udp -j REDSOCKS

# Do not redirect traffic to the followign address ranges
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 10.8.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/24 -j RETURN
# Redirect all kinds of traffic

iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 1081
iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports 1081

之后便可以看到路由器中的gost有了输出,然后尝试百度一下“我的ip”,发现确实可以上网了。

个人感觉目前来说,这种方案是最舒适的了,连上路由器的设备不需要进行任何配置。不过貌似还存在一些异常,不知道是不是因为udp无法正常传输的问题。可以尝试使用redsocks2,应该可以解决这个问题,另外由于加密的gost隧道还是比较消耗性能的,所以速度有些上不去,条件允许的话,gost和redsocks可以在路由器下的树莓派之类的设备上运行,路由器只负责修改防火墙设置,速度应该能快很多(iptables应该有变动,我还没尝试)。

计划

我计划在宿舍放一台路由器,并接一个树莓派,树莓派上运行gost客户端,开启socks5代理,那么理论上寝室周围只要会设置socks5代理的人都可以在0点之后上网了(前提是不停电)。 ——已经实现,不过可惜晚上还会断电,所以仅仅是理论上可行。


记住 “闷声发大财”,还有不会的或者觉得我没讲清楚的请留言,如果自己没有服务器或者嫌太麻烦也可以来我这租个用。
还有就是,虽然通过这个方法可以夜间断网后继续上网,但是还是建议大家早点休息。

comments powered by Disqus
本站访客数:
Built with Hugo
Theme Stack designed by Jimmy