在NetworkManager的dispatcher.d目录下增加一个脚本是一种常见的方法,用于在网络连接变化时自动执行某些操作。以下是一个示例,演示如何创建一个脚本来在DHCP失败时设置一个固定的IP地址。
创建脚本文件: 首先,你需要创建一个新的脚本文件。打开终端并输入以下命令来创建并编辑脚本:
sudo vim /etc/NetworkManager/dispatcher.d/99-set-fallback-ip 编写脚本: 在打开的编辑器中,输入以下脚本内容:
- #!/bin/sh
-
- # 获取事件类型和接口名称
- EVENT=$1
- INTERFACE=$2
-
- # 仅在DHCP失败时执行
- if [ "$EVENT" = "dhcp-failed" ]; then
- # 设置静态IP的逻辑
- IP_ADDRESS="192.168.1.100"
- NETMASK="255.255.255.0"
- GATEWAY="192.168.1.1"
- DNS_SERVERS="8.8.8.8 8.8.4.4"
-
- # 配置静态IP
- nmcli con mod $INTERFACE ipv4.addresses $IP_ADDRESS/$NETMASK
- nmcli con mod $INTERFACE ipv4.gateway $GATEWAY
- nmcli con mod $INTERFACE ipv4.dns "$DNS_SERVERS"
- nmcli con up $INTERFACE
- fi
请根据你的网络环境修改IP_ADDRESS、NETMASK、GATEWAY和DNS_SERVERS。
保存并关闭文件:
使脚本可执行: 运行以下命令来使脚本文件可执行:
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-set-fallback-ip 重启NetworkManager: 为了让更改生效,重启NetworkManager服务:
sudo systemctl restart NetworkManager 这个脚本将在DHCP失败时自动执行,为指定的网络接口设置一个固定的IP地址。请注意,nmcli命令是NetworkManager的命令行界面,用于管理网络连接。
确保在执行这些步骤之前备份任何现有的配置文件,以防需要恢复。此外,根据你的Linux发行版和NetworkManager的版本,步骤可能会有所不同。
你可以编写一个脚本或使用cron作业定期检查网络状态,并使用nmcli命令设置静态IP。例如:
- #!/bin/bash
-
- # 检查DHCP是否成功分配IP
- LEASEFILE="/var/lib/NetworkManager/dhclient-*-3-eth0.lease"
- if [ ! -f "$LEASEFILE" ]; then
- # 如果没有找到lease文件,则设置静态IP
- nmcli con mod "Connection Name" ipv4.addresses 192.168.1.100/24
- nmcli con mod "Connection Name" ipv4.gateway 192.168.1.1
- nmcli con mod "Connection Name" ipv4.dns "8.8.8.8 8.8.4.4"
- nmcli con up "Connection Name"
- fi
请将"Connection Name"替换为你的网络连接名称。
cron作业你可以将上述脚本设置为cron作业,以便定期运行。编辑crontab:
crontab -e
然后添加以下行来每天运行脚本:
0 * * * * /path/to/your/script.sh
这将在每小时的第0分钟运行脚本。
对于没有使用NetworkManager或systemd-networkd的系统,你可以直接编辑网络配置文件,如/etc/sysconfig/network-scripts/ifcfg-eth0(对于使用ifupdown的系统)或/etc/network/interfaces(对于Debian系列系统)。
选择哪种方法取决于你的具体需求、使用的Linux发行版以及你对系统的控制程度。在实施任何更改之前,请确保备份相关配置文件。