有没有办法在 Rasperry Pi 上的 Raspbian Linux 中禁用 DHCP 客户端?

有没有办法在 Rasperry Pi 上的 Raspbian Linux 中禁用 DHCP 客户端?

我有一台 Linux 服务器(使用 Raspbian 作为操作系统的 Rasperry Pi),它应该只使用静态 IP。

但是我注意到它也从 DHCP 服务器获取了 IP(DHCP 分配的 IP 是192.168.111.2)。根据网络设置,服务器应该只使用静态 IP(192.168.111.100)。

内容/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.111.100
netmask 255.255.255.0
gateway 192.168.111.1
dns-nameservers ip1 ip2

尽管使用静态配置,我也可以使用 DHCP 提供的 IP 通过 SSH 连接到设备。此外,似乎ntpd使用了错误的 IP 以及正确的 IP。

Netstat 的输出:

udp        0      0 192.168.111.2:123       0.0.0.0:*                           2774/ntpd
udp        0      0 192.168.111.100:123     0.0.0.0:*                           2774/ntpd

根据未使用的ifconfigIP :192.168.111.2

eth0      Link encap:Ethernet  HWaddr b8:27:eb:be:18:1c
          inet addr:192.168.111.100  Bcast:192.168.111.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:138099 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:95954711 (91.5 MiB)  TX bytes:27076870 (25.8 MiB)

ps -ef | grep dhcp显示我有一个 DHCP 守护程序正在运行:

root      2000     1  0 Oct07 ?        00:00:06 /sbin/dhcpcd

如何禁用DHCP守护进程启动并确保我的服务器仅使用静态?

答案1

这种情况听起来确实很奇怪,因为如果设置了静态 IP,您的设置应该可以按照您描述的方式工作(并且希望它能够工作)/etc/network/interfaces。也就是说,Raspberry Pi 官方网站上的讨论重点关注用户“rpdom”在“2015 年 5 月 28 日星期四上午 6:21”的帖子中提出的这一问题:

这在最新的更新中发生。这是因为新的 dhcp 客户端忽略了接口文件的作用,并做了自己的事……我觉得这太疯狂了。我会看看如何重新配置​​ dhcp 客户端(不记得它是什么或如何配置,我仍然使用旧的,它对我有用),禁用它,或删除它(如果可能的话)。

更深入的讨论中,用户“KLL”建议以下其他帖子在他们于“2015 年 8 月 10 日星期一下午 12:59”做出的回应中。据“knute”称:

在此过程中,升级修改了我的 /etc/network/interfaces文件,将 dhcp 或 static 改为 'manual',结果我得到了两个 IP 地址,一个是静态 IP 地址,另一个是 dhcp 地址。我终于有时间试用它,发现它的 dhcpcd5工作方式与之前不同。要获取静态地址,请不要修改/etc/network/interfaces。如果您更改了 'manual',请将其恢复,然后 /etc/dhcpcd.conf按照文档中的示例进行修改。

因此,我们的想法是,dhcpcd5在某次升级中, 的行为发生了变化。解决此问题的建议是删除 中的任何更改,/etc/network/interfaces而是调整 中的设置/etc/dhcpcd.conf以获取静态 IP 地址;示例配置如下:

static <value>
             Configures a static <value>.  If you set ip_address then dhcpcd
             will not attempt to obtain a lease and just use the value for the
             address with an infinite lease time.

             Here is an example which configures a static address, routes and
             dns.
                   interface eth0
                   static ip_address=192.168.0.10/24
                   static routers=192.168.0.1
                   static domain_name_servers=192.168.0.1

有关内容的更多信息,dhcpcd.conf请参见在其官方手册页上

也就是说,另一个想法是保留您已有的设置/etc/network/interfaces,然后编辑/etc/dhcpcd.conf以添加行denyinterfaces eth0以告诉 DHCP 守护程序完全忽略eth0。 任何一种解决方案都应该有效,但根据您的整体网络需求/要求,一种解决方案可能是更可取的解决方案。

答案2

对我有用的是使用 /etc/network/interfaces (如原始问题中所示)并简单地删除 dhcp 客户端:

apt-get remove dhcpcd5 isc-dhcp-client isc-dhcp-common

答案3

禁用任何服务(例如 dhcpcd)的首选方法是使用系统管理功能。您需要重新启动才能使其生效 - 除非您也停止该服务。

对于 Jessie(使用systemd管理):

sudo systemctl disable dhcpcd.service

对于较老的 Wheezy(System-V管理层):

sudo update-rc.d dhcpcd disable

但是如果您确实禁用它,那么您需要确保您有一个静态 IP 配置,否则/etc/network/interfaces您的接口将无法获得 IP 地址。

答案4

以下是我需要为 Raspbian Jessie 2017-01-11 做的事情的总结:

编辑 /etc/network/interfaces 并添加静态地址节,删除对静态接口(本例中为 eth0)的其他引用。 auto 行很重要,否则接口将不会在启动时启动:

    auto eth0
    iface eth0 inet static
      address 192.168.44.17
      netmask 255.255.255.0
      gateway 192.168.44.27

接下来禁用 dhcpcd 并启用标准网络:

  • 禁用 dhcpcd:systemctl disable dhcpcd.service
  • 启用网络:systemctl enable networking
  • 重启

自 2017-01-11 版本起,Raspbian Jessie 似乎未使用 systemd 的网络

相关内容