Set router solicitation delay with using NM

The linux kernel and NetworkManager fight each other over control for
interface management when router advertisements are in use. Long story
short if the linux kernel configures a network interface for ipv6
before NetworkManager attempts to manage that interface then NM will
ignore the interface and not configure ipv4 on it.

This can happen because the kernel is configured to send router
advertisements solicitations which result in router advertisements which
the kernel uses to configure the interface(s). There is a default of a 1
second delay before sending the solicitation which in many cases is long
enough that NM has started before then. However, in slower environments
like those used for testing with qemu this isn't long enough.

Some testing by hand indicates that 15 seconds is about right so
increase the delay to 15 seconds via sysctl.conf.

Note this may increase boot times in ipv6 only environments (though it
is hard to be sure due to how systemd starts everything at once and does
socket activation and the like).

Change-Id: I475a253091cbaf63687b91c748c31a6753bb0f57
This commit is contained in:
Clark Boylan 2019-07-10 08:33:17 -07:00
parent 472be2a144
commit 5b5b78bf59

View File

@ -37,3 +37,16 @@ case "$DIB_INIT_SYSTEM" in
exit 1
;;
esac
if [[ ${DIB_SIMPLE_INIT_NETWORKMANAGER} != 0 ]]; then
# If we are using NetworkManager then we have to avoid having the kernel
# configure ipv6 addresses on an interface (via router advertisements)
# until NetworkManager starts. If the interface is configured by the
# kernel before NetworkManager then NetworkManager will ignore the
# interface and not configure ipv4 on it. It does this because it assumes
# some other entity is in control of the interface.
# Debian has a many year old long bug report detailing this behavior with
# the most interesting comment being at the end:
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755202#331
echo 'net.ipv6.conf.default.router_solicitation_delay=15' >> /etc/sysctl.conf
fi