tags:有趣小实验
实验室里限制了网速,一般情况下网速最快能达到1 MB/s 。平日里用的话还凑合,但是如果想下载点资料什么的网速是大大的不够。所以萌生了一个“突破网速限制的想法”。我们实验室里电脑的上网方式是这样的:
电脑可以设置动态获取IP地址或者自己设置一个静态的和网关在同一个网段中的IP地址,然后打开浏览器随便上一个网页,就会跳转到一个认证的页面,填写好自己的学号、密码之后就可以随意上网了。
而且,更为重要的是我们校园网一个账号可以多终端登录。也就是说,一个账号在电脑 A 上登录之后在电脑 B 上还可以登录。
所以这篇文章针对如上所述的情况,利用工具VMWare、爱快软路由和我们校园网账号可以多终端登录的特性,实现了一号多播和带宽叠加。
由于是读研狗,下面写的东西设计的理论和思考过程可能比较多,如果只是对具体的操作过程感兴趣,请借助目录直接跳转到具体操作。
刚开始解决这个问题的时候,最先进入脑海的问题就是学校是如何进行限速的,知道了限速的原理才能更好的解决这个问题,所谓知己知彼。在知乎上面看到了一个比较靠谱的说法:
- 基于以太网(链路层)的限速,因为802.3规范里有PAUSE帧,还有各种各样的QoS,只要用这些就可以达到限速的目的,同时对于低速设备和不支持PAUSE帧的设备,可以采用发冲突包的方法(以太网报文遇到冲突包会自动重发)。
- 基于IP层的限速,因为IP包头有源地址,而转发(过路由)的时候源地址都要重写的,那么如果发现某个源地址流量过大,直接把IP包丢了就行了。
- 基于TCP的限速,同样的,因为转发要过路由,所以不停的发retransmission就可以了。
- 基于协议的、UDP的限速,限速时,解析其端口号等内容,判断包的性质,超过流量了就丢了。
由于不大好确定学校具体使用的那种方式,所以找到一个普适的方法还是很关键的。
虽然不能够确定学校里使用的具体的方法,但是通过分析了上述的校园网认证网页的源码,发现其(中的逻辑或者说浏览器)不仅上传了登陆用的学号和密码,还收集了本机的IP地址、Mac地址上传到了服务器。这样也就是说,学生 S 点击了登录之后,校园网中有这样一个设备,能够以某种方式记录下来IP地址为 IPA ,mac地址为 MacA 的主机A拥有了上网的权限(此处具体的是接入的电信还是教育网我也不大明白,因为我从百度IP看到的自己IP地址和从教育直通车看到的自己的IP地址是不一样的,但是不影响我们的进一步工作),换言之校园网中的路由设备只把认证过的主机发送的数据包转发到校园外的网络中去。通过如上的讨论,
如果能有这样一套工具、方法使我自己的电脑能有多个网卡连接到校园网上面,或者能连接到一个有多个网卡的路由器上,此路由器连接到校园网上。然后为每个网卡都完成上述的验证登录,再通过一种方式实现流量的均衡。
那么就能够实现设想的带宽的叠加了。
幸好有前人的努力,借助VMWare和软路由,上面这样一个想法可以很方便地实现。实际测试了几个软路由,分别是海蜘蛛、mikrotik、爱快
。海蜘蛛和爱快基本功能相似属于“傻白甜”式的路由器,但是爱快比海蜘蛛方便在可以动态的检测整个路由器系统的状态,而且界面也好看。至于mikrotik,专业级路由器,绝对可以实现设想的功能,但是配置实在是太复杂了,折腾了好几天也没搞定,最终还是选用了爱快软路由,以下简称爱快。
爱快提供了方便配置的负载均衡的方法,至于如何为每一个网卡实现校园网认证,就需要手动的配置了。
软路由的安装比较简单,爱快官网上面下载好镜像之后,参照这个安装教程完成安装。安装过程中需要注意的是,硬盘选择IDE类型,所有加入的网卡都是桥接模式。我为路由器虚拟了五个网卡,都是桥接模式。最终虚拟的配置如下图
五个网卡中的一个端口作为lan口,连接连接我的电脑。其余的四个作为wan口连接到校园网中。如果能够为每个wan口都认证,可以获得四倍的带宽加成。
安装完成,然后重启后可以看到如下界面。
此时容易理解的拓扑如下图所示:
爱快默认的web管理地址如上图示:192.169.1.1:80
,也就是说其lan口的默认地址为:192.168.1.1
,我将自己的电脑的IP地址改为192.168.1.0/2
4网段中的一个,譬如192.168.1.2
,然后将默认网关改为爱快的lan口192.168.1.1
,DNS改为之前动态获得IP地址时的DNS地址,最终改完之后的主机的IP地址如下图所示:
这个时候在浏览器中输入:192.168.1.1
,回车。然后就可以看到爱快路由器的登陆界面了。
爱快默认的登录密码是用户名admin
,密码admin
。
下一步要做的事情是,为每个wan口绑定网卡并设定为DHCP模式。首先选择网卡
然后,配置网卡为DHCP模式,并且按照要求设置次wan口对应的带宽。
点击保存之后,稍等片刻刷新一下就可以看到网卡自己获得了IP地址。
下面的操作比较机械了,点击图示“加号”,多添加几个网卡,然后按照上面的步骤配置好
按照上面的步骤配置好之后,爱快默认所有的流量都走wan1口,此时用浏览器随便打开一个网页,应该就会跳转到校园网的认证界面,填写好账号密码后登陆,此时wan1口就经过了认证了。我们的目的是使每一个网卡都经过认证,做法是通过下图示的爱快的“默认路由”的功能为每个wan口(的网卡)完成认证。
首先选择选择wan1作为默认路由,在浏览器中其他页面随便打开一个地址就会弹出“上网登录”的页面,登陆之。
然后选择wan2作为默认路由,在浏览器中其他页面随便打开一个地址弹出登陆界面,登陆之。以此类推,登录wan3,wan4。登陆的过程中可能出现登陆界面无法加载的情况,这个时候需要针对对应的wan口,先 “断开” DHCP连接然后再重新连接即可。使最后的wan4登陆之后,取消wan4作为默认路由,即所有的wan口都没有选择作为默认路由。
现在在学校的校园网管理页面中可以看到我有四个对应的登录。
此时四个网口都经过了认证,需要做的就是对所有(TCP)连接,使其在四个wan口负载均衡。具体的原理在下文中讨论,下面需要做的具体的事情是:
爱快中路由规则强弱为负载均衡>默认路由
,也就是说设置负载均衡之后还有问题去测试修改默认路由的时候,需要先禁用负载均衡的规则。在爱快中添加负载均衡规则
具体设置如下
点击完确定不管你信不信,这个时候已经实现带宽的叠加了。此时我的dota2更新速度
你可能在想,为毛折腾了半天网速并没有快到超出想象。其实事实是这样的,由于现在我的电脑在真正向外发数据包之前会把数据包发给虚拟机中的爱快,爱快要处理一遍每一个数据包然后重新封装修改校验和。这些操作的重担最终还是落在了我自己的电脑上,所以开四个wan口的时候我的CPU已经是这样的了
我试了一下我自己的电脑,五年前的五千块的华硕普通笔记本,三个wan口已经是极限了,网速最快也就能达到3MB/s。不过现在限制我网速的已经不是校园网,而是我自己的CPU的计算能力了,开心。^_^
上面稍微提到过配置好了软路由之后的上的拓扑关系,但是逻辑上的拓扑是这样的。参照一图看懂host_only nat bridge拓扑结构和VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系,此时的网络实际拓扑如下图所示:
为了验证上图的拓扑结构(注意VMNet0是一个交换机,不是路由器,并不能在控制面板\网络和 Internet\网络连接
中看到它),可以在启动了爱快并为每一个wan口动态申请到IP地址之后,进行测试。假设此时wan1口IP地址为58.198.177.14
,主机中直接使用tracert
测试该IP地址可得:
PS C:\Windows\system32> tracert 58.198.177.14
通过最多 30 个跃点跟踪到 58.198.177.14 的路由
1 1 ms 1 ms 1 ms 58.198.177.14
跟踪完成。
下面的部分均为个人推测,如果有任何问题,欢迎指正。
可以看出数据包不需要经过路由器直接到达了wan1口。那么在这样的拓扑的情况下,爱快软路由是如何工作的呢?由于主机中配置的默认路由为192.168.1.1
,在最开始的情况下主机是不知道192.168.1.1
这个网口对应的mac地址的。于是,在想要发送第一个数据包的时候主机使用arp协议通过VMNet0找到了lan1口的mac地址。从此之后,主机发送的数据包的目的mac地址
都是lan1口的mac地址了。在VMNet0收到数据包之后,通过分析发现mac地址和爱快软路由lan1的mac地址相等,于是将数据包给lan1口,这样数据包就到了爱快软路由里面了。假设此时已经开启了负载均衡,爱快会分析这是不是一个SYN
数据包,就是说这是不是一个TCP三次握手的第一次的数据包。如果是的话,假设此数据包的目的IP地址为10.10.10.10
,找到几个wan口上面实时(tcp)连接
最小的一个wan口wan1,使用NAT技术将此次的TCP连接映射wan1口上,也就是说主机发给10.10.10.10
的数据包原IP地址 (原端口也改了,此处省略端口暂不讨论) 都被爱快软路由改成了wan1的IP地址。
但是这里不能确定的是爱快究竟是依照
(目的IP地址)
的一元组还是(目的IP地址,目的端口)
的二元组来区别两个链接的。
另外测试发现, 迅雷,BT下载可以使用使用此方法加速, 百度网盘,一般的网盘工具是不可以加速的。
CSDN主页
这同一个页面,主机通过NAT伪装的IP地址也可能是不一样的,因为这是多个HTTP连接。所以可能会导致CSDN老是提醒需要登陆。