为什么我的虚拟机(Proxmox 上的 Debian)没有响应另一个 VM 的 TCP SYN,即使它到达了?

为什么我的虚拟机(Proxmox 上的 Debian)没有响应另一个 VM 的 TCP SYN,即使它到达了?

我遇到了一个非常奇怪的问题,我不知道该如何解决。我希望这里有人能提供一些有用的想法。

有关虚拟机的一些信息:

  • VM0:Debian 10 - 192.168.10.102 [+另外 2 个接口]
  • VM1:Debian 10 - 192.168.10.103
  • 两者均使用 proxmox 进行虚拟化(两者的 proxmox 防火墙均不在线,集群防火墙允许本地网络中的所有流量)
  • 它们通过桥接接口直接连接
  • 两台机器都有正确的路由(192.168.10.0/24 通过正确的网桥,并且没有指向错误位置的更高流行度的路由)
  • 两台机器的 ARP 表中都有对方的正确条目
  • 两台机器的 iptables 规则均为空,且未配置其他防火墙

从 VM0 连接到 VM1 时的行为:

  • VM0:[随机高端口] -> VM1:1234 通过 TCP 正常工作
  • 可以与 VM1 建立 SSH 连接

从 VM1 连接到 VM0 时的行为:

  • VM1:[随机高端口] -> VM0:1234SYN 数据包到达但未进行 TCP 握手 - 无响应
  • VM1:[随机高端口] -> VM0:[ssh]在职的
  • VM1 -> ping -> VM0在职的
  • VM1 -> 跟踪路由 -> VM0不工作

从 VM0 连接到 VM1 时的行为:

  • VM0:[随机高端口] -> VM1:1234SYN 数据包到达,TCP 握手按预期发生,连接正常
  • VM0:[随机高端口] -> VM1:[ssh]在职的
  • VM0 -> ping -> VM1在职的
  • VM0 -> 跟踪路由 -> VM1在职的

端口 1234 上发生的情况也会发生在任何其他 TCP 端口上。SSH 除外。Web 服务器无法访问等。

我的直觉告诉我,出于某种原因,这是一个防火墙问题,但在我看来这不太合逻辑。这些机器实际上是通过第 2 层连接的,因为它们共享同一个网桥,并且不应该有第 2 层防火墙。Proxmox 也不应该干扰第 2 层流量(我猜?)。

他们的 ARP 记录是正确的,并且在正确的接口上检测到。

任何想法都非常感谢。提前谢谢您。

附言:

使用 wireshark 捕获的 SYN 数据包的响应失败(在所有接口上,因此错误的路由不应该是原因)

这是通过 tcpdump -i 任意端口 1234 在 VM0 上接收的捕获

答案1

更新:我说这台机器除了启用了 iptables 之外没有其他本地防火墙,这是在撒谎。问题是 nftables 阻止了我的数据包。我永远不会忘记再次检查 nftables。:)

检查活动的 nftables 规则:nft list ruleset

然后通过清除所有 nftables 规则nft flush ruleset或编辑/etc/nftables.conf(或存储 nftables 配置的文件并打开端口)。

最后nft -f /etc/nftables.conf

相关内容