对于在教育网内的同学来说,最大的痛苦就是教育网不能出国和访问公网速度慢了(有钱买流量的不用看本文),所以通常有些需求的就必须购买像教育网直通车之类的加速服务,当然还有另一种选择那就是花钱买专门的VPN。但这里都有一个问题,那就是所有的网络加速服务都只有windows下的客户端,在linux就都没有官方的使用方法了。对有些加速服务,有人想出了一些非官方的办法,比如在知道服务器地址的前提下,教育网直通车可以用PPPoE来连。据说,BrigeWan也可以用类似的方法,但上次在一个论坛里看到因为官网对协议作了点小修改,结果就是必须修改原来写好的连接脚本,而这又要听包,调试等。另外,有人还想用netpas吧,这个是我看到的最便宜的,费用标准也最灵活,除了p2p限制的厉害(会被卡在20KB/S下,而且几乎不浏览网页)外,一般速度还是不错的。现在我用的就是这个。但是因为netpas用的协议比较特殊,PPPoE的方法就不能用了,网上也没有查到有用的资料,唯一搭得上边的也就是linuxdic上的这篇文章了(估计不是原出处),但那是2007年的了,老得几乎没有参考价值。可见,在linux下使用加速器,要么缺乏官方支持不稳定,要么是没有比较新的指导。所以写这篇文章很重要。
好了,废话不说了,下面介绍方法,可能有点长,但内容很丰富;)
2准备工作
2.1好点的机器配置。
既然是用虚拟机跑代理,当然机子内存要大,这点最重要。512M估计是会卡的,1G应该就行,2G以上就很理想了,再小的话可能就要采用些非常手段了,下面也会稍微提到下。
2.2安装VirtualBox
至少3.0以上吧,最好是3.1以上的。VirtualBox这几年开发进度很快,很多特性都加了进去,合理运用能有效减少工作量。Ubuntu下是有的,其它的Linux发行版的源里一般也都有,而且既然你都用Linux了,那么就至少现在能装软件,不知道的话,搜下吧。我用的是Arch64(Archlinux64位)。
2.3安装winxp虚拟机。
VirtualBox怎么用就不说了,VirtualBox本身的文档很详细,网上这方面的介绍也很多。这里提下,windows可以用98的,如果你机器内存小的话,但可能会遇到一些小问题。最好是winxp了,最好不要用一些网上流传的镜像和Deepin啥的,这些都是修改版,难保后面配置时没问题。重新安装个新的,winxpprofessional的,不会用太多时间。最后记得安装VirtualBoxAddition,这个副加包可以提高虚拟机的运行效率,另外还提供不少好用的额外功能。
2.4虚拟机windows中,下载,安装<nat32e>。
NAT32是一个我目前看到的最先进的NAT类软件(一般也叫共享网络连接),我也试过许多其它的,但是要么是没办法满足要求,要么就是不稳定少功能。这个软件是免安装的,但是要安装一个驱动,这个可以手动作。图省事的,就直接点setup就好了。软件是共享的,功能不设限,程序每次只能连续运行2小时,但可以无限制地重新运行,所以这不是个问题,后面有个简单的脚本,能让这个软件几乎总是在运行(无需人为干预)。
2.5可选:虚拟机windows中,下载<3proxy>
3proxy是一个非常非常小的proxy软件,功能很全也很强大,windows和linux下都可以使用。配置的时候是直接修改配置文件的,典型的unix风格。有人喜欢用ccproxy的话,就自己到网上搜下如何使用吧。3proxydownloadsection中有各个版本(包括windows64位的)下载。
3配置与使用3.1设置虚拟机
你这时候应该已经安装好了netpas,并且在linux主机联网的情况下,netpas能联上,然后在虚拟机中能正常上外网。
3.1.1设置网卡
主要是安装完windows后,设置虚拟机的网卡。默认是只有一个NAT网卡,地址是10.0.*.*(*表示任意,当然具体只能是确定的)。这个是VirtualBox自己配置的,后面也要用,但无需额外配置。在网卡配置里启动第二个网卡,选择Host-only(中文应该是主机网络吧?),底下有个连接网线的选项,选中。你还可以把虚拟机中别的不用的设备选项都关掉。图形里的2D图形加速可以选上。启动虚拟机,这时候可以看到,有两个网络连接,找到那个192.168.56.101(大致类似这个的),记下它现在的IP信息,然后修改IP属性,把DHCP改为靜态地址,并把刚才记下的都填上,没多填。这步之所以重要是因为,这个网络连接,过会儿会作为linux主机的网关,所以我不希望它的地址有任何变化,这点尤为重要如果你像我一样经常用到两个虚拟机同时运行的话,这时候DHCP分配的地址会根据虚拟机启动顺序不同而不同。
注:不少学校的网络比较无聊,linux下没有对应的联网客户端,好像有个叫锐捷的网络登录系统就是这样。这时候,推荐你到网上搜一下,有人作过一个linux下的锐捷认证软件,如果还是不行,那么这里你可以用虚拟机联网,不过虚拟机要用一个网桥连接的网卡。这方面网上也有不少资料,这里就不多说了。
3.2虚拟机windows下
3.2.1获取netpas的路由表
必须先启动netpas。开始菜单-运行-输入cmd-命令行窗口-输入routePRINT这时候可以看到,屏幕上输出在netpas启动后的路由表。把这个输出复制到文本文件中,编辑删除所有目标地址为保留地址(0.*.*.*,192.*.*.*,10.*.*.*等)的行,删除那些注释用行,最后文件中每一行都是路由表中的一项,保存并传到linux主机中(用网络传,或是用共享文件夹,这个推荐吧,方便)。
3.2.2配置nat32e
注:因为后面用到了NAT的功能,据说在windows2003server版中有相应的工具进行设置,比较方便可靠。但一来是虚拟机里跑,资源比较紧;二来也懒得再去整另一个系统了,有知道的欢迎留言。另外,我知道有个netsh的命令可以用来配置NAT,但整了挺长时间,没办法找到netpas虚拟网卡的名称(netsh中需要这个),也不想浪费时间去学windows里这个怪怪的命令(用过你就知道了,留着时间学linux吧:),所以放弃了。知道的也欢迎留言。
如果配置过共享上网的机器,在每一个网络联接属性的高级选项里都有一个共享该连接的选项,这其实就是初等的NAT了。但因为netpas的连接比较特殊,这种简单高效的方法不能用了。这里用nat32e来解决这个问题。
先连接上netpas吧,便于后面配置。安装好net32e后,桌面上会有几个图标,第一次用需要用NAT32CFG这个功能进行配置。配置过程本身很简单,基本上都是下一个(next/continue)。只有一个页面需要介入,就是选择内网和外网时。(人懒,就不截图了,相信用linux的都至少有一定的英文基础吧,不过有需要的可以留言,我再作个截图重新说下,这里简单讲)页面上,方框里有一些网卡供选择,一般有三个,每选中一个其下有IP地址,名称等说明。选择框右而有几个单选按钮,Private(内网),Internet(外网)。选上名称为UnknownNameNetpasAdapter的网卡,然后选上Internet按钮,这时候网卡前标记为I,然后选另一个网卡,地址是192的那个,再选上Private按钮。那个网卡前出现个P。好了,下一步直到完成。
配置完成后,以后每次运行时只要点桌面上的NET32RUN就可以了。现在你还不可以通过NAT上网,需要在linux下作一些配置。
3.2.3可选,配置3proxy
注:这个是可选的,就是对那些更喜欢用代理的人来说,或是那些想省事的人,设置代理可要简单得多,而NAT还有不少配置要做,但坚持到最后的人是会有回报的:)
3proxy的功能是非常强大的,有兴趣的或需求可以花时间读一下文档,这里给一个比较通用的配置文件。================================================================================3proxy.cfgStarts==============================
#!/usr/local/bin/3proxy
#Yes,3proxy.cfgcanbeexecutable,inthiscaseyoushouldplace
#somethinglike
#config/usr/local/3proxy/3proxy.cfg
#toshowwhichconfiguration3proxyshouldre-readonrealod.
system"echo3proxyisrunning...!"
#youmayusesystemtoexecutesomeexternalcommandifproxystarts
#Wecanconfigurenserverstoavoidunsafegethostbyname()usage
####!maybeuseful,butdontunderstand
#nserver10.1.2.1
#nserver10.2.2.2
#nscacheisgoodtosavespeed,trafficandband width
nscache65536
#inlogfilewewanttohaveunderscoresinsteadofspaces
logformat"-+_L%t.%.%N.%p%E%U%C:%c%R:%r%O%I%h%T"
rotate30
#Wewillkeeplast30logfiles
internal192.168.56.101
#internalisaddressofinterfaceproxywilllistenforincomingrequests
#127.0.0.1meansonlylocalhostwillbeabletousethisproxy.Thisis
#addressyoushouldspecifyforclientsasproxyIP.
#YouMAYuse0.0.0.0butyoushouldn't,becauseit'sachanceforyouto
#haveopenproxyinyournetworkinthiscase.
authnone
#noauthenticationisrequires
####!maybeusefulinsomeoccassions
#dnspr
#dnsproxylistensonUDP/53toanswerclient'sDNSrequests.Itrequires
#nserver/nscacheconfiguration.
#external$./external.ip
#internal$./internal.ip
#thisisjustan alternativeformfogivingexternalandinternaladdress
#allowsyoutoreadthisaddressesfromfiles
authnone
#Wewanttoprotectinternalinterface
deny**127.0.0.1,192.168.56.101
#andllowHTTPandHTTPStraffic.
allow***80-88,8080-8088HTTP
allow***443,8443HTTPS
proxy-n-p8090
authnone
flush
socks-p9080
===============3proxy.cfgEnd================================================================================================
这是根据3proxy给的样例加以改造的,把它复制到文件中,并保存为3proxy.cfg,然后放入3proxy的bin目录下,双击3proxy.exe运行就可以了。这个配置使3proxy开启了两个代理,一个是http代理,在8090端口;一个是socks5代理,在9080端口。接下来你只要在需要设置代理的程序中设置如下即可:Http:192.168.56.101:8090socks5:192.168.56.101:9080这就是配置3proxy的全部过程,现在你应该可以在firefox里上国外网了推荐使用foxproxy等firefox插件,这些使设置代理变得非常方便。
补充:NAT与proxy的区别
网上介绍的大部分是用代理来共享的,这是因为代理简单,适用范围广。但是,如果能够用NAT的话,最好还是用NAT。原因很简单,要求使用代理的程序必须得支持代理,而且代理一般只支持特定协议如常见的http代理。当然现在有很多socks代理,实际上可以支持任何协议,但首先程序必须能够支持socks代理。这一点其实通常没有满足,这也是为什么像wincaps这样的程序非常的流行,它们可以使原来不支socks代理的程序使用socks代理,但问题依然存在:对每一个你需要用代理的程序,你要单独进行设置,另外可能也有性能上的降低(这个不是很清楚)。另外,似乎linux下没有特别好用这类软件(知道的,欢迎留言),tsocks的开发都停止很多年了。
而NAT虽然并非在所有场合都能用,但一旦使用,你获得的就是从网络底层到高层统一一致的服务,从ping到http,无需再做设置就可直接使用所有网络资源,而且结合使用路由表,灵活性不比proxy差。而在性能上一般也较好。对于在linux中,你可能有IM,需要联网的桌面应用如桌面天气,桌面RSS等,新闻下载客户端Miro,或是开源的联网小游戏teeworlds等。这些中许多没有内置代理支持,而其使用的协议也各式各样。但在NAT下都能直接使用。
3.3linux下配置路由表
这部分应该说是最难的,而且因为大家上网的方式不一致,所以路由表的内容和配置也不同,可能配置上会有些差异(??)
3.3.1导入从windows下获得的netpas路由表(依前修改后)
这个路由表的特点是,所有表中的目标地址的访问netpas都设为不通过netpas加速,这其中包括所处教育网,netpas的服务器地址等等netpas认为不应或不需通过其加速的地址段。把这些都导入到linux下的路由表,其中网关一项全部改为你直接在linux上网时用的默认网关,具体步骤如下:
打开一个终端,以root身份执行命令(su,然后输入root的密码)。命令route-n,会输出目前系统的路由表,记住开头为default的一项后的IP地址,此即当前的默认网关。
用命令routeadd-net<1>netmask<2>gw<3>或routeadd-host<4>gw<5>导入新的路由表项。其中<1>为目标网段,<4>为目标地址,即netpas路由表中的第一列,结尾为0的是目标网段,其它为目标地址。而<2>为网址掩码,也就是netpas路由表的第二列。<4>,<5>都是上一步得到的当前默认网关。不要一个一个输入这些命令执行,先把这些命令写入一个shell脚本,然后再一起执行。脚本应该是类似这样的:
================
#/bin/shecho"NEEDrootauthentication"
echo"ThefollowingisfromNetpasinw32"
routeadd-net58.154.0.0netmask255.254.0.0gw-.-.-.-
routeadd-net58.192.0.0netmask255.240.0.0gw-.-.-.-
routeadd-net59.64.0.0netmask255.240.0.0gw-.-.-.-
routeadd-net121.48.0.0netmask255.254.0.0gw-.-.-.-
routeadd-net121.192.0.0netmask255.252.0.0gw-.-.-.-
================================================================
即一条命令接着一条,网关gw,-.-.-.-要填上你的网关。至少如何执行,具体自己去搜吧,命令是chmodu+x<脚本文件名>,./<脚本文件名>。
3.3.2进一步设置路由表
完成上面的导入,现在就是切换路由路线的时候了。正如前面所说,netpas路由表的表项都是不通过netpas加速的,所以上面都设置为直接通过你现在的网卡连接。而对于其它的地址,我们需要设置其通过netpas。三步:
执行,routeadddefaultgw192.168.56.101",即增加一个默认网关,这个网关就是虚拟机。这一步必须在虚拟机启动后执行才有效,否则。
执行,add-net10.0.0.0netmask255.0.0.0deveth0,即让所有通过netpas加速的包都直接发送到外网端口。这里eth0应换成是你在linux下用来上网的网卡名称。这一步很重要,否则需要加速的包就出不去了。这一步可以在任何时候执行
执行,routedeldefaultgw-.-.-.-。即从路由表中删除你当前的默网关。这样,需要加速的包就必须从虚拟机这个网关通过。
好了,如果虚拟机里netpas和nat32都连上打开了,你现在应该可以上外网了,无需在相应程序中设置:)
4更好的代理
4.1打破2小时的限制
前面说到nat32有连续2小时的限制,然后必须重启nat32.大家都不喜欢限制,要么为什么要用Linux呢?:)那么我们去找破解吧!我去找过,网上的破解大多不能用了,就算能用(没找到,实际上,搜索结果挺多的)吧,也很老了,nat32这个软件1.8版本在2005年就推出了,现在还是1.8版但却是在今年二三月份推出的,我对比了下,差别很大,同是1.8界面功能都不太一样。所以,没有现成的破解。那么我们去写一个破解吧!好吧,我承认,我太菜,这个任务我不能完成,就留给聪明的读者和强大的黑客吧。不过,俺觉得有这个时间,不如写更好的linux程序,这才是长久之道。看多了破解-补丁-破解-补丁-破解的恶性循环。当然有第三种选择,就是写个脚本来自动重新启动nat32,如下:================================================================================repeat_start.batSTART===================
@echooff
echoSimplescripttokeepaprogramrunningallthetime
setprogram_path=C:\NAT32\nat32.exe2
setprogram_name=NAT32
setcount=0
setwait_seconds=30
:LOOP
set/Acount=%count%+1
echo"start%program_name%for%count%time(s)"
rem-waititterminates
start/wait%program_path%
echo"ooooops,itstops..."
echo"waitforabout%wait_seconds%seconds,thenrestart..."
rem-waitforseveralseconds
@ping127.0.0.1-n%wait_seconds%-w1000>nul
@ping127.0.0.1-n%1%-w1000>nul
echo...
echo================================================================
rem-torestartaninfiniteloop
rem-ofcourse,youcanuseaforlooptomakeitrunlimitedtimes
gotoLOOP
================repeat_start.batEND======================================================================================
其中,setprogram_path=C:\NAT32\nat32.exe2这一行,=后面的参数可以通过看NAT32RUN这个桌面快捷方式找到,复制粘贴就行,一般若安装的NAT32就是这个参数。这里这个脚本,其实可以用来维持任意会中断的程序的运行,原理很简单,就是启动程序后,等待其终止,一旦中止就再启动。一般,为了避免一些因为程序刚关闭时的一些问题,最好等一会儿再启动。对nat32而言,因为它用到了驱动,所以感觉最好等久些,我设成了30秒。至于其中等待用ping来实现,则是从网上复制来(人懒,没花时间去研究)的高人前辈的暗黑系魔法。2003server里有个sleep的程序,而xppro里没有。。。以后,每次就不再运行NAT32RUN,而是直接用这个脚本。
4.2更好的路由
其实,netpas路由表是很有限的。现在教育网访问公网,对有的地址其实是很快的,像baidu,youku之类的,应该是相应的网站针对教育网进行了优化。所以,这些也通过netpas加速的效果反而更差。所以,你可以找到这些地址,然后用route来设置为直接访问。这里其实有个不好的地方,就是这里说的设置路由的方法总是要用到root权限。当然,其实路由表是相对稳定了。不知道有没有更好的方法。
4.3不再用了
不用NAT了,要回到正常联网,只需执行下面两个命令:routedeldefaultgw192.168.56.101".routeadddefaultgw-.-.-.-。其实就是,上面设置路由表最后两步的逆过程,其它都不用改。
4.4Somegeekstuff:
对于像我一样,觉得命令行,文本更好,并且觉得应该尽量减少windows在linux中的出现的。介绍两个命令,VBoxManage,VBoxHeadless。VBoxManage,是VirtualBox的命令行,像VBoxManagestartvmxpnet&这个命令,可以用来从命令行启动虚拟机,xpnet是虚拟机的名称。这样就不用每次都打开VirtualBox的图形窗口了:)当然,你会觉得这还不够,为什么要一个windows虚拟机的窗口始终在我的桌面上呢,为什么我只是想用它来联网而它始终要一个显示窗口呢?好吧,让它消失吧~VBoxHeadless,原本的目的是为了在远程服务器上启动虚拟机用的,因为是在远程服务器上,所以服务器上是不应有图形窗口的(没人在那看),所以由它启动的虚拟机是没有窗口的。为了控制由此启动的虚拟机,它支持一个VRDP的协议,相当于VirtualBox的远程桌面。当然,这里我们不用它这个功能,因为开启这个功能会在主机上启动这项服务,可能会导致有人可以从网上联到你的虚拟机。开启winxppro的远程桌面,用VBoxHeadless-startvm=xpnet-vrdp=off&启动虚拟机,用rdesktop-a16192.168.56.101&来连接,如果需要手动调整配置什么的。如果觉得每次输入密码麻烦,用下面这个命令rdesktop-a16-p<passwd>192.168.56.101&-p后面填上密码明文,不用担心,你的虚拟机在内网里,外面联不进来的。
文章有些长,但我觉得方法还是很好的,尤其是NAT的使用,使虚拟机整个构成了一个支持所有协议的透明网关。另外,值得注意的是,这个方法适用于几乎所有的加速器,因为整个设置通过虚拟机实现了对加速器是透明的。所以,希望有所帮助。有指导,有问题的欢迎留言。