使用 Proxy 突破網管的限制

諾大的院子發表於2019-08-09

公司網路限制了網易雲音樂的使用,網頁和客戶端皆不可使用,雖然QQ音樂沒有禁用(難道網管對網易有偏見?),但是實在覺得QQ的推薦功能不如網易的,遂決定想法子突破網管的限制。

首先想到的是通過代理伺服器繞過公司網路的監管,因為這樣就不是直接請求“163.com”這個域名。在VPS配置了一個正向代理,設定雲音樂客戶端使用自己的代理伺服器,發現還是不行,請求被不斷的302重定向回來。

通過使用Wireshark抓包發現,發往代理伺服器的資料中還是有“163.com”這樣的資訊,估計公司網路是根據這些關鍵資訊進行攔截,於是猜測將發往代理伺服器的資料加密就可以繞過監測了。

本來打算自己實現一個這樣的代理伺服器,搜尋後發現已經有一個具備這樣功能的用Golang實現的開源專案Proxy,下面是官方的特性介紹:

  • 鏈式代理,程式本身可以作為一級代理,如果設定了上級代理那麼可以作為二級代理,乃至N級代理。
  • 通訊加密,如果程式不是一級代理,而且上級代理也是本程式,那麼可以加密和上級代理之間的通訊,採用底層tls高強度加密,安全無特徵。
  • 智慧HTTP,SOCKS5代理,會自動判斷訪問的網站是否遮蔽,如果被遮蔽那麼就會使用上級代理(前提是配置了上級代理)訪問網站;如果訪問的網站沒有被遮蔽,為了加速訪問,代理會直接訪問網站,不使用上級代理。
  • 域名黑白名單,更加自由的控制網站的訪問方式。
  • 跨平臺性,無論你是widows,linux,還是mac,甚至是樹莓派,都可以很好的執行proxy。
  • 多協議支援,支援HTTP(S),TCP,UDP,Websocket,SOCKS5代理。

等等。更多介紹可以到碼雲上瀏覽,這裡只用到了上面這些特性。

原理

為了繞開公司網路的監測,需要加密本地發往代理伺服器的資料,然後由代理伺服器解密資料,再發往真正的伺服器,因些我們需要兩級代理,原理如下圖所示(盜用官方的一張圖):

使用 Proxy 突破網管的限制

這裡選用socks代理,因為它只是簡單的傳輸資料,而不關心是何種應用協議,因此比其他應用層代理要快得多。

實踐

安裝

本機(Windows)下載Windows版解壓,VPS(Linux)下載Linux版解壓即可。

生成證書

在本機或者在VPS生成都可以,但是要保證兩端的證書檔案是一樣的。下面演示在Linux上生成證書檔案:

./proxy keygen -C proxy

執行命令會在當前目錄下生成proxy.key和proxy.crt兩個檔案,將這兩個檔案複製到本機的Proxy安裝目錄中。

執行

在VPS上執行命令:

./proxy socks -t tls -p ":3333" -C proxy.crt -K proxy.key --daemon --forever --log proxy.log
  • socks:開啟socks5代理
  • -t tls:使用TLS傳輸協議
  • -p ":3333":監聽3333埠
  • -C proxy.crt -K proxy.key:指定證書檔案
  • --daemon:後臺執行
  • --forever:proxy會fork子程式,然後監控子程式,如果子程式異常退出,5秒後重啟子程式
  • --log proxy.log:指定日誌檔案

本機開啟Proxy安裝目錄中的“bootstrap.bat”檔案,將“proxy.exe ...”這一行修改為:

proxy.exe socks -p ":3334" -t tcp -T tls -P "IP:3333" -C proxy.crt -K proxy.key --debug

其中小寫"p"表示本機監聽埠,大寫“P”表示VPS端監聽地址,小寫“t”表示本機使用的傳輸協議,大寫“T”表示VPS端使用的傳輸協議。儲存檔案後,雙擊“bootstrap.bat”即可啟動Proxy。注意本機和VPS要開啟相同的代理型別,例如必須同是http代理或者同是socks代理。

修改黑白名單

黑名單儲存在安裝目錄下的"blocked"檔案中,白名單儲存在“direct”檔案中,一行一個域名,匹配規則是最右匹配,比如:baidu.com,匹配的是 ..baidu.com。黑名單的域名直接走上級代理,白名單的域名不走上級代理,如果域名同時存在於黑白名單中,以黑名單的為準。因此我們還要檢查白名單檔案中是否有我們需要代理的域名,如果有的話,將其從白名單中刪除,或者新增到黑名單中,否則這些請求就不會走代理了。

設定客戶端

現在只要將客戶端的代理型別設定為“socks5”,代理地址設定為“127.0.0.1:3334”即可繞過網管的監視了<( ̄3 ̄)> !

相關文章