對于在教育網(wǎng)內(nèi)的同學(xué)來說,最大的痛苦就是教育網(wǎng)不能出國和訪問公網(wǎng)速度 慢了(有錢買流量的不用看本文),所以通常有些需求的就必須購買像教育網(wǎng) 直通車之類的加速服務(wù),當(dāng)然還有另一種選擇那就是花錢買專門的VPN。但這里 都有一個問題,那就是所有的網(wǎng)絡(luò)加速服務(wù)都只有windows下的客戶端,在 linux就都沒有官方的使用方法了。對有些加速服務(wù),有人想出了一些非官方的 辦法,比如在知道服務(wù)器地址的前提下,教育網(wǎng)直通車可以用PPPoE來連。據(jù)說,BrigeWan也可以用類似的方法,但上次在一個論壇里看到因為官網(wǎng)對協(xié)議作了點(diǎn)小修改,結(jié)果就是必須修改原來寫好的連接腳本,而這又要聽包,調(diào)試 等。另外,有人還想用netpas吧,這個是我看到的最便宜的,費(fèi)用標(biāo)準(zhǔn)也最靈活,除了p2p限制的厲害(會被卡在20KB/S下,而且?guī)缀醪粸g覽網(wǎng)頁)外,一般 速度還是不錯的?,F(xiàn)在我用的就是這個。但是因為netpas用的協(xié)議比較特殊,PPPoE的方法就不能用了,網(wǎng)上也沒有查到有用的資料,唯一搭得上邊的也就是linuxdic上的這篇文章了(估計不是原出處),但那是2007年的了,老得 幾乎沒有參考價值。 可見,在linux下使用加速器,要么缺乏官方支持不穩(wěn)定,要么是沒有比較新的指導(dǎo)。所以寫這篇文章很重要。
好了,廢話不說了,下面介紹方法,可能有點(diǎn)長,但內(nèi)容很豐富;)
2 準(zhǔn)備工作
2.1 好點(diǎn)的機(jī)器配置。
既然是用虛擬機(jī)跑代理,當(dāng)然機(jī)子內(nèi)存要大,這點(diǎn)最重要。512M估計是會卡 的,1G應(yīng)該就行,2G以上就很理想了,再小的話可能就要采用些非常手段了,下面也會稍微提到下。
2.2 安裝VirtualBox
至少3.0以上吧,最好是3.1以上的。VirtualBox這幾年開發(fā)進(jìn)度很快,很多特 性都加了進(jìn)去,合理運(yùn)用能有效減少工作量。Ubuntu下是有的,其它的Linux 發(fā)行版的源里一般也都有,而且既然你都用Linux了,那么就至少現(xiàn)在能裝軟 件,不知道的話,搜下吧。我用的是Arch64(Archlinux 64位)。
2.3 安裝winxp虛擬機(jī)。
VirtualBox怎么用就不說了,VirtualBox本身的文檔很詳細(xì),網(wǎng)上這方面的 介紹也很多。這里提下,windows可以用98的,如果你機(jī)器內(nèi)存小的話,但可 能會遇到一些小問題。最好是winxp了,最好不要用一些網(wǎng)上流傳的鏡像和 Deepin啥的,這些都是修改版,難保后面配置時沒問題。重新安裝個新 的,winxp professional的,不會用太多時間。最后記得安裝VirtualBox Addition,這個副加包可以提高虛擬機(jī)的運(yùn)行效率,另外還提供不少好用的 額外功能。
2.4 虛擬機(jī)windows中,下載,安裝nat32e>。
NAT32是一個我目前看到的最先進(jìn)的NAT類軟件(一般也叫共享網(wǎng)絡(luò) 連接), 我也試過許多其它的,但是要么是沒辦法滿足要求,要么就是不穩(wěn)定少功能。 這個軟件是免安裝的,但是要安裝一個驅(qū)動,這個可以手動作。圖省事的, 就直接點(diǎn)setup就好了。軟件是共享的,功能不設(shè)限,程序每次只能連續(xù)運(yùn)行 2小時,但可以無限制地重新運(yùn)行,所以這不是個問題,后面有個簡單的腳 本,能讓這個軟件幾乎總是在運(yùn)行(無需人為干預(yù))。
2.5 可選:虛擬機(jī)windows中,下載3proxy>
3proxy是一個非常非常小的proxy軟件,功能很全也很強(qiáng) 大,windows和linux 下都可以使用。配置的時候是直接修改配置文件的,典型的unix風(fēng)格。有人 喜歡用ccproxy的話,就自己到網(wǎng)上搜下如何使用吧。 3proxydownloadsection中 有各個版本(包括windows64位的)下載。
3 配置與使用 3.1 設(shè)置虛擬機(jī)
你這時候應(yīng)該已經(jīng)安裝好了netpas,并且在linux主機(jī)聯(lián)網(wǎng)的情況下,netpas 能聯(lián)上,然后在虛擬機(jī)中能正常上外網(wǎng)。
3.1.1 設(shè)置網(wǎng)卡
主要是安裝完windows后,設(shè)置虛擬機(jī)的網(wǎng)卡。默認(rèn)是只有一個NAT網(wǎng)卡,地 址是10.0.*.*(*表示任意,當(dāng)然具體只能是確定的)。這個是VirtualBox自 己配置的,后面也要用,但無需額外配置。在網(wǎng)卡配置里啟動第二個網(wǎng)卡, 選擇Host-only(中文應(yīng)該是主機(jī)網(wǎng)絡(luò)吧?),底下有個連接網(wǎng)線的選項,選 中。你還可以把虛擬機(jī)中別的不用的設(shè)備選項都關(guān)掉。圖形里的2D圖形加速 可以選上。啟動虛擬機(jī),這時候可以看到,有兩個網(wǎng)絡(luò)連接,找到那個 192.168.56.101(大致類似這個的),記下它現(xiàn)在的IP信息,然后修改IP屬 性,把DHCP改為靜態(tài)地址,并把剛才記下的都填上,沒多填。這步之所以重 要是因為,這個網(wǎng)絡(luò)連接,過會兒會作為linux主機(jī)的網(wǎng)關(guān),所以我不希望它 的地址有任何變化,這點(diǎn)尤為重要如果你像我一樣經(jīng)常用到兩個虛擬機(jī)同時 運(yùn)行的話,這時候DHCP分配的地址會根據(jù)虛擬機(jī)啟動順序不同而不同。
注:不少學(xué)校的網(wǎng)絡(luò)比較無聊,linux下沒有對應(yīng)的聯(lián)網(wǎng)客戶端,好像有個 叫銳捷的網(wǎng)絡(luò)登錄系統(tǒng)就是這樣。這時候,推薦你到網(wǎng)上搜一下,有人作過 一個linux下的銳捷認(rèn)證軟件,如果還是不行,那么這里你可以用虛擬機(jī)聯(lián) 網(wǎng),不過虛擬機(jī)要用一個網(wǎng)橋連接的網(wǎng)卡。這方面網(wǎng)上也有不少資料,這里 就不多說了。
3.2 虛擬機(jī)windows下
3.2.1 獲取netpas的路由表
必須先啟動netpas。 開始菜單-運(yùn)行-輸入“cmd”-命令行窗口-輸入“route PRINT” 這時候可以看到,屏幕上輸出在netpas啟動后的路由表。把這個輸出復(fù)制到 文本文件中,編輯刪除所有目標(biāo)地址為保留地址(0.*.*.*, 192.*.*.*, 10.*.*.*等)的行,刪除那些注釋用行,最后文件中每一行都是路由表中的 一項,保存并傳到linux主機(jī)中(用網(wǎng)絡(luò)傳,或是用共享文件夾,這個推薦 吧,方便)。
3.2.2 配置nat32e
注:因為后面用到了NAT的功能,據(jù)說在windows 2003 server版中有相應(yīng)的 工具進(jìn)行設(shè)置,比較方便可靠。但一來是虛擬機(jī)里跑,資源比較緊;二來也懶 得再去整另一個系統(tǒng)了,有知道的歡迎留言。另外,我知道有個netsh的命令 可以用來配置NAT,但整了挺長時間,沒辦法找到netpas虛擬網(wǎng)卡的名稱 (netsh中需要這個),也不想浪費(fèi)時間去學(xué)windows里這個怪怪的命令(用 過你就知道了,留著時間學(xué)linux吧:),所以放棄了。知道的也歡迎留言。
如果配置過共享上網(wǎng)的機(jī)器,在每一個網(wǎng)絡(luò)聯(lián)接屬性的高級選項里都有一個 共享該連接的選項,這其實就是初等的NAT了。但因為netpas的連接比較特 殊,這種簡單高效的方法不能用了。這里用nat32e來解決這個問題。
先連接上netpas吧,便于后面配置。 安裝好net32e后,桌面上會有幾個圖標(biāo),第一次用需要用NAT32CFG這個功 能進(jìn)行配置。配置過程本身很簡單,基本上都是下一個(next/continue)。 只有一個頁面需要介入,就是選擇內(nèi)網(wǎng)和外網(wǎng)時。 (人懶,就不截圖了,相信用linux的都至少有一定的英文基礎(chǔ)吧,不過有 需要的可以留言,我再作個截圖重新說下,這里簡單講)頁面上,方框里有 一些網(wǎng)卡供選擇,一般有三個,每選中一個其下有IP地址,名稱等說明。選 擇框右而有幾個單選按鈕,Private(內(nèi)網(wǎng)),Internet(外網(wǎng))。選上名 稱為Unknown Name Netpas Adapter的網(wǎng)卡,然后選上Internet按鈕,這時 候網(wǎng)卡前標(biāo)記為I,然后選另一個網(wǎng)卡,地址是192的那個,再選上Private 按鈕。那個網(wǎng)卡前出現(xiàn)個P。好了,下一步直到完成。
配置完成后,以后每次運(yùn)行時只要點(diǎn)桌面上的NET32RUN就可以了。 現(xiàn)在你還不可以通過NAT上網(wǎng),需要在linux下作一些配置。
3.2.3 可選,配置3proxy
注:這個是可選的,就是對那些更喜歡用代理的人來說,或是那些想省事的人,設(shè)置代理可要簡單得多,而NAT還有不少配置要做,但堅持到最后的人是會有回報的:)
3proxy的功能是非常強(qiáng)大的,有興趣的或需求可以花時間讀一下文檔,這里給一個比較通用的配置文件。 ================================================================ ================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 ================================ ================================================================
這是根據(jù)3proxy給的樣例加以改造的,把它復(fù)制到文件中,并保存為 3proxy.cfg,然后放入3proxy的bin目錄下,雙擊3proxy.exe運(yùn)行就可以了。 這個配置使3proxy開啟了兩個代理,一個是http代理,在8090端口;一個是 socks5代理,在9080端口。 接下來你只要在需要設(shè)置代理的程序中設(shè)置如下即可: Http: 192.168.56.101:8090 socks5: 192.168.56.101:9080 這就是配置3proxy的全部過程,現(xiàn)在你應(yīng)該可以在firefox里上國外網(wǎng)了 推薦使用foxproxy等firefox插件,這些使設(shè)置代理變得非常方便。
補(bǔ)充:NAT與proxy的區(qū)別
網(wǎng)上介紹的大部分是用代理來共享的,這是因為代理簡單,適用范圍廣。但 是,如果能夠用NAT的話,最好還是用NAT。原因很簡單,要求使用代理的程 序必須得支持代理,而且代理一般只支持特定協(xié)議如常見的http代理。當(dāng)然 現(xiàn)在有很多socks代理,實際上可以支持任何協(xié)議,但首先程序必須能夠支 持socks代理。這一點(diǎn)其實通常沒有滿足,這也是為什么像wincaps這樣的 程序非常的流行,它們可以使原來不支socks代理的程序使用socks代理, 但問題依然存在:對每一個你需要用代理的程序,你要單獨(dú)進(jìn)行設(shè)置,另 外可能也有性能上的降低(這個不是很清楚)。另外,似乎linux下沒有特 別好用這類軟件(知道的,歡迎留言),tsocks的開發(fā)都停止很多年了。
而NAT雖然并非在所有場合都能用,但一旦使用,你獲得的就是從網(wǎng)絡(luò)底層 到高層統(tǒng)一一致的服務(wù),從ping到http,無需再做設(shè)置就可直接使用所有網(wǎng) 絡(luò)資源,而且結(jié)合使用路由表,靈活性不比proxy差。而在性能上一般也較 好。對于在linux中,你可能有IM,需要聯(lián)網(wǎng)的桌面應(yīng)用如桌面天氣,桌面 RSS等,新聞下載客戶端Miro,或是開源的聯(lián)網(wǎng)小游戲teeworlds等。這些中 許多沒有內(nèi)置代理支持,而其使用的協(xié)議也各式各樣。但在NAT下都能直接 使用。
3.3 linux下配置路由表
這部分應(yīng)該說是最難的,而且因為大家上網(wǎng)的方式不一致,所以路由表的內(nèi) 容和配置也不同,可能配置上會有些差異(??)
3.3.1 導(dǎo)入從windows下獲得的netpas路由表(依前修改后)
這個路由表的特點(diǎn)是,所有表中的目標(biāo)地址的訪問netpas都設(shè)為不通過 netpas加速,這其中包括所處教育網(wǎng),netpas的服務(wù)器地址等等netpas認(rèn)為 不應(yīng)或不需通過其加速的地址段。把這些都導(dǎo)入到linux下的路由表,其中 網(wǎng)關(guān)一項全部改為你直接在linux上網(wǎng)時用的默認(rèn)網(wǎng)關(guān),具體步驟如下:
打開一個終端,以root身份執(zhí)行命令(su, 然后輸入root的密碼)。命 令“route -n”, 會輸出目前系統(tǒng)的路由表,記住開頭為default的一項后的 IP地址,此即當(dāng)前的默認(rèn)網(wǎng)關(guān)。
用命令“route add -net 1> netmask 2> gw 3>” 或 “route add -host 4> gw 5>” 導(dǎo)入新的路由表項。 其中1>為目標(biāo)網(wǎng)段,4>為目標(biāo)地址,即netpas路由表中的第一列,結(jié) 尾為0的是目標(biāo)網(wǎng)段,其它為目標(biāo)地址。而2>為網(wǎng)址掩碼,也就是 netpas路由表的第二列。4>,5>都是上一步得到的當(dāng)前默認(rèn)網(wǎng)關(guān)。 不要一個一個輸入這些命令執(zhí)行,先把這些命令寫入一個shell腳本,然 后再一起執(zhí)行。 腳本應(yīng)該是類似這樣的:
================
#/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 -.-.-.-
================================================================
即一條命令接著一條,網(wǎng)關(guān)gw,“-.-.-.-”要填上你的網(wǎng)關(guān)。 至少如何執(zhí)行,具體自己去搜吧,命令是“chmod u+x 腳本文件名>”,“./腳本文件名>”。
3.3.2 進(jìn)一步設(shè)置路由表
完成上面的導(dǎo)入,現(xiàn)在就是切換路由路線的時候了。正如前面所說,netpas 路由表的表項都是不通過netpas加速的,所以上面都設(shè)置為直接通過你現(xiàn)在 的網(wǎng)卡連接。而對于其它的地址,我們需要設(shè)置其通過netpas。三步:
執(zhí)行,“route add default gw 192.168.56.101",即增加一個默認(rèn)網(wǎng) 關(guān),這個網(wǎng)關(guān)就是虛擬機(jī)。這一步必須在虛擬機(jī)啟動后執(zhí)行才有效,否 則。
執(zhí)行,“add -net 10.0.0.0 netmask 255.0.0.0 dev eth0”,即讓所有 通過netpas加速的包都直接發(fā)送到外網(wǎng)端口。這里eth0應(yīng)換成是你在 linux下用來上網(wǎng)的網(wǎng)卡名稱。這一步很重要,否則需要加速的包就出不 去了。這一步可以在任何時候執(zhí)行
執(zhí)行,“route del default gw -.-.-.-”。即從路由表中刪除你當(dāng)前的 默網(wǎng)關(guān)。這樣,需要加速的包就必須從虛擬機(jī)這個網(wǎng)關(guān)通過。
好了,如果虛擬機(jī)里netpas和nat32都連上打開了,你現(xiàn)在應(yīng)該可以上外網(wǎng) 了,無需在相應(yīng)程序中設(shè)置:)
4 更好的代理
4.1 打破2小時的限制
前面說到nat32有連續(xù)2小時的限制,然后必須重啟nat32. 大家都不喜歡限 制,要么為什么要用Linux呢?:) 那么我們?nèi)フ移平獍桑∥胰フ疫^,網(wǎng)上的破解大多不能用了,就算能用(沒 找到,實際上,搜索結(jié)果挺多的)吧,也很老了,nat32這個軟件1.8版本在 2005年就推出了,現(xiàn)在還是1.8版但卻是在今年二三月份推出的,我對比了 下,差別很大,同是1.8界面功能都不太一樣。所以,沒有現(xiàn)成的破解。 那么我們?nèi)懸粋€破解吧!好吧,我承認(rèn),我太菜,這個任務(wù)我不能完成, 就留給聰明的讀者和強(qiáng)大的黑客吧。不過,俺覺得有這個時間,不如寫更好 的linux程序,這才是長久之道??炊嗔?ldquo;破解-補(bǔ)?。平猓a(bǔ)?。平?hellip;…” 的惡性循環(huán)。 當(dāng)然有第三種選擇,就是寫個腳本來自動重新啟動nat32,如下: ================================================================ ================ repeat_start.bat START ===================
@echo off
echo Simple script to keep a program running all the time
set program_path=C:\NAT32\nat32.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:\NAT32\nat32.exe 2 這一行,= 后面的參數(shù)可以 通過看“NAT32RUN”這個桌面快捷方式找到,復(fù)制粘貼就行,一般若安裝的 NAT32就是這個參數(shù)。 這里這個腳本,其實可以用來維持任意會中斷的程序的運(yùn)行,原理很簡單,就 是啟動程序后,等待其終止,一旦中止就再啟動。一般,為了避免一些因為程 序剛關(guān)閉時的一些問題,最好等一會兒再啟動。對nat32而言,因為它用到了 驅(qū)動,所以感覺最好等久些,我設(shè)成了30秒。至于其中等待用ping來實現(xiàn),則是從網(wǎng)上復(fù)制來(人懶,沒花時間去研究)的高人前輩的“暗黑系魔法”。2003 server里有個sleep的程序,而xp pro里沒有。。。 以后,每次就不再運(yùn)行NAT32RUN,而是直接用這個腳本。
4.2 更好的路由
其實,netpas路由表是很有限的。現(xiàn)在教育網(wǎng)訪問公網(wǎng),對有的地址其實是 很快的,像baidu,youku之類的,應(yīng)該是相應(yīng)的網(wǎng)站針對教育網(wǎng)進(jìn)行了優(yōu)化。 所以,這些也通過netpas加速的效果反而更差。所以,你可以找到這些地址,然 后用“route”來設(shè)置為直接訪問。 這里其實有個不好的地方,就是這里說的設(shè)置路由的方法總是要用到root權(quán) 限。當(dāng)然,其實路由表是相對穩(wěn)定了。不知道有沒有更好的方法。
4.3 不再用了
不用NAT了,要回到正常聯(lián)網(wǎng),只需執(zhí)行下面兩個命令: “route del default gw 192.168.56.101". “route add default gw -.-.-.-”。 其實就是,上面設(shè)置路由表最后兩步的逆過程,其它都不用改。
4.4 Some geek stuff:
對于像我一樣,覺得命令行,文本更好,并且覺得應(yīng)該盡量減少windows在 linux中的出現(xiàn)的。介紹兩個命令,VBoxManage, VBoxHeadless。 VBoxManage,是VirtualBox的命令行,像“ VBoxManage startvm xpnet ” 這個命令,可以用來從命令行啟動虛擬機(jī),xpnet是虛擬機(jī)的名稱。這樣就 不用每次都打開VirtualBox的圖形窗口了:) 當(dāng)然,你會覺得這還不夠,為什么要一個windows虛擬機(jī)的窗口始終在我的桌 面上呢,為什么我只是想用它來聯(lián)網(wǎng)而它始終要一個顯示窗口呢?好吧,讓 它消失吧~ VBoxHeadless,原本的目的是為了在遠(yuǎn)程服務(wù)器上啟動虛擬機(jī)用的,因為是 在遠(yuǎn)程服務(wù)器上,所以服務(wù)器上是不應(yīng)有圖形窗口的(沒人在那看),所以 由它啟動的虛擬機(jī)是沒有窗口的。為了控制由此啟動的虛擬機(jī),它支持一個 VRDP的協(xié)議,相當(dāng)于VirtualBox的遠(yuǎn)程桌面。當(dāng)然,這里我們不用它這個功 能,因為開啟這個功能會在主機(jī)上啟動這項服務(wù),可能會導(dǎo)致有人可以從網(wǎng) 上聯(lián)到你的虛擬機(jī)。 開啟winxp pro的遠(yuǎn)程桌面,用“VBoxHeadless -startvm=xpnet -vrdp=off ”啟動虛擬機(jī),用 “rdesktop -a 16 192.168.56.101 ”來連接,如果 需要手動調(diào)整配置什么的。 如果覺得每次輸入密碼麻煩,用下面這個命令 rdesktop -a 16 -p passwd> 192.168.56.101 -p 后面填上密碼明文,不用擔(dān)心,你的虛擬機(jī)在內(nèi)網(wǎng)里,外面聯(lián)不進(jìn)來的。
文章有些長,但我覺得方法還是很好的,尤其是NAT的使用,使虛擬機(jī)整個構(gòu) 成了一個支持所有協(xié)議的透明網(wǎng)關(guān)。另外,值得注意的是,這個方法適用于幾乎所有的加速器,因為整個設(shè)置通過虛擬機(jī)實現(xiàn)了對加速器是透明的。所以,希望有所幫助。有指導(dǎo),有問題的歡迎留言。