有没有一种安全的方法可以从命令行禁用 DHCP?

有没有一种安全的方法可以从命令行禁用 DHCP?

简洁版本

我知道这个问题与其他问题非常相似,我确实在互联网上搜索了答案,但似乎没有一种方法有效,或者解决方案似乎“太复杂,无法成为最佳实践”(我会尝试解释)。我正在寻找一种安全的方法如何从命令行禁用 DHCP(在脚本中使用)。

背景

我正在尝试使用 Ubuntu Server 12.04 和 remastersys 创建“Live-Cd”(效果很好)。默认情况下,系统配置为在启动时使用 DHCP 获取 IP。没问题 - 重要的是,脚本(在启动后运行)能够(在某些特定情况下)使用ifconfig不是 /etc/network/interfaces):

ifconfig eth0 192.168.0.1

其实这也行得通,但 IP 只会持续到之前获得的租约的 DHCP 租约时间结束。新的 IP 将被分配给 eth0,这(简而言之)会破坏系统。我想“没什么大不了的,肯定会有类似的事情:”

ifconfig eth0 dhcp已禁用

但我最终意识到,它没那么容易工作。编辑/etc/network/interfaces有点棘手,因为它是由 remastersys (实际上是 casper 的 23networking 脚本) 生成的。

我可以重写它并重新启动网络,但活动的 dhclient.leases 会发生什么?DHClient 是否仍会在后台运行(它不应该,但有些帖子建议它会在后台运行,我的测试表明,如果 dhclient 被终止,它会“随机”重新启动),我是否必须删除或清空 dhclient.leases 文件,resolv.conf 怎么办?

绝望

总而言之 - 在我看来,它并不是那么“简单”,而且有点“感觉不稳定”。本问题 (156183)建议删除 dhclient 包,但是:这会解决问题吗?这会破坏其他东西吗?

真的没有这个命令吗?我希望我只是忽略了它。

答案1

我会尽量给你举一个简单的例子确实,但它不是完整的例子,因为确切的设置、需求等可能有很大差异。

首先,让我们做一些假设以使这个案例更简单:

  1. 您没有使用网络管理器
  2. 您没有使用resolvconf,而是使用静态 /etc/resolv.conf 文件
  3. allow-hotplug如果拔出/插入电缆,您的接口文件不包含要重新配置的行。

让我们设置辅助变量 DEV

## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0) 
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw  192.168.0.254

## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

现在,如果假设 1)为假,则执行(停止网络管理器):

stop network-manager

对于假设 2)要么删除resolvconf,要么删除/etc/resolv.conf(如果是符号链接)并将其替换为静态文件

[ -h /etc/resolv.conf ] && rm /etc/resolv.conf

对于假设 3):这应该注释掉热插拔行。我希望这足够了

perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces

答案2

如果您的发行版有“systemctl”,则可以使用它。它适用于我的 openSUSE 发行版,我使用它以下列方式禁用服务。

systemctl disable wickedd-dhcp4.service

其中 wickedd-dhcp4 是我系统上处理 DHCP 客户端配置的服务的名称。还有一个用于 IPv6 dhcp 配置的服务,您可能也想禁用它。

systemctl disable wickedd-dhcp6.service

答案3

解决这个问题最简单的标准方法很简单:只需告诉您的 DHCP 服务器应该将哪些 IP 分配给某些 MAC 地址。我接触过的每个路由器都有这个功能,如果你正在使用dhcp3-server,那么就这么简单

答案4

我使用以下命令在我的服务器上禁用 DHCP。

sudo update-rc.d -f dhcp3-server remove

它的作用是删除任何系统启动链接/etc/init.d/dhcp3-server

这样下次重启时 DHCP 就不会启动。

就是这样,简单、干净、轻松且安全。

相关内容