最近遇到一个小困扰,以前在家里用内网机器的 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