+++ This bug was initially created as a clone of Bug #2103285 +++ This is a clone of bug 2103285. the summary is: - cloud-init creates NetworkManager profiles with `ipv6.addr-gen-mode=eui64`. That is good and necessary in the environment of bug 2103285. Note that cloud-init does not explicitly configure eui64 in NetworkManager. But it gets it implicitly, because it does not specify the addr-gen-mode in the files that it writes. - later, when other interfaces get added, NetworkManager auto generates new profiles for those interfaces and activates them. Those are named "Wired connection 1". Those profiles have `ipv6.addr-gen-mode=default` (which, on most RHEL systems ends up being "stable-private" and not "eui64"). That causes problems for the custome. In NetworkManager 1.40, the per-profile setting of "ipv6.addr-gen-mode" can be overriden by global-connection-defaults in NetworkManage.conf. See for details the commit message https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/commit/e6a33c04ebe1ac84e31628911e25bdfd7534dd3c. This was requested by bug 2082682 for the CoreOS issue https://github.com/coreos/fedora-coreos-tracker/issues/907. Note that in https://bugzilla.redhat.com/show_bug.cgi?id=2082682#c15 there was also consideration whether this needs to be adressed in cloud-init. So far, it was not, but this report is about doing that. Choosing addr-gen-mode=eui64 may not be best in all cases. See for example https://github.com/coreos/fedora-coreos-tracker/issues/907#issuecomment-1119911839 . However, as cloud-init already deploys it profiles with eui64, it seems to have already made that choice. It should go one step further, and deploy a file /etc/NetworkManager/conf.d/30-cloud-init-ip6-addr-gen-mode.conf with content: # This is generated by cloud-init. # [connection.30-cloud-init-ip6-addr-gen-mode] # Select EUI64 to be used if the profile does not specify it. ipv6.addr-gen-mode=0 This will work with NetworkManager 1.40.0+, rhel-8.7+, rhel-9.2+
Upstream discussion will happen as a part of https://github.com/canonical/cloud-init/pull/4291 .
Tested with cloud-init-23.1.1-9.el9(NetworkManager-1.43.9-1.el9.x86_64) on OpenStack, the instance can get ipv6 address and ping successfully, and I think the below test results are expected, setting Verified:Tested ---- # cat /etc/cloud/cloud.cfg network: renderers: ['network-manager', 'eni', 'netplan', 'sysconfig', 'networkd'] ---- # nmcli -f NAME,FILENAME,DBUS-PATH c show NAME FILENAME DBUS-PATH cloud-init eth0 /etc/NetworkManager/system-connections/cloud-init-eth0.nmconnection /org/freedesktop/NetworkManager/Settings/1 lo /run/NetworkManager/system-connections/lo.nmconnection /org/freedesktop/NetworkManager/Settings/2 # cat /etc/NetworkManager/system-connections/cloud-init-eth0.nmconnection # Generated by cloud-init. Changes will be lost. [connection] id=cloud-init eth0 ... [ipv6] method=auto may-fail=false route1=::/0,2620:52:0:84::3fe # nmcli -o c show /etc/NetworkManager/system-connections/cloud-init-eth0.nmconnection connection.id: cloud-init eth0 ... ipv4.method: auto ipv4.may-fail: no ipv6.method: auto ipv6.routes: { ip = ::/0, nh = 2620:52:0:84::3fe } ipv6.may-fail: no ipv6.addr-gen-mode: default-or-eui64 # cat /etc/NetworkManager/conf.d/30-cloud-init-ip6-addr-gen-mode.conf # This is generated by cloud-init. Do not edit. # [.config] enable=nm-version-min:1.40 [connection.30-cloud-init-ip6-addr-gen-mode] # Select EUI64 to be used if the profile does not specify it. ipv6.addr-gen-mode=0
Move to VERIFIED per comment 10