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

Mad*_*rin 17 networking linux dhcp ip-address

我有一个Linux服务器应该只使用静态IP(Rasperry丕使用Raspbian作为OS)。

但是我注意到它也从 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
Run Code Online (Sandbox Code Playgroud)

尽管使用静态配置,我也可以使用 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
Run Code Online (Sandbox Code Playgroud)

根据未使用ifconfig的IP 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)
Run Code Online (Sandbox Code Playgroud)

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

root      2000     1  0 Oct07 ?        00:00:06 /sbin/dhcpcd
Run Code Online (Sandbox Code Playgroud)

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

Gia*_*968 14

这种情况听起来很奇怪,因为如果在/etc/network/interfaces. 也就是说,在官方 Raspberry Pi 站点上的讨论集中在用户“rpdom”在日期为“2015 年 5 月 28 日星期四上午 6:21”的帖子中说明的问题:

这发生在最新的更新中。这是由于新的 dhcp 客户端忽略了接口文件的作用并另外做自己的事情......对我来说似乎很疯狂。我会看看如何重新配置​​ dhcp 客户端(无法记住它是哪个或如何做,我仍然使用对我有用的旧客户端),禁用它或删除它(如果可能)。

更深入的线程用户“KLL”在他们的回复中建议以下其他帖子,日期为“2015 年 8 月 10 日星期一下午 12:59”。根据“knute”:

在升级过程中的某个地方,/etc/network/interfaces使用“手动”字样而不是 dhcp 或静态来修改我的 文件,最终我得到了两个 IP 地址,我的静态地址和一个 dhcp 地址。我终于有时间玩它,并发现它的 dhcpcd5工作方式与以前不同。要仅获取您的静态地址,请不要修改/etc/network/interfaces. 如果您更改了“手册”一词,请将其放回原处,而是/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
Run Code Online (Sandbox Code Playgroud)

关于 内容的更多信息dhcpcd.conf可以在官方手册页上找到。

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

  • 但是,* 确实* 对我有用的解决方法是告诉 dhcpcd5 不要查看 eth0。这是通过在 /etc/dhcpcd.conf 中添加“denyinterfaces eth0”来完成的。 (3认同)
  • 我的情况与这里描述的情况几乎相同。唯一的区别是我的 `/etc/network/interfaces` 从未像在 Raspberry Pi 论坛案例中那样更改为 `manual`。建议的解决方案也适用于我。 (2认同)
  • 跟进:在某些情况下,我发现我同时安装了 dhcpcd5 和 isc-dhcp-client,都分配了地址。此外,还有一个由 systemd 启动的 dhcpcd.service,它在所有接口上运行(使用选项 -q -b)以及由网络/接口中的“dhcp”选项启动的 dhcpcd5 进程。唉……一旦你知道了这一切,就很容易解决了,我希望。 (2认同)

小智 9

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

apt-get remove dhcpcd5 isc-dhcp-client isc-dhcp-common
Run Code Online (Sandbox Code Playgroud)