最近遇到一个小困扰,以前在家里用内网机器的IP直接访问服务器特别方便,但有时候出门了,只有SSH权限。不过,想了一下,用SSH来搭桥Socks5代理,并通过Clash接管流量,好像是个不错的解决方案。
我决定通过SSH来设置一个Socks5代理,给客户端提供一个可以访问家里服务器的通道。然后,使用Clash来智能管理流量,检测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端口的流量就会被转发到远程服务器。
接下来,我在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'
这段配置的意思是:
fallback
代理组,当检测到Socks5代理有效时,流量会自动走这个代理,否则就直接连接。你希望使用SSH隧道(SSH Tunnel)作为首选代理,当SSH隧道不可用时,流量会自动切换到直连(DIRECT)。通过配置 interval 和 timeout,你可以控制检测的频率和超时的容忍度。
这套方案的好处是,出门在外时,我只要保持SSH连接,其他流量就自动走代理,既方便又不耽误工作。而且,Clash的自动切换功能,保证了当代理不可用时,流量也能自动回到直连,不会造成卡顿或连接失败。
对于喜欢折腾技术的我来说,这种“远程办公”的方式无疑让生活和工作变得更加灵活高效。如果你也有类似需求,不妨试试看这个方法吧
此文由 Mix Space 同步更新至 xLog
原始链接为 https://ling.crashvibe.cn/posts/default/remote-home-server-ssh-clash-proxy-traffic-management