Multicast rx issue on Centos 6.8 KVM

Issues related to configuring your network
kurienmatheweri
Posts: 1
Joined: 2018/01/27 14:42:58

Multicast rx issue on Centos 6.8 KVM

Postby kurienmatheweri » 2018/01/29 08:25:31

On a KVM guest (Centos 6.8) with two network interfaces bridged independently to two external network interfaces on the KVM host (Centos 7.4), I have an app that should join/leave a multicast group via eth2(172.31.0.14) to receive a multicast stream. The app binds to address 0.0.0.0 rather than an address on a specific network interface. I also have a route configured for the igmp and multicast output since there was no output without it. The multicast traverses two switches each with the vlan (172.31.0.0/16):
172.31.0.2 (00:19:e8:2b:25:00) – vlan address on switch to which multicast source is connected
172.31.0.1 (00:21:1c:37:d4:44) – vlan address on intermediate switch/vlan

KVM Guest network config
--------------------------

Code: Select all

[root@vcentos68a ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:e6:5c:10 brd ff:ff:ff:ff:ff:ff
    inet 10.86.67.218/21 brd 10.86.71.255 scope global eth1
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:68:c6:f3 brd ff:ff:ff:ff:ff:ff
    inet 172.31.0.14/16 brd 172.31.255.255 scope global eth2
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:28:61:94 brd ff:ff:ff:ff:ff:ff

[root@vcentos68a ~]# cat /etc/sysconfig/network-scripts/route-eth2
224.0.0.0/4 via 172.31.0.1 dev eth2
[root@vcentos68a ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.86.64.0      *               255.255.248.0   U     0      0        0 eth1
172.31.0.0      *               255.255.0.0     U     0      0        0 eth2
link-local      *               255.255.0.0     U     1002   0        0 eth1
link-local      *               255.255.0.0     U     1003   0        0 eth2
224.0.0.0       172.31.0.1      240.0.0.0       UG    0      0        0 eth2
default         10.86.64.1      0.0.0.0         UG    0      0        0 eth1
[root@vcentos68a ~]#

[root@vcentos68a ~]# sysctl -a | grep eth2 | grep -v ipv6 | grep -e rp -e igm
net.ipv4.conf.eth2.rp_filter = 0
net.ipv4.conf.eth2.proxy_arp = 0
net.ipv4.conf.eth2.arp_filter = 0
net.ipv4.conf.eth2.arp_announce = 0
net.ipv4.conf.eth2.arp_ignore = 0
net.ipv4.conf.eth2.arp_accept = 0
net.ipv4.conf.eth2.arp_notify = 0
net.ipv4.conf.eth2.proxy_arp_pvlan = 0
net.ipv4.conf.eth2.force_igmp_version = 3
[root@vcentos68a ~]#

[root@vcentos68a ~]# cat /etc/sysconfig/iptables | grep -e cast -e ig
-A INPUT -p igmp -j ACCEPT
-A OUTPUT -p igmp -j ACCEPT
-A INPUT -m pkttype --pkt-type multicast -j ACCEPT
-A OUTPUT -m pkttype --pkt-type multicast -j ACCEPT
-A INPUT -m pkttype --pkt-type unicast -j ACCEPT
[root@vcentos68a ~]#



KVM Host network config:
-------------------------

Code: Select all

[root@b16 ~]# ip addr

2: enp8s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-enp8s0f0 state UP qlen 1000
    link/ether 00:1e:67:d8:99:e2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::21e:67ff:fed8:99e2/64 scope link
       valid_lft forever preferred_lft forever
3: enp8s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-enp8s0f1 state UP qlen 1000
    link/ether 00:1e:67:d8:99:e3 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::21e:67ff:fed8:99e3/64 scope link
       valid_lft forever preferred_lft forever

6: br-enp8s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:1e:67:d8:99:e2 brd ff:ff:ff:ff:ff:ff
    inet 10.86.67.198/21 brd 10.86.71.255 scope global dynamic br-enp8s0f0
       valid_lft 596421sec preferred_lft 596421sec
    inet6 fe80::21e:67ff:fed8:99e2/64 scope link
       valid_lft forever preferred_lft forever
7: br-enp8s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:1e:67:d8:99:e3 brd ff:ff:ff:ff:ff:ff
    inet 172.31.0.11/16 brd 172.31.255.255 scope global dynamic br-enp8s0f1
       valid_lft 250829sec preferred_lft 250829sec
    inet6 fe80::21e:67ff:fed8:99e3/64 scope link
       valid_lft forever preferred_lft forever
8: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 52:54:00:0d:d8:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
9: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:0d:d8:b3 brd ff:ff:ff:ff:ff:ff
19: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 1000
    link/ether fe:54:00:28:61:94 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe28:6194/64 scope link
       valid_lft forever preferred_lft forever
20: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-enp8s0f0 state UNKNOWN qlen 1000
    link/ether fe:54:00:e6:5c:10 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fee6:5c10/64 scope link
       valid_lft forever preferred_lft forever
21: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-enp8s0f1 state UNKNOWN qlen 1000
    link/ether fe:54:00:68:c6:f3 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe68:c6f3/64 scope link
       valid_lft forever preferred_lft forever
[root@b16 ~]#


The problem is that when the app starts, no multicast is received since the destination mac address in the join is not a multicast one.

Code: Select all

No   Time        Src             Dst             Dst Mac Addr          Proto      Len  Info
26   34.471585   172.31.0.2      224.0.0.1       01:00:5e:00:00:01   IGMPv2   60   Membership Query, general
27   36.096534   172.31.0.14     224.0.0.2       01:00:5e:00:00:02   IGMPv2   46   Leave Group 239.195.170.85
28   36.099678   172.31.0.14     239.195.170.85  00:21:1c:37:d4:44   IGMPv2   46   Membership Report group 239.195.170.85

I imagine the igmp join would have succeeded had the dst mac addr been 01:00:5e:43:aa:55 instead of 00:21:1c:37:d4:44. The dst mac address is good in the igmp leave message. I would like to why the join contains a targeted dst mac address and not the multicast one. Is there some configuration required for this?

However if the network interface eth2 (172.31.0.14) is toggled (down-up), the multicast is received for about a minute before it stops. This seems because of a single join from (10.86.67.218) that goes through eth2 with a multicast mac address. The dst mac address for the joins from 172.31.0.14 remain targeted to 172.31.0.1. Why is it that we see this solitary join from 10.86.67.218?

Code: Select all

No   Time        Src             Dst              Dst Mac Addr         Proto      Len  Info
24    32.486959  172.31.0.14     224.0.0.2        01:00:5e:00:00:02   IGMPv2   46   Leave Group 239.195.170.85
25    32.489530  172.31.0.14     239.195.170.85   00:21:1c:37:d4:44   IGMPv2   46   Membership Report group 239.195.170.85
26    33.289447  10.86.67.218    239.195.170.85   01:00:5e:43:aa:55   IGMPv2   46   Membership Report group 239.195.170.85
27    78.031852  172.31.0.2      224.0.0.1        01:00:5e:00:00:01   IGMPv2   60   Membership Query, general
28    85.104750  172.31.0.14     239.195.170.85   00:21:1c:37:d4:44   IGMPv2   46   Membership Report group 239.195.170.85

If you have any answers to these questions, please do share them.