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

精简版

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

背景

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

 ifconfig eth0 192.168.0.1 

实际上这也有效,但IP只会持续到先前获得的租约的DHCP租约时间结束。 将为eth0分配一个新IP,(简而言之)会破坏系统。 我觉得“没什么大不了的,肯定会有类似的东西:”

ifconfig eth0 dhcpdisabled

但我最终认识到,这并不容易。 编辑/etc/network/interfaces有点棘手,因为它是由remastersys生成的(实际上是casper的23networking脚本)。

我可以重写它并重新启动网络,但活动dhclient.leases会发生什么? 将DHClient仍然在后台运行(它应该不会,但一些post建议它将是我的测试显示它“随机”重新启动,如果dhclient被杀死),我是否必须删除或清空dhclient.leases文件,什么关于resolv.conf?

绝望

总结一下 – 在我看来,这并不是“直截了当”,有些不“感觉稳定”。 这个问题(156183)建议删除dhclient包,但是:这会解决问题吗? 这会破坏其他东西吗?

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

我将尝试给你一个简短的例子,说明你可以做什么,但这不是完整的例子,因为确切的设置,需求等可能会有很大不同。

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

  1. 你没有使用网络管理员
  2. 您没有使用resolvconf ,而是使用静态/etc/resolv.conf文件
  3. 如果拔下/拔下电缆,您的interfaces文件不包含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 

您可以使用“systemctl”(如果适用于您的发行版)。 它可用于我的openSUSE发行版,我用它来以下面的方式禁用服务。

 systemctl disable wickedd-dhcp4.service 

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

 systemctl disable wickedd-dhcp6.service 

解决此问题的最简单的标准方法很简单:只需告诉您的DHCP服务器应该为某些MAC地址提供哪些IP。 我曾经碰过的每个路由器都有这个function,如果你使用的是dhcp3-server ,那就简单了 。

pkill dhclient简单地停止dhcp-client怎么样?

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

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

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

因此,在下次重新启动时,DHCP不会启动。

就是这样,简单干净,简单而且安全。