使用 Linux 命令行启用/禁用正在运行的 DHCP 服务

使用 Linux 命令行启用/禁用正在运行的 DHCP 服务

我想使用 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 实例。然后您可以向管理器提供另一个配置。

  1. 删除 /etc/network/interfaces 中对接口的所有引用

  2. 将以下行添加到 /etc/network/interfaces 的末尾

    source /etc/network/interfaces.d/*.conf

  3. /etc/network/interfaces.d如果不存在则创建目录并创建以下两个文件:

    • /etc/network/interfaces.d/{interface}.dhcp 包含接口的 dhcp 配置
    • /etc/network/interfaces.d/{interface}.static 包含接口的静态配置
  4. /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命令也接受replacechange命令,您可以使用它label SOMETHING以人性化的形式命名您的设备。因此它应该有助于制作您需要的 shell 脚本。

进一步阅读:

相关内容