本文仅供研究学习技术交流,请勿用于商业及非法用途。如产生任何纠纷,与本人无关。
这是一篇回炉重炒的福利文
本文将介绍一种绕过Web认证来免费上网的姿势,不敢保证在所有网络环境下都好用,但是至少我已经享受一段时间免费的待遇了。
一. 原理简介
在连接到某个需要Web认证的热点之前,我们已经获得了一个内网IP,此时,如果我们访问某个HTTP网站,网关会对这个HTTP响应报文劫持并篡改,302重定向给我们一个web认证界面(所以点HTTPS的网站是不可能跳转到web认证页面的)。详细原理可以戳这里
我们看到了,网关(或者说交换机)都默认放行DHCP 和DNS报文,也就是UDP53与UDP 67。有些网关甚至不会报文进行检查,这也就意味着任何形式的数据包都可以顺畅通过。
既然如此,我们就可以在公网搞一台服务器,然后借此来免费上网,顺便还能防止网络审计——再一次画了删除线的"免费",其实只是把钱花在服务器上了。我们这次免费上网的主要突破点就是UDP 53,当然了,据一位朋友实践,UDP 67也可以绕过Web认证,甚至是那些UDP 53无法绕过的热点。当然啦,TCP 53也行,毕竟DNS也有TCP的。
二. 环境检测
废话不多说了,连上热点并且不要进行认证,打开cmd(或者GNU/Linux的终端),输入如下内容
nslookup www.baidu.com
这是我的结果
我在没有进行Web认证的情况下成功查询到的IP地址,但是我们并无法确定网关是放行了UDP 53的所有数据包还是只放行了DNS报文。所以我们要进一步测试下!如果连这都过不了,那还是洗洗睡吧。好吧,说实话,脚本其实是测试TCP的53。
项目地址
去Git仓库下载源码,之后Linux用户运行
python UDP53.py
Windows用户直接双击dist下的udp.exe吧!
三. 实战:允许任何类型数据包通过的网关(提示congratulations)
遇到这种情况,那就是人生中最幸运的事情啦!想法很简单,既然允许任何类型是数据通过UDP 53,那我就在外网搭建一个UDP 53的服务,然后连接上就好了。
使用UDP 53的OpenVPN(UDP 67同理)
这种情况我选择搭建OpenVPN的UDP 53(或者也可以试试UDP 67),搭建方法我已经在半年前的博文《SoftEther VPN Server安装手记+福利》提到了,只需要最后开启UDP 53的OpenVPN即可。
PS,APP Store大陆区早就封杀了OpenVPN,我来给你们提供一个美国住址来注册美区账号吧
5200 Zoo Dr,Los Angeles, CA 90027 (323) 668-0104
其实,如果是完全放行53(TCP、UDP),那么弄个Shadowsocks也行,开个全局呗。
如果此时抓包,咱能发现,wireshark会告诉咱DNS协议下那些都是malformed packet,必然呐……
四. 实战:仅允许DNS报文通过的网关(提示sad face)
这种情况下,我劝你还是放弃吧。但是并不是不可以免费上网,有一种技术叫做DNS隧道,还有Ping隧道→_→人们为了免费上网还真是什么方法都用上了啊。
万能的SoftEther VPN Server同样提供了这个略显鸡肋的功能
加密与网络-VPN over ICMP / DNS 设置
注意,需要使用SoftEther VPN Client 管理工具4.0以上,VPN over DNS不可以与OpenVPN with UDP 53共存。
之后在SoftEther VPN Client 管理工具中新建连接,填入相关信息即可。
这里我的测试不太多,我从国外论坛上找到这么一句话:
Softether client got it's TCP protocol on top of it's priority as it's the stable one, UDP on Nat-t comes next, then ICMP and then DNS. of all these protocol only the vpn over DNS did not work for me as it fails to retrieve the right ip and gateway.
SoftEther VPN Client先尝试TCP协议,然后尝试UDP on Nat-t,然后再Ping隧道和DNS隧道。
下图是勉强成功建立DNS隧道的截图。
五. 注意事项
1.速度
允许所有数据包通过UDP 53的情况下,速度主要取决于你的服务器的出网带宽和热点本身的网速。
2.IP问题
服务器在外地,所以淘宝支付宝之类的需要验证码之类的。以后如果申诉也要记得把登陆地区选上服务器所在地。
3.安全问题
某些热点是公开的、没有密码保护的,所以可以很轻松的搞中间人攻击——甚至是root的Android手机都可以做到。而OpenVPN可以防止中间人攻击(配置文件里有服务器的证书),同时我使用了AES-128-CBC加密,搞定网络审计简直是轻轻松松的。
六. 服务器的选购
国内VPS价格普遍离谱,恰巧我还是学生党,也算捡到了大便宜→_→不是学生党谁想着免费上网的心思啊?
其实大部分人最关心的问题还是速度吧!
UDP 53的OpenVPN速度主要限制就在热点本身的速度和服务器的出口带宽速度。腾讯云学生版带宽都是1Mbps,所以限制基本就是服务器出口带宽了……
所以下面给大家贴出来我在腾讯云和阿里云撕逼的经验(传说七牛今年也会推出云主机,我很期待啊)
腾讯云:
策略是,每个月赠送"满65元减64元"优惠券,包年包月1核1G内存1Mbps恰巧是65元。至于你怎么凑满那65元,是没有限制的。但说实话,要是选择按流量计费,那流量是很不耐用的...!
阿里云:
价格要比腾讯云稍微贵一点点(接近十块钱),但是可以在购买界面直接选择其他数值的峰值带宽,并且每月赠送15G出网流量。
但是,他丫的要签到!自己看去……
国内学生云服务器优惠也就这两个马家了……
七.买不起服务器、不会搭建、网速太慢
这你叫我咋办。
八. 最后
给大家看看百度的广告,或者是"推广"吧。
TMD整个第一屏都是广告,没有一个字和学生二字贴边。
nslookup
失败是什么意思?无法查询到某些域名对应的IP? 第二个问题,只要你能通过那个脚本的测试(脚本测试的是TCP 53),那么用53端口的ss、ssr就可以,记得设置成全局。加密与网络中的“DNS模式”实际上指的是DNS隧道,我们普通设置的53端口只是利用了web认证必须开放UDP 53(DNS服务)和UDP 67(DHCP服务)这个原理(估计CMCC是对UDP 53的报文进行了过滤)。普通的UDP 53可能不管用,也许67会好用,但是DNS隧道一定是好用的,就是速度不敢恭维。
如何设置DNS隧道的话,在管理面板里的“加密与网络”开启这个功能(不能与OpenVPN的53端口并存),然后用SoftEther VPN Client试试连接,他会自动尝试协议。 如果使用OpenVPN,那么就是常规的去设置个53端口,导出配置文件,然后在手机/PC的应用上使用这个配置文件。