在Win7中利用ptproxy和obfs4proxy混肴Shadowsocks連線
沒在大陸生活中上網的人絕對不會想像要上個Facebook、Google查資料、收發GMail是件多麼痛苦的事,儘管最近比較流行的翻牆工具Shadowsocks仍舊可用,但是時不時就給你斷一下,真的很煩!
所以那些電腦程式設計比較強的大陸工程師就又想了一個辦法,把Shadowsocks通訊加上外衣,本來Shadowsocks就已經有混肴了一次,所以我們又再加一次,這樣就可以瞞過大陸的GFW防火牆。
網路混肴功能在很多年前就已經有了,但是遇到大陸的國家級防火牆照樣被封,所以在這我們用最新版本的obfs4來處理!至於obfs4是什麼,自己上Google查吧!
以下的內容必須要有系統設定的基礎,如果是不懂電腦的人,還是不要自己操作。
一、需求
伺服器:笨笨包今天試驗了一整天發現OpenVZ的VPS根本不能用,所以我們需要一個KVM架構的VPS。
客戶端:自己的Windows 7。如果你要用其它不同的Windows版本,我沒試過,如果有問題我沒法幫忙。
在你的電腦中下載Tor Browser for Windows ,目前最新版是5.0.3,什麼語言版本都無所謂。
其實Tor Browser for Windows也是個翻牆的工具,但是只能使用他們的瀏覽器,而且,使用還必須要再利用外部的proxy取得橋接的訊息,這並不符合我們的需要。
下載後的Tor Browser for Windows實際上只是個免安裝的壓縮檔,你執行後會出現一個Tor Browser資料夾,我們需要\Tor Browser\Browser\TorBrowser\Tor\PluggableTransports裡面的一個叫做obfs4proxy.exe的檔案,把這個檔案複製到Windows的ptproxy資料夾裡面。
二、設定伺服器
笨笨包習慣使用Debian 7,如果是其它的系統,暫時我也不懂。記得Shadowsocks要先裝好!
- 安裝git、python3
apt-get install git python3
- 下載Debian專用obfs4proxy,可以從這個網站選擇下載適合的deb安裝包,然後使用 dpkg -i 安裝。
- 複製 https://github.com/gumblex/ptproxy.git 副本到伺服器上
git clone https://github.com/gumblex/ptproxy.git
- 下載後,用文字編輯器打開example.json,修改一下以下內容,然後另儲存為server.json(檔名可隨意設)。
{
“role”: “server”,
//指定工作模式為server”local”: “127.0.0.1:12345″,
//12345通訊埠改為你的shadowsocks服務通訊埠。”server”: “伺服器IP:通訊埠”,
//指定收发混淆数据的监听端口”ptargs”: “cert=AAAAAAAAAAAA;iat-mode=1”,
//只要修改iat-mode參數為1或者2即可,cert不需要修改//其它的內容要保留,但是別修改
} - 執行伺服端
python3 ptproxy.py -s server.json
執行後畫面會出現以下訊息
2015-10-02 18:16:49 Starting PT…
===== Server information =====
“server”: “xxx.xxx.xxx.xxx:xxxxx”,
“ptname”: “obfs4”,
“ptargs”: “cert=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx;iat-mode=1”,
==============================
2015-10-02 18:16:49 PT started successfully.而第一次執行後,ptproxy資料夾會產生obfs4_bridgeline.txt、obfs4_state.json、obfs4proxy.log三個檔案。
如果出現iat-mode=0,停止剛剛執行的指令,然後修改obfs4_state.json裡面,將obfs4_state.json裡面的iat-mode=0修改為iat-mode=1或者iat-mode=2。
修改完畢再重新執行一次,如果畫面中iat-mode=0始終出現,那就必須好好的檢查看看哪邊出現問題。
注意:在哪個資料夾下執行程式很重要,因為obfs4_state.json等三個檔案會出現在執行程式位置所在的資料夾目錄中,如果是使用rc.local開機自動執行的話,obfs4_state.json會在根目錄 / 下產生。因為在不同的執行目錄所產生的密鑰是不一樣的。
三、在windows7設定obfs4客户端
- 下載安裝Windows版的python https://www.python.org/downloads/windows/,千萬不要下載2.7.10版,一定要下載3.5.0版,兩個版本的作用是不一樣的!安裝過程中記得環境變數的選項要打勾(忘記是什麼內容了),否則會很麻煩的。
- 同樣將 https://github.com/gumblex/ptproxy.git 副本複製到你要放的資料夾裡面,如果不知道怎麼複製,你可以將伺服器上的ptproxy資料夾給下載回來!
- 用文字編輯器打開example.json,修改一下以下內容,然後另儲存為client.json(檔名可隨意設)。
{
“role”: “client”,
//指定工作模式為client
“local”: “127.0.0.1:12345″,
//12345通訊埠改為你電腦上的shadowsocks連線的通訊埠。”server”: “伺服器IP:通訊埠”,
//與Server端設定的內容一樣”ptargs”: “cert=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx;iat-mode=1”,
“ptargs”: “cert=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx;iat-mode=1”,
//將Server端執行後所顯示的ptargs參數內容完整的複製到這裡,一定要和server端設定完全一樣,不然無法對接。//其它的內容要保留,但是別修改
}打開命令提示字元,然後執行
python ptproxy.py -c client.json
安裝後的python有兩個程式python.exe與pythonw.exe,有什麼差別我也不是很清楚,但是笨笨包試驗的結果是兩個都可以用!
四、設定Shadowsocks
將Shadowsocks的服務器設定為client.json的內容,也就是服務器:127.0.0.1,端口:12345,密碼仍舊是原來的Shadowsocks密碼。
如果不懂怎麼設定Shadowsocks,還是那句話,上Google查吧!
五、設定Debian開機自動啟動ptproxy
只要在/etc/rc.local裡面新增這句即可
python3 /你所存放的資料夾/ptproxy.py -s /你所存放的資料夾/server.json
再次提醒,經由/etc/rc.local開機自動啟動ptproxy,obfs4_state.json會在根目錄 / 下產生。
六、設定Windows開機自動啟動ptproxy
這是笨笨包的做法,或許其他人有更好的選擇。
在ptproxy資料夾裡面建立一個client.vbs文字檔,內容如下:
Set ws = CreateObject(“Wscript.Shell”)
ws.run “cmd /c pythonw ptproxy.py -c client.json”,vbhide
儲存後,再製作一個client.vbs的捷徑,然後將這個捷徑放在左下角的開始 – 所有程式 – 啟動裡面即可!
七、錯誤分析
當你全部都設定好了之後,開始上網瀏覽,卻發現怎麼都無法連線,這時候我們就必須打開ptproxy資料夾裡面的obfs4proxy.log檔案看看記錄的內容。
經過笨笨包測試後出現了幾種不同的狀況:
- handshake failed: handshake: MAC mismatch
這出現在與OpenVZ的VPS的對接,以及網路被干擾的時候會出現,目前無解。 - handshake failed: WSARecv: i/o timeout
出現在Shadowsocks斷線,有可能是server端的Shadowsocks停止服務,也有可能是Windows的Shadowsocks關閉了。偶爾出現代表網路狀況不好就會出現,如果這個出現次數太多時好時壞,估計GWF已經開始干擾了! - outgoing connection failed: dial: ConnectEx tcp: No connection could be made because the target machine actively refused it.
無法向server連線 - handshake failed: EOF
Shadowsocks密碼錯誤,客戶端的”ptargs”: “cert=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx;iat-mode=1″參數與Server端不匹配。 - invalid arguments: failed to decode cert: illegal base64 data at input byte 70
Shadowsocks密碼錯誤 - server端執行後顯示iat-mode=0
笨笨包有兩種經歷:
a. 必須移除net-speeder
b. obfs4_state.json未修改預設值
八、感想
當笨笨包試驗了之後,被干擾的情形少很多了,但是斷線情況仍舊會發生,因為大陸的GWF防火牆已經進化到不需要了解網路封包的傳遞內容,你對海外的某一個IP進行一定數量的連線,GWF防火牆就會主動懷疑你是用了翻牆工具,然後動不動就禁止你一下。反正習慣就好了,我翻牆大多是查資料用,其它的功能我也用不到啊~