對於在教育網內的同學來說,最大的痛苦就是教育網不能出國和訪問公網速度 慢了(有錢買流量的不用看本文),所以通常有些需求的就必須購買像教育網 直通車之類的加速服務,當然還有另一種選擇那就是花錢買專門的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中,下載,安裝<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”-命令行窗口-輸入“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:\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 這一行,= 後面的參數可以 通過看“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 <passwd> 192.168.56.101 & -p 後面填上密碼明文,不用擔心,你的虛擬機在內網裡,外面聯不進來的。
文章有些長,但我覺得方法還是很好的,尤其是NAT的使用,使虛擬機整個構 成了一個支持所有協議的透明網關。另外,值得注意的是,這個方法適用於幾乎所有的加速器,因為整個設置通過虛擬機實現了對加速器是透明的。所以,希望有所幫助。