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

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

相关推荐
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
腾飞开源2 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
布鲁飞丝8 小时前
vivo Pulsar 万亿级消息处理实践()-Ansible运维部署
运维·ansible
XR1234567888 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
HiDev_9 小时前
【非标自动化】2、认识元器件(直线模组)
运维·自动化
龙仔72510 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
我不管我就要叫小猪10 小时前
嵌入式Linux----网络通信
linux·运维·服务器
江湖有缘10 小时前
Docker实战 :使用Docker部署OneTerm堡垒机
运维·docker·容器
姜太小白11 小时前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php
fengyehongWorld11 小时前
Linux 终端快捷键
linux·运维