我发现安装了各种 Ubuntu 16.04 发行版(Ubuntu 16.04 LTS、Xubuntu 16.04、Mythbuntu 16.04)的多台服务器和虚拟机都存在问题,这些服务器和虚拟机配置为使用 DHCP 自动获取 IP 地址,而 DHCP 获取的 IP 地址会被从系统中删除。发生频率各不相同 - 可能连续多天发生,也可能间隔 30 多天。
我已经确定,由于某种原因,当出现此问题时,dhclient 似乎在租约到期之前进行了续订,但由于某种原因,NetworkManager 似乎没有看到这一点,因为 syslog 或 kern.log 中没有 NetworkManager 日志条目,但有成功续订的条目,表明已收到续订,并且界面已使用新的到期日期进行了更新。
我的租约期限为 24 小时,当发生这种情况时,距离 NetworkManager 看到的最后一次 dhclient 续订正好 24 小时后,IP 将从接口中删除。
直到 11 月份安装网络管理器 1.2.2-0ubuntu0.16.04.3 更新之后,我才在任何服务器或虚拟机上看到这种情况的发生。
成功续订的系统日志条目:
Jan 24 15:16:32 <hostname> dhclient[1036]: DHCPREQUEST of 192.168.2.11 on ens160 to 192.168.2.1 port 67 (xid=0x35fe6348)
Jan 24 15:16:32 <hostname> dhclient[1036]: DHCPACK of 192.168.2.11 from 192.168.2.1
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2921] address 192.168.2.11
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] plen 24 (255.255.255.0)
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] gateway 192.168.2.1
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] server identifier 192.168.2.1
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] lease time 86400
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] nameserver '192.168.2.1'
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] dhcp4 (ens160): state changed bound -> bound
Jan 24 15:16:32 <hostname> dhclient[1036]: bound to 192.168.2.11 -- renewal in 40856 seconds.
Jan 24 15:16:32 <hostname> dbus[810]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Jan 24 15:16:32 <hostname> systemd[1]: Starting Network Manager Script Dispatcher Service...
Jan 24 15:16:32 <hostname> dbus[810]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jan 24 15:16:32 <hostname> systemd[1]: Started Network Manager Script Dispatcher Service.
Jan 24 15:16:32 <hostname> nm-dispatcher: req:1 'dhcp4-change' [ens160]: new request (1 scripts)
Jan 24 15:16:32 <hostname> nm-dispatcher: req:1 'dhcp4-change' [ens160]: start running ordered scripts...
成功续订的 Kernel.log 条目:
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2921] address 192.168.2.11
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] plen 24 (255.255.255.0)
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] gateway 192.168.2.1
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] server identifier 192.168.2.1
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] lease time 86400
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] nameserver '192.168.2.1'
Jan 24 15:16:32 <hostname> NetworkManager[847]: <info> [1485299792.2926] dhcp4 (ens160): state changed bound -> bound
网络管理器未看到更新的 Syslog 条目。请注意,完全没有 NetworkManager 条目。
Jan 25 23:04:54 <hostname> dhclient[1036]: DHCPREQUEST of 192.168.2.11 on ens160 to 192.168.2.1 port 67 (xid=0x35fe6348)
Jan 25 23:04:54 <hostname> dhclient[1036]: DHCPACK of 192.168.2.11 from 192.168.2.1
Jan 25 23:04:54 <hostname> dhclient[1036]: bound to 192.168.2.11 -- renewal in 42517 seconds.
网络管理器未看到 Kernel.log 中的续订条目 - 完全没有让我得出结论,dhclient 执行的续订没有更新接口的租约信息,这就是为什么当旧租约条目到期时 IP 从接口中删除的原因。
如上所述,频率是不可预测的——这种情况可能在发生之间间隔 30 多天,也可能在前一次发生后几天或更短时间内发生。当 IP 丢失时,日志还会显示自上次成功续订以来,不止一次续订未正确处理且界面更新。还存在单个续订处理失败但后续续订发生且在上次成功处理的续订的租约到期之前成功的情况。
我非常有信心我可以通过为服务器配置静态 IP 来解决这个问题,但我更愿意解决这个问题并让我的 DHCP 服务器来分配静态映射的 IP。