Proxmox VE客户端跨网段挂载Ceph-RBD存储出现got timeout超时问题(畸形报文-数据包不完整)

Proxmox VE客户端跨网段挂载Ceph-RBD存储出现got timeout超时问题(畸形报文-数据包不完整)

Deng YongJie's blog 398 2024-07-07

描述:

Proxmox VE的IP段:172.22.1.0/25
Ceph集群的IP段: 172.22.2.0/28

背景:

PVE的主机挂载使用Ceph-RBD存储

问题:

在PVE管理控制台数据中心添加了RBD之后,存储池的状态为unknown,并且提示了超时,无法使用RBD,具体问题如下图:
由于截图涉及机密信息,这里需脱敏处理,只展示部分截图
image-1718359444408
image-1718359550006

排查过程:

1. 起初判断是没有放行端口造成的,随后放行了下面端口和协议

源IP地址:172.22.1.148 xxxxxxx

目标IP地址:172.22.2.4 xxxxxxx

TCP端口:3300,2049,6789-7300

UDP端口: 2049

2. 放行了端口和协议,还是添加不上RBD,删掉重加也是一直转圈圈。 尝试不做任何限制,全放通还是老样子

3. PVE是7.4版本,不确定是否版本原因。查看了Ceph内核日志、PVE日志,都没发现有其它的报错。尝试降低版本为7.2

4. 降低版本还是一样。。然后去pve执行命令会hang住,telnet端口却是通的,只要添加了RBD存储,日志就会提示:状态更新超时,如下图:

image-1718359694364

5. 然后查看ceph的配置是否有网段限制,配置也是全网段放通的,发现并没有网络限制。

image-1718359800556

6. 最后找不到问题,抓包分析数据包情况。分析结果为:畸形报文,标志位为RST重置了链接

image-20230522182630687
image-20230522182638409

7. 疑问:为什么会有畸形报文?什么情况会重置连接?

畸形报文是在网络通信中传输的数据包格式不正确或不符合协议规范,导致接收方无法正确解析和处理该数据包。

  1. 数据包大小超出了协议规定的最大值或最小值。
  2. 数据包格式不正确,例如缺少必要的字段或标志位。
  3. 数据包中存在不合法的字符或编码。
  4. 数据包被篡改、破坏或损坏,例如由于网络故障、嗅探攻击或恶意软件等原因。
  5. 数据包在传输过程中被分片、重组或重复发送,导致数据包序列号、标识符等字段出现错误。
  6. 接收方与发送方之间使用了不兼容的协议版本或实现方式。
  7. 网络设备(例如路由器、交换机等)对数据包进行了错误处理,例如截断、丢弃或修改数据包内容等。

TCP连接被重置并关闭的原因:

  1. 连接超时:如果一段时间内没有数据传输,则可能会超时并关闭连接。
  2. 网络故障:如果网络出现故障,例如丢包或延迟过高,可能会导致连接重置并关闭。
  3. 程序错误:如果应用程序出现错误或异常,可能会导致连接被重置并关闭。
  4. 安全策略:某些安全策略可能会强制终止连接,例如防火墙规则或入侵检测系统。
    当TCP连接被重置并关闭时,通常意味着发生了某种异常情况,例如网络故障或应用程序错误。在Wireshark中看到RST标志位通常意味着TCP连接已被重置并且已经关闭。

有了畸形报文,所以就会不等回应,直接重置连接并关闭

8. 然后路由追踪多少个跳点,判断经过多少个交换机

image-1718359970959

9. 中间跳了4次,经过沟通得知中间经历了路由器和交换机。那么问题出现在哪?经过上面的畸形报文分析,有可能是数据包大小不一致

10.为了增强吞吐量,底层存储和PVE都是用的MTU为9000,然而这里的PVE中间经历了NSX转发、路由器和交换机,中间的交换机或路由器没有统一设置MTU为9000,所以导致了报文畸形

11. PVE把MTU改成1500,然后恢复正常

image-1718360095434

结论:

畸形报文会导致接收方无法正确解析和处理数据包,从而可能会引起安全问题或网络故障。为了避免这些问题进一步扩大,接收方通常会立即重置连接并关闭,以避免继续接收来自发送方的畸形报文。这种处理方式可以有效地保护网络免受攻击和故障,并确保网络通信的可靠性和安全性。

解决方案:

尽量缩短数据转发链路,底层存储或基础设施,每个网段之间只通过交换机来做数据包的转发,把所有交换机设备MTU统一改成9000,这样下游的服务器不管是1500还是9000都不会产生数据包畸形的问题