远程家里服务器，用SSH和Clash搞定流量代理

最近遇到一个小困扰，以前在家里用内网机器的 IP 直接访问服务器特别方便，但有时候出门了，只有 SSH 权限。不过，想了一下，用 SSH 来搭桥 Socks5 代理，并通过 Clash 接管流量，好像是个不错的解决方案。

方案设计

我决定通过 SSH 来设置一个 Socks5 代理，给客户端提供一个可以访问家里服务器的通道。然后，使用 Clash 来智能管理流量，检测 Socks5 是否生效，来决定是否走代理流量。步骤其实不复杂，来看看嗷。

1. 使用 SSH 设置 Socks5 代理

首先，我通过 SSH 连接到远程服务器，并设置一个 Socks5 代理。

Copy
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功能可以帮助我们实现自动切换流量。

节点：

Copy
append:
- name: 'SSH Tunnel'
type: 'socks5'
server: '127.0.0.1'
port: 8080
username: ''
password: ''

规则：

Copy
prepend:
- 'IP-CIDR,192.168.10.0/24,Proxy-local,no-resolve'

代理组：

Copy
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://ling.crashvibe.cn/posts/default/remote-home-server-ssh-clash-proxy-traffic-management