查看原文
其他

巧用 SSH 打通外网限制

点击关注 👉 顶级架构师 2023-09-18
推荐关注
顶级架构师后台回复 1024 有特别礼包


来源:https://zhuanlan.zhihu.com/p/444319023

上一篇:SpringBoot+Dubbo+Nacos 开发实战教程


大家好,我是顶级架构师。


笔者在工作中遇到此场景,如下两条网络限制下,总部如何访问分公司内部web服务器?


  • dmz服务器可以访问总部外网服务器22端口,不可以访问web服务器;

  • web服务器不可访问公网,但是到dmz网络无限制。


初看需求,我们第一个想到的肯定是内网端口映射到公网,或者vpn,但是不修改网络策略情况下很难实现。有没有别的方法呢,我们继续从纯网络角度分析现有条件。


网络通信是双向的,有请求,有回应,就是我们俗称的“通”。dmz可以访问外部22端口,代表请求,回包两个通信通道都是通畅的,我们是否可以借助回包通道,从外部发起到内部的反向访问呢?答案当然是有的,我们来试一试,需要ssh工具。


我们在dmz执行如下命令。


[root@dmz]# ssh -f -N -g -R 6606:10.1.1.1:80 root@115.100.100.100


  • -f:代表后台运行程序

  • -N:表示使用远程端口转发创建ssh隧道

  • -g:监听本机所有IP地址

  • -R,表示使用远程端口转发创建ssh隧道


命令结合起来什么意思呢,我们使用root用户远程连接到115.100.100.100,并且远程主机监听6606端口,当访问此端口时,会跳转到dmz的80端口。此过程会使用到ssh隧道。dmz运行之后,总部服务器的已经有了端口监听。


[root@center]# netstat -tunlp | grep 6606 tcp 0 0 127.0.0.1:6606 0.0.0.0:* LISTEN 8616/sshd: root 我们在总部服务器尝试端口提示拒绝,代表网络已经打通了,但是dmz服务器并没有监听80端口,所以报端口拒绝。[root@center]# telnet 127.0.0.1 6606 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused


如法炮制,再把web服务器到dmz的网络反向打通,dmz服务器访问本地80端口时将跳转到web服务器的80端口。


[root@web]# ssh -f -N -g -R 80:10.1.1.1:80 root@10.1.1.2

再次到总部服务器测试访问就能通信了。


[root@center]# telnet 127.0.0.1 6606 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.


我们最后从网络角度来回顾数据包的的转发过程。


从总部服务器看到如下信息。


#dmz服务器以115.100.100.101:29493作源,访问本地22端口,建立了tcp连接。[root@center]# ss | grep 115. tcp ESTAB 0 0 172.16.1.1:22 115.100.100.101:29493[root@center]# netstat -tpna | grep 115. tcp 0 0 172.16.1.127:22 101.230.91.53:29493 ESTABLISHED 8555/sshd: root#本地端口也对应到了进程号8616[root@center]#netstat -tunlp | grep 6606 tcp 0 0 127.0.0.1:6606 0.0.0.0:* LISTEN 8616/sshd: root[root@center]# ps -ef | grep 8616 root 8616 8555 0 Dec03 ? 00:01:04 sshd: root.


当总部服务器访问127.0.0.1:6606时,网络连接信息如下。


牛逼啊!接私活必备的 N 个开源项目!赶快收藏

双向通道已经建立[root@center]# ss | grep 6606 tcp ESTAB 0 0 127.0.0.1:6606 127.0.0.1:51158 tcp ESTAB 0 0 127.0.0.1:51158 127.0.0.1:6606


我们最后用图片来展示最终网络转发过程。


dmz发起ssh连接到总部服务器,并且远程端口转发。远程服务器访问转发端口时,数据将封装到回包通道,由于ssh本身加密,外部网络无法知晓网络交互逻辑,从而实现反向访问。


欢迎大家进行观点的探讨和碰撞,各抒己见。如果你有疑问,也可以找我沟通和交流。扩展:接私活儿


最后给读者整理了一份BAT大厂面试真题,需要的可扫码回复“面试题”即可获取。


公众号后台回复 架构 或者 架构整洁 有惊喜礼包!顶级架构师交流群

 「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。

扫描添加好友邀你进架构师群,加我时注明姓名+公司+职位】


版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

猜你还想看

推荐一套开源通用后台管理系统(附源码)

看看人家那 IM 即时通讯系统,那叫一个优雅(附源码)

面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

阿里技术专家:一文教你高效画出技术架构图

牛逼!接私活必备的 N 个系统项目!赶快收藏吧(附源码合集第 3 期)!

一款快速开发模块化脚手架,给您的开发节约时间成本!

这是我见过做好的通用后台系统!

分库分表后路由策略设计

SpringBoot 加一个注解,轻松实现 Redis 分布式锁!

Nginx+SpringBoot 实现负载均衡

获取 /resources 目录资源文件的 9 种方法,还有谁不会?!

面试官: 美团外卖的分库分表怎么设计?

mysql的limit分页优化

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存