我想使用 Linux 命令行禁用运行 DHCP 服务,以便使用我自己的 DHCP 客户端或设置静态 IP 地址。
我知道正如本文所提到的邮政通过在 /etc/network/interfaces 中将接口类型设置为静态而不是 dhcp,可以禁用相关接口的 DHCP。
但我想编写一个使用命令行来执行此操作和反操作的 shell 脚本。
答案1
在将接口配置为使用 dhcp 时,通过操纵接口的 ip 地址,风险在于您的静态 ip 会定期被覆盖。
然后,您必须终止与您的接口相关的 dchclient(htop 和 kill)。但是,dhclient 似乎将其实例的 pid 存储在默认目录中:/var/run/dhclient.{interface}.pid
。然后您可以执行以下操作:
ifce=eth0
kill -9 $(cat /var/run/dhclient.${ifce}.pid
sudo ifconfig $ifce [IP] netmask [NETMASK]
并重新启用 dhcp:
ifce=eth0
dhclient -pf /var/run/dhclient.${ifce}.pid $ifce
编辑
看起来网络管理器监控着 dhclient 实例。然后您可以向管理器提供另一个配置。
删除 /etc/network/interfaces 中对接口的所有引用
将以下行添加到 /etc/network/interfaces 的末尾
source /etc/network/interfaces.d/*.conf
/etc/network/interfaces.d
如果不存在则创建目录并创建以下两个文件:- /etc/network/interfaces.d/{interface}.dhcp 包含接口的 dhcp 配置
- /etc/network/interfaces.d/{interface}.static 包含接口的静态配置
/etc/network/interfaces.d/{interface}.conf
然后,您可以通过复制文件并重新启动接口,从 dhcp 切换到静态,反之亦然。ifce=eth0 cp /etc/network/interfaces.d/${ifce}.static /etc/network/interfaces.d/${ifce}.conf ifdown $ifce ifup $ifce
或者
ifce=eth0 cp /etc/network/interfaces.d/${ifce}.dhcp /etc/network/interfaces.d/${ifce}.conf ifdown $ifce ifup $ifce
答案2
假设您已经针对所需接口停用了 NetworkManager,那么您可以使用命令“ip”。
手动分配(假设您的接口是 eth0):
ip link set eth0 up
ip addr add 192.168.0.2/255.255.0.0 broadcast 192.168.255.255 dev eth0
ip route add default via 192.168.0.1
动态分配:
ip link set eth0 up
dhclient eth0
ip addr
命令也接受replace
子change
命令,您可以使用它label SOMETHING
以人性化的形式命名您的设备。因此它应该有助于制作您需要的 shell 脚本。
进一步阅读:
- 人网
- ip命令解释:http://linux-ip.net/html/tools-ip-link.html
- iproute2 备忘单:http://baturin.org/docs/iproute2