I've closed down on the root cause being the /usr/lib/NetworkManager/nm- dhcp-helper tool. Occasionally, this binary runs, but fails to correctly send the update to NetworkManager. No errors occur when this happens; NetworkManager in debug mode just says "accepted connection on private socket" then "closed connection on private socket" without any updates happening.
I've managed to work around the issue by wrapping /usr/lib/NetworkManager/nm-dhcp-helper in a shell script that simply performs the same lease update until the logs indicate that NetworkManager received it. This doesn't fix the communication problem, but adds a safety net that prevents the resulting issues. It's been tested in an office network of some 12 PCs. If anyone runs into this issue as well, run the following script to work around it: -----8<----- #!/bin/bash HELPERSCRIPT="/usr/lib/NetworkManager/nm-dhcp-helper" HELPERBIN="/usr/lib/NetworkManager/nm-dhcp-helper.bin" function is_elf() { readelf -h "$1" >/dev/null 2>&1 if [ "$?" = "1" ]; then echo "0" else echo "1" fi } if [ "$(is_elf $HELPERSCRIPT)" = "1" ]; then mv "$HELPERSCRIPT" "$HELPERBIN" fi cat <<EOF >"$HELPERSCRIPT" #!/usr/bin/perl use strict; use warnings; if(\$< != 0) { die "Must run as root\n"; } my \$reason = \$ENV{reason} || ""; if(\$reason eq "PREINIT") { # not lease information, so waiting for the journal will make # nm-dhcp-helper wait for too long, just send it once and exit so # dhclient will start to get a lease system("${HELPERBIN}"); exit(0); } my \$attempts = 0; my \$success = 0; while(\$attempts < 10) { \$attempts++; my \$time = time(); sleep(1); system("${HELPERBIN}"); sleep(1); my \$leasetime = \`/bin/journalctl --since='\\@\$time' | grep NetworkManager | grep ' lease time ' | wc -l\`; if(\$leasetime == 1) { \$success = 1; last; } # Try again in 5 seconds sleep(5); } if(\$attempts > 1) { open my \$fh, ">>", "/tmp/nm-helper-retries.log" or die \$!; my \$date = \`/bin/date\`; 1 while chomp \$date; if(\$success) { print \$fh "\$date: needed \$attempts attempts to update NetworkManager (\$reason).\n"; } else { print \$fh "\$date: gave up after \$attempts attempts (\$reason).\n"; } close \$fh; } exit(0); EOF chmod +x $HELPERSCRIPT /usr/sbin/aa-complain /etc/apparmor.d/sbin.dhclient -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1696415 Title: NetworkManager does not update IPv4 address lifetime even though DHCP lease was successfully renewed To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1696415/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs