我有一个/etc/network/interfaces
文件(在 16.04 盒子上),如下所示:
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.88.50
netmask 255.255.255.0
gateway 192.168.88.1
dns-nameservers 192.168.88.1
dns-domain mynet.lan
您可能希望这会导致eth0
出现指定的 IP。但这并没有发生。在启动过程中,我看到一行内容:
IP-Config: eth0 hardware address e0:db:55:0c:34:7e mtu 1500 DHCP
..然后接口就会使用本地 DHCP 服务器提供的非常有用的地址。
更令人不安的是,这个 IP-Config 行仅在启动时显示并且在我的任何日志文件中都看不到。
什么是 IP-Config,为什么它会破坏我的interfaces
文件,在哪里可以配置它?
更多信息:
虚假地址(在我的情况下为 192.168.88.222)仅在启动期间创建,有时是在if*
脚本到达它之前。ip addr
显示错误地址(从 DHCP 收集)直接位于正确地址(标记为“次要”)上方。
tl;dr:在使用命令正常启动之前,某些东西正在为 DHCP 进行广播并将其分配给 NIC if*
,从而导致同一个 NIC 上出现两个地址。
如果我关闭接口,则ip address
显示虚假地址仍与 NIC 关联。如果我发出ip address flush eth0
,则虚假地址将被删除,并且在后续接口重新启动时不会再次出现 - 但它做系统重新启动后返回。
答案1
我终于找到了导致这种情况的原因。不是通过在某处找到指向它的隐藏指针,而是通过 grep 整个文件系统来查找 DHCP 设置:grep -ri 'dhcp' /
。几乎肯定有更好的方法。但无论如何:
之前尝试在这台机器上玩 ISCSI 网络启动时,不知怎么就创建了一个/run/network/dynamic-interfaces
文件,它似乎使用了与 相同的语法/etc/network/interfaces
。果然,其中有一行告诉机器将 eth0 作为 DHCP 启动,并且由于这是在 的上下文中发生的,因此它会在有机会initramfs
之前很久就将接口联机。iftools
此文件是 Ubuntu 服务器上标准软件包的一部分cloud-initramfs-dyn-netconf
。您不想卸载它,因为它是ubuntu-server
元软件包的一部分(如果您卸载它,将来的升级可能会失败)
清除文件并重新启动后,NICinterfaces
将按正常预期由文件控制。
答案2
我认为正确的表述是静止的;不是手动的。另外,您是否确定所选的地址 192.168.88.50 超出了路由器中用于 DHCP 的地址范围,从而避免了冲突?也许 x.50 已被使用或保留。
确定路由器中的 DHCP 池后,建议您将该文件修改为:
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.88.zz
netmask 255.255.255.0
gateway 192.168.88.1
dns-nameservers 192.168.88.1
dns-domain mynet.lan
...其中 zz 是 DHCP 池之外的地址。
重启界面:
sudo ifdown eth0 && sudo ifup -v eth0
详细参数 -v 会生成输出,告诉我们连接是否成功。
您收到所请求的地址了吗?
ifconfig