在服务器端经常遇到下载速度慢的问题,在服务端安装 clash 或者 v2ray 等又比较麻烦,可以临时使用本地的代理达到科学上网的目的。这里需要区分 局域网内服务器 和 公网服务器,记录下细节。
¶一、局域网内服务器
之前将一台放在家里旧笔记本电脑安装了 CentOS 作为服务器学习用,属于局域网内的机器,原则上公网无法访问。家里还有一台 Windows 台式机,可以通过 clash 科学上网,安装了远程开机卡和 ToDesk 自启动,方便在公司远程开机。笔记本和 Windows 台式机都是通过 WiFi 接入网络的,因此处于同一个局域网。公司的 Mac 偶尔带回家,这里也设置下。需要开启 clash 的 允许局域网连接:

将旧笔记本电脑的别名改为 lenovo,在 lenovo 上 vim ~/.zshrc 添加以下命令:
1 | MACIP='192.168.31.23' |
在 lenovo 上添加完上述命令后执行 source ~/.zshrc 就可以生效了。此时可以执行 proxy_test 测试代理是否可用,发现一直是 Trying;执行 proxy 后再执行 proxy_test 就发现有具体内容返回了;可以通过执行 unproxy 取消代理。

¶二、公网服务器
公网服务器可以借助 ssh -R 命令创建一个反向代理通道(下方 ssh 命令在本地机器执行,本地机器需要科学上网):
1 | ssh -N -T \ |
ssh -R表示建立一个反向 SSH 隧道6990是在公网服务器上监听的端口127.0.0.1表示本地机器的回环地址(SSH 客户端所在机器)7890是本地机器代理服务的端口,这里使用的是 Clashroot@47.65.55.62表示公网服务器的用户名和 IP 地址-N表示不执行远程命令,仅建立隧道连接-T表示不分配伪终端,适用于纯端口转发场景-o ExitOnForwardFailure=yes表示如果端口转发建立失败(例如远程 6990 端口被占用),SSH 立即退出-o ServerAliveInterval=30表示每隔 30 秒向服务器发送一次保活消息-o ServerAliveCountMax=3表示连续 3 次未收到服务器响应后,断开 SSH 连接
因此上述命令的作用是:将本地的 7890 端口映射到公网服务器 47.65.55.62 的 6990 端口,当公网服务器有请求发送到公网服务器的 6990 端口时,它会通过 SSH 隧道转发到本地机器的 7890 端口。
类似的,在公网服务器上也添加下方的 proxy 命令,然后执行 source ~/.zshrc 就可以生效了。在公网服务器执行 proxy_test 测试代理是否可用,发现一直是 Trying;执行 proxy 后再执行 proxy_test 就发现有具体内容返回了;可以通过执行 unproxy 取消代理。
1 | 开启代理(通过 SSH 反向隧道连接 Mac 本机 Clash) |

注意
- 先在本地机器执行
ssh -R命令,再在公网服务器执行proxy使用代理ssh -R命令的-N参数需要有,否则就会直接登录公网服务器的终端了ssh -R命令执行后会要求终端活跃,关闭终端或停止ssh -R命令都会停止代理- 当公网服务器上的端口被占用时,
ssh -R命令执行会有 Warning 提示,代理会失败
¶三、其他
- 当
ssh连接断开后,proxy也就失效了,自启动或全局生效等可以自行研究; ssh -R命令的作用是将远程服务器的端口映射到本地机器的端口,这也可以实现局域网内的服务在公网访问,不仅仅是代理的作用;