在Linux系统中,DHCP(动态主机配置协议)通常由DHCP服务器软件(如ISC DHCP Server、dnsmasq等)来处理。如果你想要自动化IP地址管理,你可以通过编写脚本来与DHCP服务器交互,或者直接配置DHCP服务器以自动分配IP地址。
以下是一个简单的例子,展示如何使用Bash脚本来自动生成DHCP租约文件,这个文件通常位于/var/lib/dhcp/dhcpd.leases。这个脚本会读取一个包含MAC地址和预定IP地址的文件,并为每个MAC地址生成一个DHCP租约条目。
首先,创建一个包含MAC地址和IP地址的文件,例如/etc/dhcp/dhcpd.leases.d/mac_ip_pairs.conf:
mac "00:11:22:33:44:55" {
fixed-address 192.168.1.10;
}
mac "66:77:88:99:AA:BB" {
fixed-address 192.168.1.11;
}
然后,创建一个Bash脚本来读取这个文件并生成租约条目:
#!/bin/bash
LEASES_FILE="/var/lib/dhcp/dhcpd.leases"
PAIRS_FILE="/etc/dhcp/dhcpd.leases.d/mac_ip_pairs.conf"
TEMP_FILE="/tmp/dhcpd.leases.tmp"
# 清空临时文件
> "$TEMP_FILE"
# 检查pairs文件是否存在
if [ ! -f "$PAIRS_FILE" ]; then
echo "Pairs file does not exist: $PAIRS_FILE"
exit 1
fi
# 读取pairs文件并生成租约条目
while IFS= read -r line; do
# 检查是否是mac地址行
if [[ $line =~ ^mac\ \"([0-9A-Fa-f:]+)\" ]]; then
MAC_ADDRESS="${BASH_REMATCH[1]}"
# 查找对应的IP地址
IP_ADDRESS=$(grep "^fixed-address" "$PAIRS_FILE" | grep "$MAC_ADDRESS" | awk '{print $3}')
if [ -n "$IP_ADDRESS" ]; then
# 生成租约条目
cat <<EOF >> "$TEMP_FILE"
lease $IP_ADDRESS {
hardware ethernet $MAC_ADDRESS;
fixed-address $IP_ADDRESS;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
EOF
fi
fi
done < "$PAIRS_FILE"
# 将临时文件内容追加到实际的租约文件
cat "$TEMP_FILE" >> "$LEASES_FILE"
# 重启DHCP服务以应用更改
systemctl restart isc-dhcp-server
# 删除临时文件
rm "$TEMP_FILE"
确保脚本有执行权限:
chmod +x /path/to/your/script.sh
然后运行脚本:
/path/to/your/script.sh
请注意,这个脚本是一个基本的例子,实际的DHCP配置可能需要更复杂的逻辑,包括处理子网、租约时间、选项等。此外,直接编辑dhcpd.leases文件并不是推荐的做法,因为DHCP服务器通常会在启动时自动生成这个文件。如果你使用的是其他DHCP服务器软件,如dnsmasq,那么配置方法会有所不同。
在生产环境中,建议使用DHCP服务器的内置功能来管理静态租约,而不是手动编辑租约文件。这样可以避免潜在的冲突和错误。