我有一台 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
根据未使用的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)
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 的网络