我有一台配置了静态 IP 的 Linux 机器,看起来还不错。静态 IP 地址可以工作几个小时,然后又恢复为(看起来)DHCP 告诉它使用的 IP 地址。
这是我的 /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.0.101
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.254
有任何想法吗?
答案1
我在 Ubuntu Server 上遇到了同样的问题,但我想我已经解决了。当我重新启动网络时,dhclient3 仍在运行。从 htop 查看它,它的参数中有一些“eth0”,所以我怀疑它仍在为 eth0 寻找 dhcp 更新。我无法使用 apt-get 删除 dhcp-client,所以我运行了:
sudo kill $(ps -aux | grep dhc | grep eth0 | awk '{print $2}')
注意:此代码可能会终止服务器上的其他程序!请放心,将“eth0”替换为您已设置静态 IP 的接口名称!或者通过 htop 终止接口的 dhclient 或 dhclient3。
答案2
我遇到了同样的问题。dhclient 守护进程太疯狂了。健全性检查需要改进。它应该是这样的:
- 发现现有的租约信息(/var/lib/dhcp/*)
- 验证所有接口的 DHCP 配置(/etc/network/interfaces)
- 如果接口是静态配置的,则清除 DHCP 租约信息并在执行期间忽略该接口。
- 如果接口不是静态配置的并且具有现有租约信息,则相应地进行续订。
- 如果接口不是静态配置的并且没有现有的租用信息,则进行相应的发现。
历史 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
当问题持续存在时,我看到 /var/log/syslog 中填满了以下行:
May 3 06:25:36 xxxxxx dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67
dhclient 进程正在后台运行,可以通过“ps aux | grep dhc”确认
在确认“/etc/network/interfaces”中为 eth0 设置的静态 IP 正确后,我重新启动了网络服务。重新启动网络服务后,静态 IP 一直保持到租约到期,此时 dhclient 会更新之前 DHCP 分配的地址,该地址是在系统初始配置时收到的。此信息保存在“/var/lib/dhcp/*”中。
过去几天,我在三个系统上都发现了这种现象。系统信息:
# cat /etc/issue.net
Debian GNU/Linux 7
# cat /proc/version
Linux version 3.2.0-4-amd64 ([email protected]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.68-1+deb7u1
# dhclient -version
Internet Systems Consortium DHCP Client 4.2.2
解决 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
注意:以 root 身份执行或在每个命令后添加 sudo。
# dhclient -r
# dhclient -x
# rm /var/lib/dhcp/*
# shutdown -r 0
结果:dhclient 进程没有随系统自动启动,“ifconfig”显示 eth0 已正确配置静态 IP,syslog 中没有 DHCP 垃圾邮件,并且更改在多次系统重启后仍然有效。
注意:我的系统依赖静态分配的 IP 地址才能正常运行。如果您将此修复程序应用于笔记本电脑,则可能会破坏 wifi 连接。