如何通过跳板机访问内网服务
一、问题场景
公司大多数服务因为安全原因一般限制在内网访问,比如内部管理系统、MySQL服务等。但是运维或者HelpDesk有远程访问的需求比如系统变更、支持和应急,一般通过ssh连接到跳板机或者堡垒机,再到内网来解决。但是对于有后台管理界面访问需求还是不能满足。这时一般有下面的解决方法:
- 通过网关路由器进行端口转发,在路由器(公网IP)上开端口转发到内部服务(内部IP+端口);通过公网IP+端口访问
- 公网Nginx转发到内网服务;通过公网IP+端口访问
- SSH隧道;通过本机IP或者localhost+配置的本地端口访问
本文重点介绍SSH隧道方式
二、SSH隧道
针对上面的问题场景,SSH隧道一种解决方式是:通过已经建立的到跳板机的SSH连接,让SSH服务器转发流量到内网服务(内网IP+端口)。
具体方法有下面2种:
- 通过命令行建立SSH隧道
ssh -L localPort:IP2:Port2 user@IP1
- IP1是跳板机地址,也就是SSH连接的服务器地址;user是SSH连接的用户名
- IP2:Port2为目标服务器地址,也就是需要访问的内部服务地址
- localPort是本机端口,用于listening。我们访问上面的内网服务时就可以通过
http://localhost:localPort来访问了
- 通过图形化的客户端工具
以MacBook下的Termius为例。
选择“Port Forwarding” -> “New FORWARDING”
选择“Local” -> “Continue”

输入本地侦听的端口也就是方式一中的localPort,点“Continue”
“Select a host”,这里是Termius中已经预配置过的SSH连接。比如连接跳板机的SSH连接。
输入准备连接的目标内部服务IP和端口。
保存为一条SSH隧道规则。点“Done”
在列表中选择刚建立的“Port Forwarding”规则并在右键下拉框中选择“Connect”,成功建立隧道后就可以通过http://localhost:localPort访问内网服务了。
三、总结
SSH隧道方法灵活、快速,相对路由器或者Nginx配置修改更轻量。而且变更在客户端,用完关闭SSH隧道即可。推荐使用。
通过SSH隧道连内网MySQL可以参考笔者另外文章“MySQL客户端SSH连接远程数据库服务器”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 石头记!