关于ssh连接底层(通信部分)探究,以及内网穿透相关实践

背景: 前端时间在某乎上看到一个话题,产生一点疑问,遂动手实践复现了一波,不得不说,csdn的环境真烂,要不是我基本的文章都在这里我就滚蛋了,等我抽时间把这些东西都迁移下,我就换平台!哈哈哈哈哈哈哈哈哈

链接如下

iptables 配置DNAT连接ssh ,为什么仍然提示端口拒绝? - Kingdo的回答 - 知乎

https://www.zhihu.com/question/496138274/answer/2206343604

链接简述:

通过外部机子链接内网的虚拟机,通过在虚拟机承载的实体机上做dnat设置将包路由到容器内,打通整个链路即可建立ssh链接。

文章需要基础知识如下(包括但不限于):

  • 路由(针对包转不同的机子,你可以理解为各个不同主机之间包的走向)
  • linux(这个实在是没啥好说的,只是我是在linux机子里做的实验所以可能会稍微涉及到一点点的命令,影响不大。)
  • iptables(可以理解为防火墙,可针对包拦截放行,或改源目的ip)
  • ssh(了解功能即可)
  • 网络/命令行抓包工具tcpdump详解-CSDN博客
  • 双网卡的路由逻辑(根据本地路由表走,如果没有匹配路由,走默认路由)

测试背景:

docker容器内的路由表如下

虚拟机路由表如下

虚拟机nat转发表如下

postrouting链为空

存在的问题:

环境如上,我从物理机192.168.133.1发起ssh请求,按照文章最开始引出文章的意思,这个时候这个链路应该是不通的,但是我目前按照如上的规则测试结果如下

容器抓22端口的包如下

ssh结果如下

可以看到是通了,但是按照文章引入的意思来说应该是通不了的。为什么呢?

原理与解答:

按照引入的文章意思转发的路径会变为

bash 复制代码
物理机:         192.168.133.1------------>192.168.133.128:11123
虚拟机(dnat):  192.168.133.1------------>172.17.0.2:20
容器:           192.168.133.1------------>172.17.0.2:20

然后按照原文章的意识是通不了的,但是为什么我这边会通呢,其实仔细看我容器机子的路由表以后就会发现我里面有两条路由,一个同网段的,还有一个默认路由,好,关键来了。

由于有一个默认路由的存在即使容器找不到133.1的目的主机,但是他会将这个包匹配路由表,然后走的默认路由(同网段路由指定是匹配不上),然后这个时候,由于包通过默认路由到达虚拟机以后,这个时候其实虚拟机是认识这个地址的,并且本地有dnat的转化记录,所以这个时候会将根据dnat将源地址修改在发往133.1。这个包由于在虚拟机上做了修改以后到达133.1的源地址是133.128所以这个时候其实阴差阳错的都对上,所以会导致ssh可以连接,然后容器其实连外网都ping不同的情况。

好了思路很清楚,这边将回报的路线梳理下,如下:

bash 复制代码
容器:           172.17.0.2:20          ------------>    192.168.133.1
虚拟机(dnat):  192.168.133.128:11123  ------------>    192.168.133.1
物理机:         192.168.133.128:11123  ------------>    192.168.133.1

猜想:盲猜开篇引出的文章里的实体机的虚拟机是没有设置默认路由的,如果设置了应该是可以走通的,或者是设置的网卡不对。

解决方式:1.设置默认路由,将逻辑链路走通

2.根据文章设置地址伪装。

总结:只要将路由走通,连接一般是能正常的。

相关推荐
HalvmånEver2 分钟前
Linux:信号捕捉上(信号三)
linux·运维·服务器
Gofarlic_OMS7 分钟前
Fluent许可证使用合规性报告自动化生成系统
java·大数据·运维·人工智能·算法·matlab·自动化
Aliex_git7 分钟前
Git SSH 配置
笔记·git·学习·ssh
kaoa00011 分钟前
Linux入门攻坚——63、tcpdump、nc/ncat、nmap等工具的使用
linux·运维·tcpdump
珂-瑞12 分钟前
负载均衡-CLB / ALB / NLB / GWLB 的区别
运维·负载均衡
bugu___13 分钟前
仿muduo库实现并发服务器(2)
运维·服务器·c++
研发小能15 分钟前
主流国产DevOps平台选型分析:从适配度、部署效率与生态依赖分析嘉为蓝鲸平台
运维·研发效能·devops·devops平台·devops系统
开开心心就好16 分钟前
卸载工具清理残留,检测垃圾颜色标识状态
linux·运维·服务器·python·安全·tornado·1024程序员节
HalvmånEver22 分钟前
Linux:信号捕捉下(信号四)
linux·运维·数据库
程序猿阿伟23 分钟前
《突破训练瓶颈:参数服务器替代架构效率优化指南》
运维·服务器·架构