在Linux下使用网络加速器netpas

03-05

对于在教育网内的同学来说,最大的痛苦就是教育网不能出国和访问公网速度 慢了(有钱买流量的不用看本文),所以通常有些需求的就必须购买像教育网 直通车之类的加速服务,当然还有另一种选择那就是花钱买专门的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(Archlinux 64位)。

2.3 安装winxp虚拟机。

VirtualBox怎么用就不说了,VirtualBox本身的文档很详细,网上这方面的 介绍也很多。这里提下,windows可以用98的,如果你机器内存小的话,但可 能会遇到一些小问题。最好是winxp了,最好不要用一些网上流传的镜像和 Deepin啥的,这些都是修改版,难保后面配置时没问题。重新安装个新 的,winxp professional的,不会用太多时间。最后记得安装VirtualBox Addition,这个副加包可以提高虚拟机的运行效率,另外还提供不少好用的 额外功能。

2.4 虚拟机windows中,下载,安装。

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”-命令行窗口-输入“route PRINT” 这时候可以看到,屏幕上输出在netpas启动后的路由表。把这个输出复制到 文本文件中,编辑删除所有目标地址为保留地址(0.*.*.*, 192.*.*.*, 10.*.*.*等)的行,删除那些注释用行,最后文件中每一行都是路由表中的 一项,保存并传到linux主机中(用网络传,或是用共享文件夹,这个推荐 吧,方便)。

3.2.2 配置nat32e

注:因为后面用到了NAT的功能,据说在windows 2003 server版中有相应的 工具进行设置,比较方便可靠。但一来是虚拟机里跑,资源比较紧;二来也懒 得再去整另一个系统了,有知道的欢迎留言。另外,我知道有个netsh的命令 可以用来配置NAT,但整了挺长时间,没办法找到netpas虚拟网卡的名称 (netsh中需要这个),也不想浪费时间去学windows里这个怪怪的命令(用 过你就知道了,留着时间学linux吧:),所以放弃了。知道的也欢迎留言。

如果配置过共享上网的机器,在每一个网络联接属性的高级选项里都有一个 共享该连接的选项,这其实就是初等的NAT了。但因为netpas的连接比较特 殊,这种简单高效的方法不能用了。这里用nat32e来解决这个问题。

先连接上netpas吧,便于后面配置。 安装好net32e后,桌面上会有几个图标,第一次用需要用NAT32CFG这个功 能进行配置。配置过程本身很简单,基本上都是下一个(next/continue)。 只有一个页面需要介入,就是选择内网和外网时。 (人懒,就不截图了,相信用linux的都至少有一定的英文基础吧,不过有 需要的可以留言,我再作个截图重新说下,这里简单讲)页面上,方框里有 一些网卡供选择,一般有三个,每选中一个其下有IP地址,名称等说明。选 择框右而有几个单选按钮,Private(内网),Internet(外网)。选上名 称为Unknown Name Netpas Adapter的网卡,然后选上Internet按钮,这时 候网卡前标记为I,然后选另一个网卡,地址是192的那个,再选上Private 按钮。那个网卡前出现个P。好了,下一步直到完成。

配置完成后,以后每次运行时只要点桌面上的NET32RUN就可以了。 现在你还不可以通过NAT上网,需要在linux下作一些配置。

3.2.3 可选,配置3proxy

注:这个是可选的,就是对那些更喜欢用代理的人来说,或是那些想省事的人,设置代理可要简单得多,而NAT还有不少配置要做,但坚持到最后的人是会有回报的:)

3proxy的功能是非常强大的,有兴趣的或需求可以花时间读一下文档,这里给一个比较通用的配置文件。 ================================================================ ================3proxy.cfg Starts ==============================

#!/usr/local/bin/3proxy

# Yes, 3proxy.cfg can be executable, in this case you should place

# something like

#config /usr/local/3proxy/3proxy.cfg

# to show which configuration 3proxy should re-read on realod.

system "echo 3proxy is running...!"

# you may use system to execute some external command if proxy starts

# We can configure nservers to avoid unsafe gethostbyname() usage

####! maybe useful, but dont understand

#nserver 10.1.2.1

#nserver 10.2.2.2

# nscache is good to save speed, traffic and bandwidth

nscache 65536

# in log file we want to have underscores instead of spaces

logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"

rotate 30

# We will keep last 30 log files

internal 192.168.56.101

# internal is address of interface proxy will listen for incoming requests

# 127.0.0.1 means only localhost will be able to use this proxy. This is

# address you should specify for clients as proxy IP.

# You MAY use 0.0.0.0 but you shouldn't, because it's a chance for you to

# have open proxy in your network in this case.

auth none

# no authentication is requires

####! maybe useful in some occassions

# dnspr

# dnsproxy listens on UDP/53 to answer client's DNS requests. It requires

# nserver/nscache configuration.

#external $./external.ip

#internal $./internal.ip

# this is just an alternative form fo giving external and internal address

# allows you to read this addresses from files

auth none

# We want to protect internal interface

deny * * 127.0.0.1,192.168.56.101

# and llow HTTP and HTTPS traffic.

allow * * * 80-88,8080-8088 HTTP

allow * * * 443,8443 HTTPS

proxy -n -p8090

auth none

flush

socks -p9080

===============3proxy.cfg End ================================ ================================================================

这是根据3proxy给的样例加以改造的,把它复制到文件中,并保存为 3proxy.cfg,然后放入3proxy的bin目录下,双击3proxy.exe运行就可以了。 这个配置使3proxy开启了两个代理,一个是http代理,在8090端口;一个是 socks5代理,在9080端口。 接下来你只要在需要设置代理的程序中设置如下即可: Http: 192.168.56.101:8090 socks5: 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.3 linux下配置路由表

这部分应该说是最难的,而且因为大家上网的方式不一致,所以路由表的内 容和配置也不同,可能配置上会有些差异(??)

3.3.1 导入从windows下获得的netpas路由表(依前修改后)

这个路由表的特点是,所有表中的目标地址的访问netpas都设为不通过 netpas加速,这其中包括所处教育网,netpas的服务器地址等等netpas认为 不应或不需通过其加速的地址段。把这些都导入到linux下的路由表,其中 网关一项全部改为你直接在linux上网时用的默认网关,具体步骤如下:

打开一个终端,以root身份执行命令(su, 然后输入root的密码)。命 令“route -n”, 会输出目前系统的路由表,记住开头为default的一项后的 IP地址,此即当前的默认网关。

用命令“route add -net <1> netmask <2> gw <3>” 或 “route add -host <4> gw <5>” 导入新的路由表项。 其中<1>为目标网段,<4>为目标地址,即netpas路由表中的第一列,结 尾为0的是目标网段,其它为目标地址。而<2>为网址掩码,也就是 netpas路由表的第二列。<4>,<5>都是上一步得到的当前默认网关。 不要一个一个输入这些命令执行,先把这些命令写入一个shell脚本,然 后再一起执行。 脚本应该是类似这样的:

================

#/bin/sh echo "NEED root authentication"

echo "The following is from Netpas in w32…"

route add -net 58.154.0.0 netmask 255.254.0.0 gw -.-.-.-

route add -net 58.192.0.0 netmask 255.240.0.0 gw -.-.-.-

route add -net 59.64.0.0 netmask 255.240.0.0 gw -.-.-.-

route add -net 121.48.0.0 netmask 255.254.0.0 gw -.-.-.-

route add -net 121.192.0.0 netmask 255.252.0.0 gw -.-.-.- ================================================================

即一条命令接着一条,网关gw,“-.-.-.-”要填上你的网关。 至少如何执行,具体自己去搜吧,命令是“chmod u+x <脚本文件名>”,“./<脚本文件名>”。

3.3.2 进一步设置路由表

完成上面的导入,现在就是切换路由路线的时候了。正如前面所说,netpas 路由表的表项都是不通过netpas加速的,所以上面都设置为直接通过你现在 的网卡连接。而对于其它的地址,我们需要设置其通过netpas。三步:

执行,“route add default gw 192.168.56.101",即增加一个默认网 关,这个网关就是虚拟机。这一步必须在虚拟机启动后执行才有效,否 则。

执行,“add -net 10.0.0.0 netmask 255.0.0.0 dev eth0”,即让所有 通过netpas加速的包都直接发送到外网端口。这里eth0应换成是你在 linux下用来上网的网卡名称。这一步很重要,否则需要加速的包就出不 去了。这一步可以在任何时候执行

执行,“route del default gw -.-.-.-”。即从路由表中删除你当前的 默网关。这样,需要加速的包就必须从虚拟机这个网关通过。

好了,如果虚拟机里netpas和nat32都连上打开了,你现在应该可以上外网 了,无需在相应程序中设置:)

4 更好的代理

4.1 打破2小时的限制

前面说到nat32有连续2小时的限制,然后必须重启nat32. 大家都不喜欢限 制,要么为什么要用Linux呢?:) 那么我们去找破解吧!我去找过,网上的破解大多不能用了,就算能用(没 找到,实际上,搜索结果挺多的)吧,也很老了,nat32这个软件1.8版本在 2005年就推出了,现在还是1.8版但却是在今年二三月份推出的,我对比了 下,差别很大,同是1.8界面功能都不太一样。所以,没有现成的破解。 那么我们去写一个破解吧!好吧,我承认,我太菜,这个任务我不能完成, 就留给聪明的读者和强大的黑客吧。不过,俺觉得有这个时间,不如写更好 的linux程序,这才是长久之道。看多了“破解-补丁-破解-补丁-破解……” 的恶性循环。 当然有第三种选择,就是写个脚本来自动重新启动nat32,如下: ================================================================ ================ repeat_start.bat START ===================

@echo off

echo Simple script to keep a program running all the time

set program_path=C:NAT32nat32.exe 2

set program_name=NAT32

set count=0

set wait_seconds=30

:LOOP

set /A count=%count%+1

echo "start %program_name% for %count% time(s)"

rem - wait it terminates

start /wait %program_path%

echo "ooooops, it stops..."

echo "wait for about %wait_seconds% seconds, then restart..."

rem - wait for several seconds

@ping 127.0.0.1 -n %wait_seconds% -w 1000 > nul

@ping 127.0.0.1 -n %1% -w 1000> nul

echo ...

echo ================================================================

rem - to restart an infinite loop

rem - of course, you can use a for loop to make it run limited times

goto LOOP

================ repeat_start.bat END ====================== ================================================================

其中,set program_path=C:NAT32nat32.exe 2 这一行,= 后面的参数可以 通过看“NAT32RUN”这个桌面快捷方式找到,复制粘贴就行,一般若安装的 NAT32就是这个参数。 这里这个脚本,其实可以用来维持任意会中断的程序的运行,原理很简单,就 是启动程序后,等待其终止,一旦中止就再启动。一般,为了避免一些因为程 序刚关闭时的一些问题,最好等一会儿再启动。对nat32而言,因为它用到了 驱动,所以感觉最好等久些,我设成了30秒。至于其中等待用ping来实现,则是从网上复制来(人懒,没花时间去研究)的高人前辈的“暗黑系魔法”。2003 server里有个sleep的程序,而xp pro里没有。。。 以后,每次就不再运行NAT32RUN,而是直接用这个脚本。

4.2 更好的路由

其实,netpas路由表是很有限的。现在教育网访问公网,对有的地址其实是 很快的,像baidu,youku之类的,应该是相应的网站针对教育网进行了优化。 所以,这些也通过netpas加速的效果反而更差。所以,你可以找到这些地址,然 后用“route”来设置为直接访问。 这里其实有个不好的地方,就是这里说的设置路由的方法总是要用到root权 限。当然,其实路由表是相对稳定了。不知道有没有更好的方法。

4.3 不再用了

不用NAT了,要回到正常联网,只需执行下面两个命令: “route del default gw 192.168.56.101". “route add default gw -.-.-.-”。 其实就是,上面设置路由表最后两步的逆过程,其它都不用改。

4.4 Some geek stuff:

对于像我一样,觉得命令行,文本更好,并且觉得应该尽量减少windows在 linux中的出现的。介绍两个命令,VBoxManage, VBoxHeadless。 VBoxManage,是VirtualBox的命令行,像“ VBoxManage startvm xpnet &” 这个命令,可以用来从命令行启动虚拟机,xpnet是虚拟机的名称。这样就 不用每次都打开VirtualBox的图形窗口了:) 当然,你会觉得这还不够,为什么要一个windows虚拟机的窗口始终在我的桌 面上呢,为什么我只是想用它来联网而它始终要一个显示窗口呢?好吧,让 它消失吧~ VBoxHeadless,原本的目的是为了在远程服务器上启动虚拟机用的,因为是 在远程服务器上,所以服务器上是不应有图形窗口的(没人在那看),所以 由它启动的虚拟机是没有窗口的。为了控制由此启动的虚拟机,它支持一个 VRDP的协议,相当于VirtualBox的远程桌面。当然,这里我们不用它这个功 能,因为开启这个功能会在主机上启动这项服务,可能会导致有人可以从网 上联到你的虚拟机。 开启winxp pro的远程桌面,用“VBoxHeadless -startvm=xpnet -vrdp=off &”启动虚拟机,用 “rdesktop -a 16 192.168.56.101 &”来连接,如果 需要手动调整配置什么的。 如果觉得每次输入密码麻烦,用下面这个命令 rdesktop -a 16 -p 192.168.56.101 & -p 后面填上密码明文,不用担心,你的虚拟机在内网里,外面联不进来的。

文章有些长,但我觉得方法还是很好的,尤其是NAT的使用,使虚拟机整个构 成了一个支持所有协议的透明网关。另外,值得注意的是,这个方法适用于几乎所有的加速器,因为整个设置通过虚拟机实现了对加速器是透明的。所以,希望有所帮助。