利用 SSH 隧道或 SS 来实现内网穿透

热爱工作的我,时不时需要在家办公。但是由于测试数据库,redis,es 都只能从公司内网访问,所以就需要一个从外网访问公司内网环境的方案。

准备工作

首先需要一个在公司内网且有公网 IP 的机器,可以在这台机器上配置 SS Server 或者有这台机器的 SSH 权限。

获取 SS 账号或者 SSH 权限后,在本机执行以下操作,开始监听本地的 socks5 端口。

启动 socks 端口监听

SS 方案

  1. 本机启动 SS 连接内网的 SS Server
  2. 找到 shadowsocks 客户端的本地接口配置,记下是 socks 还是 http 并且记录端口号。

比如我这个配置是 socks5 协议,地址 127.0.0.1 端口 1080
ss_local_socks

SSH 方案

  1. 本机终端执行命令ssh -D 1080 <remote_user>@<remote_host> -p <port>

配置 proxychains

如果想要通过终端跑程序时候也走代理,那么需要安装 proxychains

1
brew install proxychains-ng

安装完成后编辑 /usr/local/etc/proxychains.conf 文件,修改最后一行为 socks5 127.0.0.1 1080 保存退出。

此时已经大功告成,以后执行命令只要开头 proxychains4 即可通过代理穿透到内网访问。比如

1
2
3
4
5
6
7
8
$ proxychains4 python api/run.py
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.12
[proxychains] DLL init: proxychains-ng 4.12
Logger init with level 10
[proxychains] Strict chain ... 127.0.0.1:1080 ... 192.168.11.122:3306 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... 192.168.11.122:3306 ... OK

其他 GUI 软件

当使用 Navicat 或 DataGrip 之类的 GUI 数据库客户端时候,只需要在 app 的代理设置填写一下 socks 协议监听地址和端口即可实现 app 全局流量通过代理穿透到内网执行。