troglobit / pimd

PIM-SM/SSM multicast routing for UNIX and Linux
http://troglobit.com/projects/pimd/
BSD 3-Clause "New" or "Revised" License
194 stars 86 forks source link

Unable to start pimd with vrrp interfaces enabled #190

Closed jbrown8380 closed 2 years ago

jbrown8380 commented 3 years ago

I have a RHEL 7.8 machine (kernel 3.10.0-1127.10.1.el7.x86_64) that is running pimd (version 2.3.2) as well as keepalived (version 2.0.20). Keepalived is adding three virtual interfaces named vrrp.1, vrrp.2, and vrrp.3. These are intended to be the actual gateway intefaces/IPs for the network devices attached to the corresponding networks. These are the interfaces that I want to enable multicast forwarding, while leaving the physical network interfaces disabled for multicast forwarding.

When I attempt to use the command pimd -N I get the following errors:

image

My pimd.conf file contains the following:

phyint net0 disable phyint vrrp.1 igmpv2 phyint net1 disable phyint vrrp.2 igmpv2 phyint net2 disable phyint vrrp.3 igmpv2 igmp-query-interval 30 igmp-querier-timeout 95 bsr-candidate vrrp.1 priority 104 rp-candidate vrrp.1 time 60 priority 224 spt-threshold packets 0 interval 5

The interfaces are IP'd as follows: net0: 172.16.10.229/29 vrrp.1: 172.16.10.226/29

net1: 172.16.11.162/28 vrrp.2: 172.16.11.174/28

net2: 172.16.11.178/28 vrrp.3: 172.16.11.190/28

Is there any reason why pimd would consider the vrrp interfaces as invalid phyint devices?

troglobit commented 3 years ago

Sorry for the late reply. The only thing that springs to mind is to check if the MULTICAST flag is set on the vrrp interfaces. Other than that I'd recommend trying the latest master build (no new release yet), because it has a new way to probe for interfaces.

jbrown8380 commented 3 years ago

The MULTICAST flag is indeed set on the vrrp interfaces. I'll give the latest master build a try.

For clarification; though, are you saying that with the latest master build I could configure both my physical interface (net0) and the vrrp.1 interface with IPs in the same subnet, as shown in my original post above, pimd would be okay with that?

Thanks for your help.

I should mention that I've found a workaround as well. But it's a weird workaround.

I've found that if I configure my physical interfaces (net0 - net2) with 2 IPs, with the first of which in a separate subnet and as long as the IP in the other subnet is listed first when viewing the output of "ip addr show" command then pimd will start successfully.

For example, if I setup my IPs as follows pimd will start successfully:

net0: 192.168.100.1/30 172.16.10.229/29 vrrp.1: 172.16.10.226/29

net1: 192.168.101.1/30 172.16.11.162/28 vrrp.2: 172.16.11.174/28

net2: 192.168.102.1/30 172.16.11.178/28 vrrp.3: 172.16.11.190/28

It appears that pimd will only look at the first IP of the interface.

troglobit commented 3 years ago

OK, odd. Dunno atm what could be the cause of your problem.

No, the new interface probe uses getifaddrs() instead of ioctls, there are some changes not yet merged from mrouted, e.g. automatic altnet detection, but nothing that can handle multiple interfaces on the same subnet. That change would detect your workaround.

Some more information may be in order. The multicast routing daemons (pimd, mrouted, smcrouted) only set up routes in the kernel. All multicast routes are handled by the multicast routing stack and it has it's own concept of interfaces called VIFs (virtual interfaces. Hence the phyint for physical ones). So step one of the setup is to figure out which subnets should map to the same VIF, this is usually where we've seen problems around various setups.

troglobit commented 2 years ago

There is now a automated test for running the latest pimd with VRRP and OSPF, using keepalived and bird respectively. It was "fun" setting it up, and maybe the following line in the test would be of interest to others:

https://github.com/troglobit/pimd/blob/master/test/pod.sh#L309

Since it works for me, with the latest pimd (and a modern kernel), I'm closing this issue since it doesn't seem to be a problem with pimd.