我如何确保我的静态 IP 地址是从 /etc/network/interfaces 而不是 dhcp 读取的?

我如何确保我的静态 IP 地址是从 /etc/network/interfaces 而不是 dhcp 读取的?

这是对以下问题。我尝试通过/etc/network/interfaces以下方式设置静态 IP:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 192.168.2.133
  netmask 255.255.255.0
  gateway 192.168.2.1
  dns-nameservers 8.8.8.8

然后运行​​。但是,如果不在运行之前编辑并注释掉以下内容,/sbin/ifdown eth0; /sbin/ifup eth0IP 地址的更改似乎不会生效:/etc/dhcp/dhclient.confifdown; ifup

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers,
        dhcp6.fqdn, dhcp6.sntp-servers;

奇怪的是,注释掉这一行之后,运行ifdown; ifup正常,但是当我取消注释它时,行为并没有恢复到以前忽略我的设置的更改的行为/etc/network/interfaces(这似乎不是一个问题,但我真的需要能够重复这个问题,这样我才能确信我的解决方案是健全的)另外,我宁愿不必编辑/etc/dhcp/dhclient.conf来更改我的静态 IP,因为似乎我应该能够通过只编辑来做到这一点interfaces

有人能解释一下我上面看到的问题,并建议使静态 IP 地址更改生效的最佳方法,这种方法具有可重复性,以便我可以确保我的方法有效吗?

答案1

您需要确保它dhclient不再运行,并在eth0它重新启动时发出 IP。

检查dhclient

ps aux | grep dhclient

如果正在运行,则终止它,然后执行ifdown; ifup

答案2

如果您的系统有一个/etc/network/interfaces文件,那么它是基于 Debian 的,并且可能有网络管理器,它 a) 通常会忽略该interfaces文件并且 b)dhclient无需询问即可运行,即使设备正在按照您希望的方式运行和工作。

新版本的 NetworkManager 应该会忽略具有手动或静态配置的设备。祝你好运。

网络管理器非常适合笔记本电脑或任何带有 wifi 卡的 PC。在我看来,在带有基于 LAN 的以太网的台式电脑上,它造成的问题比它解决的问题还多。

我见过三种解决方案,选择最适合的一个:

  1. $ sudo su -c 'echo manual > /etc/init/network-manager.override'
  2. 将该行添加NM_CONTROLLED=no到设备节(这看起来更符合 RHEL 风格)
  3. $ sudo apt-get remove --purge network-manager

相关内容