我是怎么用 SOCKS5 Proxy 解决服务器访问问题的

3 月 16 日
 mcfever

我是怎么用 SOCKS5 Proxy 解决服务器访问问题的

很多程序员第一次接触 SOCKS5 Proxy,其实并不是专门去研究这个协议,而是在解决一个实际问题的时候“顺带用上了”。

我第一次真正理解 SOCKS5 ,是在一次服务器运维的时候。


一个很真实的场景

那天我需要访问一台公司内网服务器。

结构大概是这样的:

我的电脑 → 跳板机 → 内网服务器

内网服务器只允许 跳板机访问,外部是完全无法连接的。

如果直接 SSH:

ssh user@inner-server

是一定会失败的,因为内网服务器根本不在公网。


传统做法:先登录跳板机

通常的做法是:

ssh user@jump-server

然后在跳板机里再执行:

ssh user@inner-server

这种方式当然可以用,但有几个问题:

于是我开始找一种更灵活的方式。


用 SSH 创建一个 SOCKS5 Proxy

后来发现 SSH 其实自带一个非常强大的功能:

动态端口转发

只需要一条命令:

ssh -D 1080 user@jump-server

这条命令会在本地创建一个代理:

127.0.0.1:1080

这个端口就是一个 SOCKS5 Proxy

也就是说:

我的电脑 → SOCKS5 代理 → 跳板机 → 内网服务器

所有流量都会通过跳板机转发。


SOCKS5 在真实开发中的用途

一旦建立了 SOCKS5 代理,你会发现很多事情都变简单了。

例如:

浏览器访问内网系统
Git 拉取内网仓库
数据库客户端连接内网数据库
调试服务器上的 Web 服务

只要软件支持 SOCKS5 ,都可以通过这个代理访问内网资源。

换句话说:

你的电脑就像直接进入了内网环境。


现实问题:服务器越来越多

一开始只有一两台服务器的时候,其实问题不大。

很多事情直接用命令就可以解决,例如:

ssh -D 1080 user@jump-server

或者:

ssh -L 3306:127.0.0.1:3306 user@server

这些命令都很常见。

但随着服务器越来越多,事情就会变得复杂起来。

例如你可能会遇到这样的情况:

每一种连接方式都对应不同的命令。

慢慢你就会发现:

很多时间其实花在 记命令和管理连接信息 上。

例如:

如果服务器数量增加,这些信息就很容易混乱。

很多开发者最后会变成这样:

久而久之,运维工作就变得比较零散。


为什么很多人开始使用图形化工具

所以后来越来越多开发者开始使用 图形化的远程管理工具

这些工具会把连接信息统一管理,例如:

需要连接的时候,只需要点击一下即可,而不需要每次重新输入一长串命令。

例如:

都可以在一个工具里统一管理。

当服务器数量变多时,这种方式会明显提高效率。


一体化工具的思路

现在也有不少这样的工具。

不同的人会有不同的习惯:

有的人习惯纯命令行
有的人习惯图形化工具

其实没有绝对的好坏,只是工作方式不同。

如果选择图形化方案,很多人会使用一体化远程工具。

例如像 DartShell 这样的工具,就是把常见远程协议整合在一起:

产品地址: https://dartshell.com

服务器信息只需要保存一次,需要的时候直接连接即可。

对于经常管理服务器的人来说,这种方式通常会更加高效。

当然,这类工具也有很多选择,大家根据自己的习惯使用即可。


写在最后

很多开发者每天都在使用 SOCKS5 Proxy ,例如:

但很多人只是照着教程在用,并没有真正理解它。

如果你经常需要管理服务器、远程调试或者访问内网资源,理解 SOCKS5 的使用方式,会非常有帮助。

1109 次点击
所在节点    推广
1 条回复
churchmice
3 月 16 日
你这么干已经违规了
既然已经违规了,不妨搞大一点,直接把跳板机加上路由功能,sock 啥的都不用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1198537

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX