实用脚本能批量DHCP吗?

wen 实用脚本 50

本文目录导读:

实用脚本能批量DHCP吗?

  1. Linux 环境 (ISC DHCP Server)
  2. Windows Server 环境 (PowerShell)
  3. 网络设备环境 (Cisco / Huawei / 各类路由器)
  4. 轻量级/家庭环境 (OpenWrt / LEDE / TPlink)
  5. 总结建议

可以的,批量配置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 原生不支持直接批量导入,可以通过 Ansibleios_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

总结建议

  1. 如果你用 Linux 服务器:用 Bash + 文本处理(sed/awk)最方便,直接改配置文件。
  2. 如果你用 Windows 服务器PowerShell 是首选,API 直接支持批量。
  3. 如果你需要管理大量型号混杂的设备:考虑 AnsiblePython + Netmiko/Paramiko
  4. 如果你在家庭路由器上OpenWrt 的 UCI 或路由器的 Web API/爬虫脚本。

重要提醒:

  • 备份: 任何批量操作前,务必备份原配置。
  • 测试: 先在测试环境或单个设备上跑通脚本。
  • 权限: 脚本通常需要 root 或管理员权限。

如果需要针对特定平台(如华为、思科、Windows DHCP Server)的详细脚本模板,可以告诉我更具体的环境和设备型号。

抱歉,评论功能暂时关闭!