原始出發點其實是實驗性質的 Azure 線路測試,主要是遇到有朋友的公司在東南亞某國設廠,所以必須偶而出差至當地,但該國到台灣的網路狀況似乎不是很好,導致連回台灣總公司的 Web 系統並不是很順暢。
在跟朋友討論後,也為了評估該公司系統 P2V 移轉上 Azure 的可能,因此選擇了 Azure 東南亞機房 (新加坡),在上面使用 Windows VM 建立 Shadowsocks 服務當成跳板,利用 Azure 資料中心的對外線路再連回台灣,觀察連線順暢度。
設定過程如下
在 Azure 新增一台 VM
Azure 建立 VM 的過程算簡單且直覺,就偷懶不特別說明,但建立後,請留意以下設定工作
公用 IP 位置依需求選擇動態或靜態
靜態就是固定 IP 不會變,如果只是為了單純測試或「其他」原因,使用動態即可。
網路安全性群組 (NSG) 新增對應的輸入規則
把這 NSG 設定簡單想成是在防火牆上開埠。以測試的 Shadowsocks 服務來說,許多建置範例都預設是使用 8388 埠,所以請參考圖示範例,依需求新增規則。
新增 DNS 名稱對應
Azure 虛擬機器新增後,如果不是使用靜態的公用 IP (固定 IP),勢必每次要遠端連線時,就必須先上 Azure Portal 或指令方式,才能查到目前虛擬機器的外部 IP。
為了遠端連線便利性,推薦參考下圖新增及設定 DNS 名稱,以後只要打 DNS 名稱就能遠端連線到該 VM 或連接 Shadowsocks 服務。
進入重頭戲,安裝及啟動 Shadowsocks 服務
在全球熱心網友的努力下,Shadowsocks 可以在許多不同的作業系統及平台上執行,無論是伺服器端還是用戶端。由於使用的 VM 還是自己比較熟的 Windows 作業系統,所以選擇的版本為 Github 上同為 Shadowsocks 專案的分支 - ibQtShadowsocks。
而且安裝方式非常簡單,到該頁面下載最新釋出的已編譯版本並解壓縮到自訂資料夾
接著,在該目錄新增服務設定檔
我的作法是新增一個名為「config」的文字檔,以方便用系統內建的記事本直接編輯,並於設定檔放入以下內容。
請注意設定檔的「server_port」及「password」務必自行調整符合需求,「method」加密方式則看需求
{ "server":"0.0.0.0", "server_port":服務埠, "local_address":"127.0.0.1", "local_port":1080, "password":"密碼", "timeout":600, "method":"aes-256-cfb" }
另外,副檔名是 .txt 文字檔還是 .json,實測確認不影響掛載設定檔,我選用 .txt 單純為了方便。不過,有些文章會教導副檔名用 .json,主要是不建議用內建的筆記本工具,避免編輯後可能產生的字碼異常錯誤,導致 config 設定檔無法正常載入,這的確在過往實務是很有可能發生,務必留意。
執行服務
用「命令提示字元」切換到放置 ibQtShadowsocks 程式的目錄,執行以下指令
shadowsocks-libqss.exe -c "設定檔完整名稱" -S
再簡單用以下指令,確認服務及埠有開啟
netstat -an | findstr 服務埠
新增防火牆規則
如同前面的 Azure NSG,別忘記作業系統本身也有防火牆功能,所以務必新增輸入規則,才能讓 Shadowsock 服務正常對外
個人偏好用 PowerShell 指令快速新增規則,參考如下
New-NetFirewallRule -Name "規則名稱" -DisplayName "顯示名稱" -Protocol TCP -Direction Inbound -LocalPort "服務埠"
以上就算是完成 Shadowsocks 服務建置及啟動
用戶端連接
至於用戶端如何進行連接測試?在這以 Windows 環境簡單說明。
到 Shadowsocks 網站下載對應環境的 Client 版軟體,執行後只需填入對應的伺服器資訊按下「確定」,就會進行連接。正常在右下角工作列會出現類似紙飛機的圖示,並在有網路流量通過時,有小小的綠色及紅色三角形亮起。
接著,到瀏覽器設定 Proxy 。
下面用 Firefox 為範例,將 Proxy 都以 Socks v5 方式指向到本機的 1080 埠,並且個人推薦勾選「代理 DNS 查詢」,原因不贅述。
就能同時間用不同瀏覽器,卻是不同地的跳板連線方式進行想要的測試。
Shadowsocks Windows 用戶端還有更多進階功能,建議直接參考該專案的文件說明。
回到伺服器端繼續討論,若希望每次開機能自動執行 Shadowsocks 服務,可以將前面的執行指令寫在一個 BAT 批次檔裡,再掛入排程器裡的工作任務;或者不想弄批次檔的,可以參考下面範例輸入。
然後,記得勾選「Run whether user is logged on or not (不論使用者登入與否均執行)」,就能確保即便主機因更新而重開機,也能自動啟動服務。
最後溫馨提醒,如果有比較特殊需求的測試,小弟會有以下建議:
1. 避免使用範例的 8388 埠
2. 伺服器端可考慮開啟其他一般服務
3. 用戶端盡量避免將所有連接流量導向 Shadowsocks 服務端
4. 使用 Azure Automation (自動化) 服務定時做 VM 開關機動作,以變更 Shadowsocks 服務的對外 IP
5. 任何軟體都無法保證其資訊安全,請務必謹慎使用,並留意原始專案的更新及其編譯用的相關元件
希望這篇能幫助有特別測試需求及在外打拼的朋友 (合十)
延伸閱讀
維基百科 - Shadowsocks
SS這東西不是翻牆用的嗎?現在翻牆都用V2Ray了 功能比SS更強大https://v2ray666.com/post/2/
這個是一鍵式安裝腳本 比SS更好用的
感謝推薦,V2Ray 的確有準備找時間測試