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

Routing issue with multiple subnets #119

Closed swiergot closed 5 years ago

swiergot commented 6 years ago

Hi,

I have a Linux router (running pimd-2.3.1) which has addresses in multiple subnets (it's the only router in the network) and two IPIP tunnels. Here is my configuration:

/etc/pimd.conf

rp-address 10.1.253.9 228.4.0.0/19 rp-address 10.1.253.9 228.4.64.0/19 rp-address 10.2.253.9 228.8.0.0/19 rp-address 10.2.253.9 228.8.64.0/19 spt-threshold packets 0 interval 100

(10.1,253,9 and 10.2.253.9 are the router's addresses)

How pimd sees network interfaces:

10:29:04.143 Getting vifs from kernel 10:29:04.143 Installing eth0.100 (10.0.1.254 on subnet 10.0.1/24) as vif #0-7 - rate 0 10:29:04.143 Ignoring eth0.100 (10.1.1.254 on subnet 10.1.1/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.1.2.254 on subnet 10.1.2/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.1.25.254 on subnet 10.1.25/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.1.26.254 on subnet 10.1.26/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.2.1.254 on subnet 10.2.1/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.2.2.254 on subnet 10.2.2/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.2.25.254 on subnet 10.2.25/24) (alias for vif#0?) 10:29:04.143 Ignoring eth0.100 (10.2.26.254 on subnet 10.2.26/24) (alias for vif#0?) 10:29:04.143 Installing eth2.1001 (192.130.2.254 on subnet 192.130.2) as vif #1-8 - rate 0 10:29:04.143 Installing eth3.1202 (192.130.4.254 on subnet 192.130.4) as vif #2-9 - rate 0 10:29:04.143 Installing eth1.251 (10.2.251.51 on subnet 10.2.251/24) as vif #3-10 - rate 0 10:29:04.143 Installing eth0.16 (10.128.116.254 on subnet 10.128.116/24) as vif #4-11 - rate 0 10:29:04.143 Ignoring eth0.16 (10.129.116.254 on subnet 10.129.116/24) (alias for vif#4?) 10:29:04.143 Installing eth1.252 (10.2.252.51 on subnet 10.2.252/24) as vif #5-12 - rate 0 10:29:04.143 Installing eth0.21 (10.128.103.62 on subnet 10.128.103/24) as vif #6-13 - rate 0 10:29:04.143 Ignoring eth0.21 (10.129.103.62 on subnet 10.129.103/24) (alias for vif#6?) 10:29:04.143 Installing eth0.24 (10.128.117.254 on subnet 10.128.117/24) as vif #7-14 - rate 0 10:29:04.143 Ignoring eth0.24 (10.129.117.254 on subnet 10.129.117/24) (alias for vif#7?) 10:29:04.143 Installing eth1.253 (10.2.253.9 on subnet 10.2.253/24) as vif #8-15 - rate 0 10:29:04.143 Installing eth0.251 (10.1.251.51 on subnet 10.1.251/24) as vif #9-16 - rate 0 10:29:04.143 Installing eth1.31 (10.2.231.254 on subnet 10.2.231/24) as vif #10-17 - rate 0 10:29:04.143 Installing eth0.252 (10.1.252.51 on subnet 10.1.252/24) as vif #11-18 - rate 0 10:29:04.143 Installing eth1.402 (10.2.233.254 on subnet 10.2.233/24) as vif #12-19 - rate 0 10:29:04.143 Installing eth0.253 (10.1.253.9 on subnet 10.1.253/24) as vif #13-20 - rate 0 10:29:04.143 Installing eth1.41 (10.2.241.254 on subnet 10.2.241/24) as vif #14-21 - rate 0 10:29:04.143 Installing eth0.26 (10.128.114.254 on subnet 10.128.114/24) as vif #15-22 - rate 0 10:29:04.143 Ignoring eth0.26 (10.129.114.254 on subnet 10.129.114/24) (alias for vif#15?) 10:29:04.143 Installing eth0.31 (10.1.231.254 on subnet 10.1.231/24) as vif #16-23 - rate 0 10:29:04.143 Installing eth1.42 (10.2.242.254 on subnet 10.2.242/24) as vif #17-24 - rate 0 10:29:04.143 Installing eth1.602 (10.129.105.254 on subnet 10.129.105/24) as vif #18-25 - rate 0 10:29:04.143 Installing eth0.336 (10.1.236.254 on subnet 10.1.236/24) as vif #19-26 - rate 0 10:29:04.143 Ignoring eth0.336 (10.2.236.254 on subnet 10.2.236/24) (alias for vif#19?) 10:29:04.143 Installing eth0.37 (10.1.237.254 on subnet 10.1.237/24) as vif #20-27 - rate 0 10:29:04.143 Ignoring eth0.37 (10.2.237.254 on subnet 10.2.237/24) (alias for vif#20?) 10:29:04.143 Installing eth0.401 (10.1.233.254 on subnet 10.1.233/24) as vif #21-28 - rate 0 10:29:04.143 Installing eth0.41 (10.1.241.254 on subnet 10.1.241/24) as vif #22-29 - rate 0 10:29:04.143 Installing eth0.42 (10.1.242.254 on subnet 10.1.242/24) as vif #23-30 - rate 0 10:29:04.143 Installing eth0.601 (10.128.105.254 on subnet 10.128.105/24) as vif #24-31 - rate 0 10:29:04.143 Installing ipiptun1 (172.24.16.5 -> 172.24.16.6) as vif #25-32 - rate 0 10:29:04.143 Installing ipiptun2 (172.24.32.9 -> 172.24.32.10) as vif #26-33 - rate 0

(...)

10:29:04.143 Interface eth0.100 comes up; vif #0 now in service 10:29:04.143 query_groups(): Sending IGMP v3 query on eth0.100 10:29:04.143 Send IGMP Membership Query from 10.0.1.254 to 224.0.0.1 10:29:04.143 SENT 36 bytes IGMP Membership Query from 10.0.1.254 to 224.0.0.1 10:29:04.143 SENT 46 bytes PIM v2 Hello from 10.0.1.254 to 224.0.0.13 10:29:04.143 Interface eth2.1001 comes up; vif #1 now in service 10:29:04.144 query_groups(): Sending IGMP v3 query on eth2.1001 10:29:04.144 Send IGMP Membership Query from 192.130.2.254 to 224.0.0.1 10:29:04.144 SENT 36 bytes IGMP Membership Query from 192.130.2.254 to 224.0.0.1 10:29:04.144 SENT 46 bytes PIM v2 Hello from 192.130.2.254 to 224.0.0.13 10:29:04.144 Interface eth3.1202 comes up; vif #2 now in service 10:29:04.144 query_groups(): Sending IGMP v3 query on eth3.1202 10:29:04.144 Send IGMP Membership Query from 192.130.4.254 to 224.0.0.1 10:29:04.144 SENT 36 bytes IGMP Membership Query from 192.130.4.254 to 224.0.0.1 10:29:04.144 SENT 46 bytes PIM v2 Hello from 192.130.4.254 to 224.0.0.13 10:29:04.144 Interface eth1.251 comes up; vif #3 now in service 10:29:04.144 query_groups(): Sending IGMP v3 query on eth1.251 10:29:04.144 Send IGMP Membership Query from 10.2.251.51 to 224.0.0.1 10:29:04.144 SENT 36 bytes IGMP Membership Query from 10.2.251.51 to 224.0.0.1 10:29:04.144 SENT 46 bytes PIM v2 Hello from 10.2.251.51 to 224.0.0.13 10:29:04.144 Interface eth0.16 comes up; vif #4 now in service 10:29:04.144 query_groups(): Sending IGMP v3 query on eth0.16 10:29:04.144 Send IGMP Membership Query from 10.128.116.254 to 224.0.0.1 10:29:04.144 SENT 36 bytes IGMP Membership Query from 10.128.116.254 to 224.0.0.1 10:29:04.144 SENT 46 bytes PIM v2 Hello from 10.128.116.254 to 224.0.0.13 10:29:04.144 Interface eth1.252 comes up; vif #5 now in service 10:29:04.150 query_groups(): Sending IGMP v3 query on eth1.252 10:29:04.150 Send IGMP Membership Query from 10.2.252.51 to 224.0.0.1 10:29:04.150 SENT 36 bytes IGMP Membership Query from 10.2.252.51 to 224.0.0.1 10:29:04.150 SENT 46 bytes PIM v2 Hello from 10.2.252.51 to 224.0.0.13 10:29:04.151 Interface eth0.21 comes up; vif #6 now in service 10:29:04.151 query_groups(): Sending IGMP v3 query on eth0.21 10:29:04.151 Send IGMP Membership Query from 10.128.103.62 to 224.0.0.1 10:29:04.151 SENT 36 bytes IGMP Membership Query from 10.128.103.62 to 224.0.0.1 10:29:04.151 SENT 46 bytes PIM v2 Hello from 10.128.103.62 to 224.0.0.13 10:29:04.151 Interface eth0.24 comes up; vif #7 now in service 10:29:04.152 query_groups(): Sending IGMP v3 query on eth0.24 10:29:04.152 Send IGMP Membership Query from 10.128.117.254 to 224.0.0.1 10:29:04.152 SENT 36 bytes IGMP Membership Query from 10.128.117.254 to 224.0.0.1 10:29:04.152 SENT 46 bytes PIM v2 Hello from 10.128.117.254 to 224.0.0.13 10:29:04.152 Interface eth1.253 comes up; vif #8 now in service 10:29:04.153 query_groups(): Sending IGMP v3 query on eth1.253 10:29:04.153 Send IGMP Membership Query from 10.2.253.9 to 224.0.0.1 10:29:04.153 SENT 36 bytes IGMP Membership Query from 10.2.253.9 to 224.0.0.1 10:29:04.153 SENT 46 bytes PIM v2 Hello from 10.2.253.9 to 224.0.0.13 10:29:04.153 Interface eth0.251 comes up; vif #9 now in service 10:29:04.153 query_groups(): Sending IGMP v3 query on eth0.251 10:29:04.153 Send IGMP Membership Query from 10.1.251.51 to 224.0.0.1 10:29:04.153 SENT 36 bytes IGMP Membership Query from 10.1.251.51 to 224.0.0.1 10:29:04.153 SENT 46 bytes PIM v2 Hello from 10.1.251.51 to 224.0.0.13 10:29:04.154 Interface eth1.31 comes up; vif #10 now in service 10:29:04.154 query_groups(): Sending IGMP v3 query on eth1.31 10:29:04.154 Send IGMP Membership Query from 10.2.231.254 to 224.0.0.1 10:29:04.154 SENT 36 bytes IGMP Membership Query from 10.2.231.254 to 224.0.0.1 10:29:04.154 SENT 46 bytes PIM v2 Hello from 10.2.231.254 to 224.0.0.13 10:29:04.154 Interface eth0.252 comes up; vif #11 now in service 10:29:04.154 query_groups(): Sending IGMP v3 query on eth0.252 10:29:04.154 Send IGMP Membership Query from 10.1.252.51 to 224.0.0.1 10:29:04.154 SENT 36 bytes IGMP Membership Query from 10.1.252.51 to 224.0.0.1 10:29:04.155 SENT 46 bytes PIM v2 Hello from 10.1.252.51 to 224.0.0.13 10:29:04.155 Interface eth1.402 comes up; vif #12 now in service 10:29:04.155 query_groups(): Sending IGMP v3 query on eth1.402 10:29:04.155 Send IGMP Membership Query from 10.2.233.254 to 224.0.0.1 10:29:04.155 SENT 36 bytes IGMP Membership Query from 10.2.233.254 to 224.0.0.1 10:29:04.155 SENT 46 bytes PIM v2 Hello from 10.2.233.254 to 224.0.0.13 10:29:04.155 Interface eth0.253 comes up; vif #13 now in service 10:29:04.155 query_groups(): Sending IGMP v3 query on eth0.253 10:29:04.156 Send IGMP Membership Query from 10.1.253.9 to 224.0.0.1 10:29:04.156 SENT 36 bytes IGMP Membership Query from 10.1.253.9 to 224.0.0.1 10:29:04.156 SENT 46 bytes PIM v2 Hello from 10.1.253.9 to 224.0.0.13 10:29:04.156 Interface eth1.41 comes up; vif #14 now in service 10:29:04.156 query_groups(): Sending IGMP v3 query on eth1.41 10:29:04.156 Send IGMP Membership Query from 10.2.241.254 to 224.0.0.1 10:29:04.156 SENT 36 bytes IGMP Membership Query from 10.2.241.254 to 224.0.0.1 10:29:04.156 SENT 46 bytes PIM v2 Hello from 10.2.241.254 to 224.0.0.13 10:29:04.156 Interface eth0.26 comes up; vif #15 now in service 10:29:04.157 query_groups(): Sending IGMP v3 query on eth0.26 10:29:04.157 Send IGMP Membership Query from 10.128.114.254 to 224.0.0.1 10:29:04.157 SENT 36 bytes IGMP Membership Query from 10.128.114.254 to 224.0.0.1 10:29:04.157 SENT 46 bytes PIM v2 Hello from 10.128.114.254 to 224.0.0.13 10:29:04.157 Interface eth0.31 comes up; vif #16 now in service 10:29:04.158 query_groups(): Sending IGMP v3 query on eth0.31 10:29:04.158 Send IGMP Membership Query from 10.1.231.254 to 224.0.0.1 10:29:04.158 SENT 36 bytes IGMP Membership Query from 10.1.231.254 to 224.0.0.1 10:29:04.158 SENT 46 bytes PIM v2 Hello from 10.1.231.254 to 224.0.0.13 10:29:04.158 Interface eth1.42 comes up; vif #17 now in service 10:29:04.158 query_groups(): Sending IGMP v3 query on eth1.42 10:29:04.158 Send IGMP Membership Query from 10.2.242.254 to 224.0.0.1 10:29:04.158 SENT 36 bytes IGMP Membership Query from 10.2.242.254 to 224.0.0.1 10:29:04.159 SENT 46 bytes PIM v2 Hello from 10.2.242.254 to 224.0.0.13 10:29:04.159 Interface eth1.602 comes up; vif #18 now in service 10:29:04.159 query_groups(): Sending IGMP v3 query on eth1.602 10:29:04.159 Send IGMP Membership Query from 10.129.105.254 to 224.0.0.1 10:29:04.159 SENT 36 bytes IGMP Membership Query from 10.129.105.254 to 224.0.0.1 10:29:04.159 SENT 46 bytes PIM v2 Hello from 10.129.105.254 to 224.0.0.13 10:29:04.160 Interface eth0.336 comes up; vif #19 now in service 10:29:04.163 query_groups(): Sending IGMP v3 query on eth0.336 10:29:04.163 Send IGMP Membership Query from 10.1.236.254 to 224.0.0.1 10:29:04.163 SENT 36 bytes IGMP Membership Query from 10.1.236.254 to 224.0.0.1 10:29:04.163 SENT 46 bytes PIM v2 Hello from 10.1.236.254 to 224.0.0.13 10:29:04.163 Interface eth0.37 comes up; vif #20 now in service 10:29:04.163 query_groups(): Sending IGMP v3 query on eth0.37 10:29:04.163 Send IGMP Membership Query from 10.1.237.254 to 224.0.0.1 10:29:04.163 SENT 36 bytes IGMP Membership Query from 10.1.237.254 to 224.0.0.1 10:29:04.163 SENT 46 bytes PIM v2 Hello from 10.1.237.254 to 224.0.0.13 10:29:04.163 Interface eth0.401 comes up; vif #21 now in service 10:29:04.164 query_groups(): Sending IGMP v3 query on eth0.401 10:29:04.164 Send IGMP Membership Query from 10.1.233.254 to 224.0.0.1 10:29:04.164 SENT 36 bytes IGMP Membership Query from 10.1.233.254 to 224.0.0.1 10:29:04.164 SENT 46 bytes PIM v2 Hello from 10.1.233.254 to 224.0.0.13 10:29:04.164 Interface eth0.41 comes up; vif #22 now in service 10:29:04.164 query_groups(): Sending IGMP v3 query on eth0.41 10:29:04.164 Send IGMP Membership Query from 10.1.241.254 to 224.0.0.1 10:29:04.164 SENT 36 bytes IGMP Membership Query from 10.1.241.254 to 224.0.0.1 10:29:04.164 SENT 46 bytes PIM v2 Hello from 10.1.241.254 to 224.0.0.13 10:29:04.165 Interface eth0.42 comes up; vif #23 now in service 10:29:04.165 query_groups(): Sending IGMP v3 query on eth0.42 10:29:04.165 Send IGMP Membership Query from 10.1.242.254 to 224.0.0.1 10:29:04.165 SENT 36 bytes IGMP Membership Query from 10.1.242.254 to 224.0.0.1 10:29:04.165 SENT 46 bytes PIM v2 Hello from 10.1.242.254 to 224.0.0.13 10:29:04.165 Interface eth0.601 comes up; vif #24 now in service 10:29:04.165 query_groups(): Sending IGMP v3 query on eth0.601 10:29:04.165 Send IGMP Membership Query from 10.128.105.254 to 224.0.0.1 10:29:04.165 SENT 36 bytes IGMP Membership Query from 10.128.105.254 to 224.0.0.1 10:29:04.166 SENT 46 bytes PIM v2 Hello from 10.128.105.254 to 224.0.0.13 10:29:04.166 Interface ipiptun1 comes up; vif #25 now in service 10:29:04.166 query_groups(): Sending IGMP v3 query on ipiptun1 10:29:04.166 Send IGMP Membership Query from 172.24.16.5 to 224.0.0.1 10:29:04.166 SENT 36 bytes IGMP Membership Query from 172.24.16.5 to 224.0.0.1 10:29:04.166 SENT 46 bytes PIM v2 Hello from 172.24.16.5 to 224.0.0.13 10:29:04.166 Interface ipiptun2 comes up; vif #26 now in service 10:29:04.166 query_groups(): Sending IGMP v3 query on ipiptun2 10:29:04.166 Send IGMP Membership Query from 172.24.32.9 to 224.0.0.1 10:29:04.166 SENT 36 bytes IGMP Membership Query from 172.24.32.9 to 224.0.0.1 10:29:04.167 SENT 46 bytes PIM v2 Hello from 172.24.32.9 to 224.0.0.13 10:29:04.168 Interface register_vif0 comes up; vif #27 now in service

The effect is that multicasts are routed to ipiptun2 just fine, but not to ipiptun1. Digging further into the debug output I can see this for ipiptun1:

10:29:04.635 Received IGMP v2 Membership Report from 172.24.16.6 to 228.4.0.0 10:29:04.636 accept_group_report(): igmp_src 172.24.16.6 ssm_src 228.4.0.0 group 228.4.0.0 report_type 22 10:29:04.636 accept_group_report(): al_pv=2 10:29:04.636 Set delete timer for group: 228.4.0.0 10:29:04.636 create group entry, group 228.4.0.0

10:29:04.774 Cache miss, src 10.1.231.1, dst 228.4.0.0, iif 10 10:29:04.775 find_route: Not PMBR, return NULL 10:29:04.775 Switch shortest path (SPT): src 10.1.231.1, group 228.4.0.0 10:29:04.775 create group entry, group 228.4.0.0

For ipiptun2 it's a bit different:

10:29:04.237 Received IGMP v2 Membership Report from 172.24.32.10 to 228.8.0.1 10:29:04.237 accept_group_report(): igmp_src 172.24.32.10 ssm_src 228.8.0.1 group 228.8.0.1 report_type 22 10:29:04.237 accept_group_report(): al_pv=2 10:29:04.237 Set delete timer for group: 228.8.0.1 10:29:04.238 create group entry, group 228.8.0.1

10:29:04.288 Cache miss, src 10.2.231.1, dst 228.8.0.1, iif 10 10:29:04.288 create group entry, group 228.8.0.1

The configuration for the two IPIP tunnels as well as 10.1.231/24 and 10.2.231/24 networks is symmetrical. I don't understand why pimd treats them differently. I have noticed that in both cases the "cache miss" log entry mentions "iif 10", that doesn't seem right, does it?

Could you please help me solve this problem?

Thank you.

troglobit commented 6 years ago

Hi @swiergot, it's quite hard to picture your setup and understand the problem. Do you think you could add like a topological drawing (ASCII art is fine) and describe the setup a bit more?

troglobit commented 5 years ago

Unless some more information is provided in this issue, I'll close it by the end of the month.

troglobit commented 5 years ago

Closing due to lack of information from reporter + timeout.