关于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.根据文章设置地址伪装。

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

相关推荐
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
埃博拉酱3 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒4 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
zhangfeng11334 天前
趋动云 如何ssh登录 服务区 项目server
运维·人工智能·ssh
ZeroNews内网穿透4 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全
失重外太空啦4 天前
nginx
运维·nginx
Gofarlic_oms14 天前
避免Kisssoft高级分析模块过度采购的科学评估方法
大数据·linux·运维·人工智能·matlab
田井中律.4 天前
服务器部署问题汇总(ubuntu24.04.3)
运维·服务器