通过 SSH 反向代理访问内网服务

最近用到,简要记录下来。具体可参考文末的相关链接。

前言

首先,什么是反向代理?下图很清晰地解释了它与正向代理的区别。

反向代理的模式,可以使 client 访问与 proxy 同一局域网的 server。且 client 只知道自己在访问 proxy,而不知道真正提供服务的是 server。

本文拓扑

Proxy 1.2.3.4 为公网服务器,client 和 server 在不同的 LAN。

SSH 参数介绍

参数解释
-f后台执行ssh指令
-C允许压缩数据
-N不执行远程指令
-R将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L将本地机(客户机)的某个端口转发到远端指定机器的指定端口

Server 端命令

# 将远程公网服务器 7890 端口转发至本地 8000 端口
# ssh -fCNR 远程端口:localhost:本地端口 远程用户@远程ip
ssh -fCNR 7890:127.0.0.1:8000 remote_user@1.2.3.4

Proxy 端命令

# 将本地 5678 端口经本地转发到本地 7890 端口
# ssh -fCNL *:侦听端口:转发目标主机:目标端口 localhost
ssh -fCNL *:5678:127.0.0.1:7890 local_user@localhost

# 备注:上面的"转发目标主机",指的是命令最后的localhost眼中的localhost,并且目标可以是外部的主机

之后,客户端就可以通过 1.2.3.4:5678 访问 192.168.1.123:8000 服务了。

原理

-L port:host:hostport
本地机器上分配一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过 SSH 通道转发出去,同时远程主机和 host 的 hostport 端口建立连接。如下图:

-R port:host:hostport
远程主机上分配一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过 SSH 通道转发出去,同时本地主机和 host 的 hostport 端口建立连接。如下图:

相关参考

  1. Jerry Sheh. https://jerrysheh.me/post/44ca081e.html, 有改动转载
  2. https://blog.creke.net/722.html, 有改动转载
  3. man ssh 查看帮助文档

发表评论

解决 : *
73 − 23 =