xChar
·8 months ago

最近遇到一个小困扰,以前在家里用内网机器的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://ling.crashvibe.cn/posts/default/remote-home-server-ssh-clash-proxy-traffic-management


Loading comments...