我在 Linux Centos 7 上使用“socat”来诊断一些问题。服务器和客户端都是 Linux Centos7,它们都有多个接口。服务器 10.1.1.1 在交换机 1 上,10.1.1.2 在交换机 2 上。交换机 1 和交换机 2 是第 3 层交换机,直接连接,运行 Cisco NX-OS。这是我无法解释的情况:
服务器 10.1.1.1(连接到交换机 1,UDP 数据包发送方)通过 STDIN 发送数据:
socat STDIO UDP4-DATAGRAM:239.2.2.1:12345
客户端10.1.1.2(连接交换机2,UDP数据包接收方):
socat UDP4-RECVFROM:12345,ip-add-membership=239.2.2.1:10.1.1.2,fork,reuseaddr -
客户端接收服务器的UDP数据包,直到我在与服务器10.1.1.1相同的机器上启动另一个接收器:
socat UDP4-RECVFROM:12345,ip-add-membership=239.2.2.1:10.1.1.1,fork,reuseaddr -
当我启动第二个接收器时,10.1.1.2 上的客户端停止从服务器接收任何数据。我还使用 tcpdump 发现 10.1.1.2 上的该端口没有收到任何数据包。此外,从那时起,即使我重新启动服务器和客户端,10.1.1.2 也不会再从 10.1.1.1 接收该多播前缀 (239.2.2.x) 的多播数据包。
这是交换机路由的问题吗?还是我在“socat”命令行上漏掉了一些参数?我检查了该接口(10.1.1.x)上的 rp_filter=0。
编辑:更新问题以包含更多网络设置。因为对此有更多的怀疑,因为这是一个路由问题。
更新:我们发现第 3 层交换机上的 10.1.1.x VLAN 没有启用 PIM。这可能意味着未启用多播路由。话虽如此,我不确定为什么不同交换机上的 10.1.1.2 第一次会接收数据。
答案1
事实证明这是交换机上的路由问题。10.1.1.x 中的 VLAN 的多播路由未打开。一旦我们在思科路由器上添加了“pim 稀疏模式”,一切就会按预期运行。