有没有一种从命令行禁用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包,但是:这会解决问题吗? 这会破坏其他东西吗?
这真的没有命令吗? 我希望我忽略了它。
我将尝试给你一个简短的例子,说明你可以做什么,但这不是完整的例子,因为确切的设置,需求等可能会有很大不同。
首先,让我们做一些假设,以使这个案例更简单:
- 你没有使用网络管理员
- 您没有使用
resolvconf
,而是使用静态/etc/resolv.conf文件 - 如果拔下/拔下电缆,您的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不会启动。
就是这样,简单干净,简单而且安全。