本文目录导读:

- Linux 环境 (ISC DHCP Server)
- Windows Server 环境 (PowerShell)
- 网络设备环境 (Cisco / Huawei / 各类路由器)
- 轻量级/家庭环境 (OpenWrt / LEDE / TPlink)
- 总结建议
可以的,批量配置DHCP(动态主机配置协议)是网络运维中的常见需求,有一些非常实用的脚本方法可以实现。
具体采用哪种脚本,取决于你的DHCP服务器软件(如 Linux 上的 dhcpd/isc-dhcp-server、Windows Server 的 DHCP 角色、路由器固件如 OpenWrt 等)以及你的应用场景(批量创建新子网、批量添加保留地址、批量修改选项)。
以下介绍几种主流环境下的实用批量脚本方法:
Linux 环境 (ISC DHCP Server)
这是最经典、最灵活的服务器,通常通过修改 /etc/dhcp/dhcpd.conf 文件实现。
场景:批量创建多个静态绑定(MAC-IP 绑定)
假设你有一个 CSV 文件 hosts.csv如下:
00:11:22:33:44:AA,192.168.1.100,web-server-1
00:11:22:33:44:BB,192.168.1.101,db-server-1
00:11:22:33:44:CC,192.168.1.102,app-server-1
实用 Bash 脚本:
#!/bin/bash
INPUT_FILE="hosts.csv"
CONF_FILE="/etc/dhcp/dhcpd.conf" # 注意修改路径
# 备份原文件(非常关键)
cp $CONF_FILE ${CONF_FILE}.bak
# 追加新的 host 定义到配置文件末尾
# 假设你的 subnet 定义已经存在了,我们只添加 static hosts
while IFS=',' read -r MAC IP HOSTNAME; do
echo "" >> $CONF_FILE
echo "host $HOSTNAME {" >> $CONF_FILE
echo " hardware ethernet $MAC;" >> $CONF_FILE
echo " fixed-address $IP;" >> $CONF_FILE
echo " option host-name \"$HOSTNAME\";" >> $CONF_FILE
echo "}" >> $CONF_FILE
done < "$INPUT_FILE"
# 重启服务
systemctl restart isc-dhcp-server
echo "DHCP Server 已重启,共添加 $(wc -l < $INPUT_FILE) 个绑定。"
核心思路: 用文件读写 + 循环生成配置段,systemctl restart。
Windows Server 环境 (PowerShell)
Windows Server 自带的 DHCP 模块非常强大,支持批量管理。
场景:将 CSV 文件中的保留地址批量导入
假设 CSV 文件 reservations.csv:
Name,IPAddress,MACAddress,Description
PC-Office1,192.168.1.110,00-11-22-33-44-AA,Finance Dept
PC-Office2,192.168.1.111,00-11-22-33-44-BB,HR Dept
实用 PowerShell 脚本:
# 注意:需要以管理员身份运行,且安装了 DHCP 管理工具
Import-Module DhcpServer
$ScopeId = "192.168.1.0" # 你的作用域 IP
$CsvPath = "C:\path\to\reservations.csv"
$Reservations = Import-Csv -Path $CsvPath
foreach ($Item in $Reservations) {
try {
Add-DhcpServerv4Reservation `
-ScopeId $ScopeId `
-IPAddress $Item.IPAddress `
-ClientId $Item.MACAddress `
-Name $Item.Name `
-Description $Item.Description `
-ErrorAction Stop
Write-Host "已添加: $($Item.Name)" -ForegroundColor Green
} catch {
Write-Warning "添加 $($Item.Name) 失败: $($_.Exception.Message)"
}
}
核心优势: Windows 的 Add-DhcpServerv4Reservation 等 cmdlet 本身就支持批量操作,配合 Import-Csv 非常方便,对于批量修改作用域选项(如 DNS 地址),可以用 Set-DhcpServerv4OptionValue。
网络设备环境 (Cisco / Huawei / 各类路由器)
如果你在管理路由/交换设备(DHCP 配置在设备上),可以使用 Ansible 或简单的 Expect/Tcl 脚本。
场景:在 Cisco IOS 上批量添加 DHCP 池
Cisco 原生不支持直接批量导入,可以通过 Ansible 的 ios_config 模块或 Python + Netmiko 实现。
实用 Python 脚本 (使用 Netmiko):
from netmiko import ConnectHandler
device = {
'device_type': 'cisco_ios',
'host': '192.168.1.1',
'username': 'admin',
'password': 'cisco123',
}
# 要批量创建的 DHCP 池列表
dhcp_pools = [
{"name": "POOL_VLAN10", "network": "10.10.10.0", "mask": "255.255.255.0", "gateway": "10.10.10.1"},
{"name": "POOL_VLAN20", "network": "10.10.20.0", "mask": "255.255.255.0", "gateway": "10.10.20.1"},
{"name": "POOL_VLAN30", "network": "10.10.30.0", "mask": "255.255.255.0", "gateway": "10.10.30.1"},
]
commands = []
for pool in dhcp_pools:
commands.append(f"ip dhcp pool {pool['name']}")
commands.append(f"network {pool['network']} {pool['mask']}")
commands.append(f"default-router {pool['gateway']}")
commands.append(f"dns-server 8.8.8.8 8.8.4.4")
# 添加其他选项...
# 连接并发送命令
connection = ConnectHandler(**device)
connection.enable()
output = connection.send_config_set(commands)
print(output)
connection.save()
connection.disconnect()
轻量级/家庭环境 (OpenWrt / LEDE / TPlink)
OpenWrt 使用 UCI(Unified Configuration Interface)系统,可以一行命令搞定。
实用 Shell 脚本 (在 OpenWrt 的 SSH 中执行):
#!/bin/sh
# 批量添加 DHCP 静态租约到 OpenWrt
# 清空原有静态租约(需谨慎)
uci delete dhcp.@host[-1] 2>/dev/null
# 循环添加
for i in 1 2 3 4 5; do
uci add dhcp host
uci set dhcp.@host[-1].name="pc_$i"
uci set dhcp.@host[-1].ip="192.168.1.$((100 + i))"
uci set dhcp.@host[-1].mac="00:AA:BB:CC:DD:0${i}"
uci set dhcp.@host[-1].leasetime="12h"
done
# 提交并重启
uci commit dhcp
/etc/init.d/dnsmasq restart
总结建议
- 如果你用 Linux 服务器:用 Bash + 文本处理(sed/awk)最方便,直接改配置文件。
- 如果你用 Windows 服务器:PowerShell 是首选,API 直接支持批量。
- 如果你需要管理大量型号混杂的设备:考虑 Ansible 或 Python + Netmiko/Paramiko。
- 如果你在家庭路由器上:OpenWrt 的 UCI 或路由器的 Web API/爬虫脚本。
重要提醒:
- 备份: 任何批量操作前,务必备份原配置。
- 测试: 先在测试环境或单个设备上跑通脚本。
- 权限: 脚本通常需要 root 或管理员权限。
如果需要针对特定平台(如华为、思科、Windows DHCP Server)的详细脚本模板,可以告诉我更具体的环境和设备型号。