为什么正确标记 VLAN 的多播流量不会到达标记的接口?

为什么正确标记 VLAN 的多播流量不会到达标记的接口?

我正在使用一个在客户端和服务器之间发送多播流量的应用程序。该流量通过多播发送。客户端和服务器都使用 VLAN 接口,并且需要在特定 VLAN 上进行通信才能正确地相互通信。客户端和服务器位于同一子网中(因此没有网络跃点),并且它们的 IP 位于同一子网中(因此正在进行的唯一路由是多播从正确的 VLAN 接口发出的路由)。

使用tcpdump我可以看到来自两台主机的未标记接口上的流量,但如果我查看标记接口,我只能看到本地计算机的流量。我确认进入未标记接口的流量也具有正确的 VLAN 标记。

为了帮助说明这一点,让我们说:

VLAN: 10
Multicast: 239.1.1.1

我看到的是:

[root@client]# tcpdump -ei ens192 host 239.1.1.1
.... vlan 10 ... client.[port] > 239.1.1.1.[port]
.... vlan 10 ... server.[port] > 239.1.1.1.[port]
.... vlan 10 ... client.[port] > 239.1.1.1.[port]
.... vlan 10 ... server.[port] > 239.1.1.1.[port]

另一方也有同样的想法:

[root@server]# tcpdump -ei ens192 host 239.1.1.1
.... vlan 10 ... server.[port] > 239.1.1.1.[port]
.... vlan 10 ... client.[port] > 239.1.1.1.[port]
.... vlan 10 ... server.[port] > 239.1.1.1.[port]
.... vlan 10 ... client.[port] > 239.1.1.1.[port]

但是当我tcpdump标记接口时:

[root@client]# tcpdump -ei ens192.10 host 239.1.1.1
.... client.[port] > 239.1.1.1.[port]
.... client.[port] > 239.1.1.1.[port]

来自服务器的相同想法。

我试过了sysctl net.ipv4.conf.all.rp_filter=0没有任何改变。

我还在strace -fe trace=network -p [PID of software] 2>&1 | grep 239.1.1.1客户端和服务器上运行,并且只send_to进行了调用,没有收到任何消息(在标记的接口上没有看到传入之后,这是我所期望的)。

我还确认了ip maddrens192.10已订阅239.1.1.1,尽管所有其他 VLAN 接口也已订阅,我发现这有点可疑。我确认tcpdump流量不会进入任何其他 VLAN 接口。我承认我不知道这个软件如何执行订阅,因为我无法访问内部/源代码。

操作系统是RHEL 7.5。

是否有任何原因导致正确标记的 VLAN 流量不会出现在相应的 VLAN 接口上?

编辑:此外,还有其他多播流量在此 VLAN 接口上正常工作,该问题似乎是该软件特有的。

答案1

我不认为你可以在 Linux 上使用这样的tcpdump子接口(即)。ens192.10

转储特定(或所有)vlan 流量的常用方法是

tcpdump -i ens192 -e vlan 10 and host 239.1.1.1 # just vlan tag 10
tcpdump -i ens192 -e vlan and host 239.1.1.1 # all tagged vlans

或者,如果您的tcpdump版本不支持该vlan X语法,您可以将原始标头与

tcpdump -i ens192 -e 'ether[12:2] = 0x8100 and ether[15] = 10' and host 239.1.1.1

相关内容