當談到保護您在網路上的足跡時,您可能聽說過 VPN,對吧?VPN 充當您的電腦與網際網路之間的中介。所有的流量都會通過 VPN 伺服器,從而有效地隱藏您的 IP 地址和位置。
然而,VPN 並不是唯一的 代理伺服器。SOCKS (Socket Secure) 是一種相似的網路協定,它透過代表用戶端路由網路流量,允許透過防火牆與伺服器進行通訊。與 VPN 相比,SOCKS 在網路設定上提供了更多的彈性與控制。當您無法安裝 VPN 用戶端或不信任 VPN 提供商時,它非常有用。
本指南將 示範如何建立 SSH SOCKS 5 代理通道,並透過該通道路由您的網路流量。
先決條件
為了進行示範,我們使用了一台執行 Ubuntu 桌面版的本機電腦和一台 執行 Ubuntu 伺服器版的遠端機器。您需要先 設定好 SSH 才能使其順暢運作。由於我們使用的是 SOCKS 代理,為了測試連線,我們需要一個可以使用它的應用程式。 Firefox 是一個完美的例子。它是一款支援 SOCKS 5 代理通道的現代網頁瀏覽器。
如果您使用的是 Windows,那麼您可以使用 WSL (Windows Subsystem for Linux) 來設定本機 Linux 環境,或者使用 PuTTY,這是一款可以實作 Telnet、rlogin 等各種網路協定的開放原始碼應用程式。
設定 SOCKS 通道
-
設定 SOCKS 通道 (macOS/Linux)
在本機電腦上,我們需要設定 SSH 金鑰以確保安全連線。該 SSH 金鑰也必須註冊到遠端系統。這篇關於 設定基於 SSH 金鑰的驗證 的指南詳細介紹了該過程。
以下 SSH 指令將建立到遠端伺服器的 SOCKS 通道:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> |

讓我們來拆解這個指令:
-
-i:它告訴 SSH 連線要使用哪個 SSH 金鑰。
-
-D:它告訴 SSH 我們想要建立一個 SOCKS 通道。至於連接埠,我們使用的是連接埠 1024。這不是一個固定值。您可以選擇介於 1024 與 65536.
-
-f:SSH 程序將在背景分叉(fork)執行。
-
-C:SSH 在將資料傳送到遠端伺服器之前會先進行壓縮。這既可以節省數據消耗,又能提高有效頻寬。
-
-q:以安靜模式執行該工具。
-
-N:它告訴 SSH 在建立通道後,不會傳送任何指令。
執行後,我們可以驗證程序是否正常啟動。以下指令將列印所有執行中 SSH 程序的資訊:
|
1 |
ps aux | grep ssh |

現在,您可以安全地關閉終端機視窗。SSH 程序將在背景按預期運作。
-
設定 SOCKS 通道 (Windows)
對於 Windows 使用者,使用 PuTTY 是一個更簡單的解決方案。首先,您需要 下載 PuTTY:

安裝完成後,啟動 PuTTY:

從左側面板的 Session 索引標籤,輸入您伺服器的 Host Name (or IP address)。至於 Connection type,選擇 SSH。接下來,前往 Connection >> SSH >> Tunnels。在這裡,在 Destination 欄位下,選擇螢幕截圖中顯示的選項:

接下來,按一下 Open。將彈出一個終端機視窗以透過 SSH 連線到遠端伺服器。登入遠端伺服器:

套用 SOCKS 通道
通道現在已設定完成。任何支援 SOCKS 的應用程式都可以使用該通道。為了進行示範,Firefox 是一個極佳的例子。
首先,開啟 Firefox。從右上角按一下功能表圖示。前往 Settings:

接下來,搜尋 proxy。按一下 Settings (位於 Configure how Firefox connects to the internet:

)之後,選擇 Manual proxy configuration。至於 SOCKS Host,使用 localhost 或 127.0.0.1。然後,在連接埠欄位中,輸入我們為 SOCKS 通道專門配置的連接埠。別忘了選擇 SOCKS_v5:

最後,勾選 Proxy DNS when using SOCKS_v5 選項。按一下 OK 以繼續。
接下來,開啟一個新分頁並嘗試存取任何網頁。例如,您可以從 CheckMyIP.
還原代理設定
當您不再需要指向 SSH 隧道的代理伺服器連線時,可以安全地從 Firefox 代理伺服器設定中將其停用:

在視窗中,選擇 使用系統代理設定 並按一下 確定.
關閉 SOCKS 隧道
-
在 macOS/Linux 上關閉隧道
要關閉隧道,我們需要手動終止 SSH 程序。我們需要 SSH 程序的 PID(程序識別碼)。以下命令將顯示所有執行中的 SSH 程序的 PID:
|
1 |
ps aux | grep ssh |
記下與建立隧道命令一起執行的 SSH 程序。終止該程序:
|
1 |
kill <tunnel_ssh_pid> |
如果未定義任何選項, kill 命令將傳送一個通用的 SIGTERM 訊號給目標程序。您可以從以下內容深入了解 這篇教學課程中的 Linux 程序管理.
-
在 Windows 上關閉隧道
關閉 PuTTY 視窗應該會關閉隧道連線。
疑難排解
以下是您在嘗試使用 SOCKS 路由流量時可能會遇到的一些常見問題。
-
防火牆
如果您因為防火牆限制而無法建立連線,那麼防火牆很可能被設定為封鎖與連接埠 22 的連線。這是 SSH 用於連線到遠端系統的預設連接埠。某些連接埠預設保持開放,例如連接埠 80 (一般網路流量)和連接埠 443 (TLS,安全網路流量)。
如果 SSH 伺服器未提供網頁內容,那麼我們可以使用其中一個預設連接埠( 80 或 443 )來代替連接埠 22。建議使用連接埠 443 ,因為它預設預期加密流量。它也會對傳出流量進行加密。若要進行此變更,我們需要修改 SSH 設定檔。在文字編輯器中開啟該檔案:
|
1 |
sudo nano /etc/ssh/sshd_config |
SSH 可以使用多個連接埠來達到其目的。向下捲動設定檔並找到 port(連接埠)區段:

變更完成後,儲存檔案並關閉編輯器。重新啟動 SSH 服務以套用變更:
|
1 |
sudo service ssh restart |
若要驗證新連接埠是否正常運作,請嘗試使用新連接埠連線到遠端伺服器:
|
1 |
ssh <remote_username>@<remote_server> -p 443 |
如果連線成功,我們可以安全地使用連接埠 443 來進行 SSH 隧道傳輸。以下是建立 SOCKS 隧道的修正後命令:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> -p 443 |
在這裡,旗標 -p 會指示 SSH 使用連接埠 443.
結語
在當今時代,隱私與安全是人們最關心的問題之一。當您處於不安全的網路環境中時,有許多方法可以安全地進行瀏覽。在大多數情況下,使用 VPN 就能為您的網路流量提供足夠的安全保障。另一方面,如果您無法或不信任 VPN,SOCKS 隧道將為您提供必要的安全性。擁有 SOCKS 隧道還能讓您完全控制相關設定。
祝您電腦使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。