Skip to content

dhcpcd changes route incorrectly with multiple routers present (IPv6) #492

@telmich

Description

@telmich

Situation

  • A network has multiple routers
  • Each router announcers router advertisements, however with different priority

Observed behaviour

  • dhcpcd frequently changes the default route, sometimes just to put it back to the same router

related log:

bridge:~# dhcpcd -B 
no such user dhcpcd
dhcpcd-10.2.2 starting
DUID 00:01:00:01:2b:e7:83:67:f8:e4:e3:e2:37:a4
wlan0: connected to Access Point: Digital Glarus IPv6
eth0: waiting for carrier
wlan0: IAID e3:e2:37:a4
wlan0: soliciting an IPv6 router
wlan0: soliciting a DHCP lease
wlan0: Router Advertisement from fe80::62be:b4ff:fe07:72bb
wlan0: adding address 2a0a:e5c0:10:bee:fae4:e3ff:fee2:37a4/64
wlan0: adding route to 2a0a:e5c0:10:bee::/64
wlan0: adding default route via fe80::62be:b4ff:fe07:72bb




wlan0: using IPv4LL address 169.254.143.145
wlan0: adding route to 169.254.0.0/16
wlan0: adding default route
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: Router Advertisement from fe80::62be:b4ff:fe07:e90e
wlan0: adding address 2a0a:e5c0:10:bee:fae4:e3ff:fee2:37a4/64
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64
wlan0: changing default route via fe80::62be:b4ff:fe07:72bb
wlan0: changing route to 2a0a:e5c0:10:bee::/64

....

Every time the route is replaced/readded, the connections from the host break, thus resulting into a very "shaky" network experience.

Expected behaviour

  • dhcpcd sees both RAs and either a) deploys 2 default routes with different metrics (preferred behaviour)
  • dhcpcd sees both RAs and only deploys the higher priority default route

RAs

The following RAs are seen in the network:

#
# radvd configuration generated by radvdump 2.19
# based on Router Advertisement from fe80::62be:b4ff:fe07:e90e
# received by interface wlan0
#

interface wlan0
{
	AdvSendAdvert on;
	# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
	AdvManagedFlag off;
	AdvOtherConfigFlag off;
	AdvReachableTime 0;
	AdvRetransTimer 0;
	AdvCurHopLimit 64;
	AdvDefaultLifetime 600;
	AdvHomeAgentFlag off;
	AdvDefaultPreference low;

	prefix 2a0a:e5c0:10:bee::/64
	{
		AdvValidLifetime 86400;
		AdvPreferredLifetime 14400;
		AdvOnLink on;
		AdvAutonomous on;
		AdvRouterAddr off;
	}; # End of prefix definition


	RDNSS 2a0a:e5c0:10:a::a 2a0a:e5c0:10:a::b
	{
		AdvRDNSSLifetime 3600;
	}; # End of RDNSS definition


	DNSSL place10.ungleich.ch
	{
		AdvDNSSLLifetime 3600;
	}; # End of DNSSL definition

}; # End of interface definition
#
# radvd configuration generated by radvdump 2.19
# based on Router Advertisement from fe80::62be:b4ff:fe07:72bb
# received by interface wlan0
#

interface wlan0
{
	AdvSendAdvert on;
	# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
	AdvManagedFlag off;
	AdvOtherConfigFlag off;
	AdvReachableTime 0;
	AdvRetransTimer 0;
	AdvCurHopLimit 64;
	AdvDefaultLifetime 600;
	AdvHomeAgentFlag off;
	AdvDefaultPreference high;

	prefix 2a0a:e5c0:10:bee::/64
	{
		AdvValidLifetime 86400;
		AdvPreferredLifetime 14400;
		AdvOnLink on;
		AdvAutonomous on;
		AdvRouterAddr off;
	}; # End of prefix definition


	RDNSS 2a0a:e5c0:10:a::a 2a0a:e5c0:10:a::b
	{
		AdvRDNSSLifetime 3600;
	}; # End of RDNSS definition


	DNSSL place10.ungleich.ch
	{
		AdvDNSSLLifetime 3600;
	}; # End of DNSSL definition

}; # End of interface definition

It can be seen that the AdvDefaultPreference is different in the two announcements.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions