最近遇到一個小困擾,以前在家裡用內網機器的 IP 直接訪問伺服器特別方便,但有時候出門了,只有 SSH 權限。不過,想了一下,用 SSH 來搭橋 Socks5 代理,並透過 Clash 接管流量,好像是個不錯的解決方案。
方案設計#
我決定透過 SSH 來設定一個 Socks5 代理,給客戶端提供一個可以訪問家裡伺服器的通道。然後,使用 Clash 來智能管理流量,檢測 Socks5 是否生效,來決定是否走代理流量。步驟其實不複雜,來看看嗷。
1. 使用 SSH 設定 Socks5 代理#
首先,我透過 SSH 連接到遠程伺服器,並設定一個 Socks5 代理。
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o TCPKeepAlive=yes -o ForwardAgent=no -o ForwardX11=no -N -D 127.0.0.1:8080 -p 221 root@*******.cn
解釋一下這個命令的參數:
-D 127.0.0.1:8080
:在本地端口 8080 上啟動一個動態端口轉發,充當 Socks5 代理的作用。-o ServerAliveInterval=60
:每 60 秒發送一個空包,保持連接不中斷。-o ServerAliveCountMax=3
:如果連接沒有響應,最多重試 3 次。-o TCPKeepAlive=yes
:開啟 TCP 連接的保活機制。-N
:只進行端口轉發,不執行遠程命令。-p 221
:指定 SSH 連接的端口(如果你的伺服器不是默認的 22 端口,需要指定)。
這樣一來,所有透過本地 127.0.0.1:8080 端口的流量就會被轉發到遠程伺服器。
2. 配置 Clash 進行流量管理#
接下來,我在 Clash 中設定代理規則,來判斷是否走這個 Socks5 代理。Clash 的fallback
功能可以幫助我們實現自動切換流量。
節點:
append:
- name: 'SSH Tunnel'
type: 'socks5'
server: '127.0.0.1'
port: 8080
username: ''
password: ''
規則:
prepend:
- 'IP-CIDR,192.168.10.0/24,Proxy-local,no-resolve'
代理組:
prepend:
- type: 'fallback'
name: 'Proxy-local'
interval: 5
timeout: 5000
max-failed-times: 1
lazy: false
proxies:
- 'SSH Tunnel'
- 'DIRECT'
這段配置的意思是:
- 在 Clash 中定義了一個 Socks5 代理,指向 127.0.0.1:8080。
- 使用
fallback
代理組,當檢測到 Socks5 代理有效時,流量會自動走這個代理,否則就直接連接。 - 一定要把 lazy 關掉!字如其名就是懶逼,就是不自動檢測是否有效。
你希望使用 SSH 隧道(SSH Tunnel)作為首選代理,當 SSH 隧道不可用時,流量會自動切換到直連(DIRECT)。透過配置 interval 和 timeout,你可以控制檢測的頻率和超時的容忍度。
悄悄滴說#
這套方案的好處是,出門在外時,我只要保持 SSH 連接,其他流量就自動走代理,既方便又不耽誤工作。而且,Clash 的自動切換功能,保證了當代理不可用時,流量也能自動回到直連,不會造成卡頓或連接失敗。
對於喜歡折騰技術的我來說,這種 “遠程辦公” 的方式無疑讓生活和工作變得更加靈活高效。如果你也有類似需求,不妨試試看這個方法吧。
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://mixspace.crashvibe.cn/posts/default/remote-home-server-ssh-clash-proxy-traffic-management