温馨提示×

怎样在Debian上自定义DHCP模板

小樊
60
2026-01-01 11:32:11
栏目: 智能运维

在 Debian 上自定义 DHCP 模板的可维护做法


一、准备与目录结构

  • 安装 ISC DHCP 服务器并准备可复用的配置片段目录:
    • 安装:sudo apt update && sudo apt install isc-dhcp-server
    • 建议结构:
      • 主配置:/etc/dhcp/dhcpd.conf(仅保留 include 与全局项)
      • 片段目录:/etc/dhcp/conf.d/(按功能拆分:subnets.conf、hosts.conf、options.conf、classes.conf)
  • /etc/dhcp/dhcpd.conf 中引入片段:
    • 示例:
      ddns-update-style none;
      default-lease-time 600;
      max-lease-time 7200;
      authoritative;
      log-facility local7;
      
      include "/etc/dhcp/conf.d/subnets.conf";
      include "/etc/dhcp/conf.d/hosts.conf";
      include "/etc/dhcp/conf.d/options.conf";
      include "/etc/dhcp/conf.d/classes.conf";
      
  • 指定监听接口(IPv4):编辑 /etc/default/isc-dhcp-server,如:INTERFACESv4="eth0"

二、模板化配置示例

  • 子网与网关(/etc/dhcp/conf.d/subnets.conf)
    subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;
        option routers 192.168.1.1;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.1.255;
        option domain-name-servers 8.8.8.8, 8.8.4.4;
    }
    
  • 固定地址绑定(/etc/dhcp/conf.d/hosts.conf)
    host workstation {
        hardware ethernet 00:1A:2B:3C:4D:5E;
        fixed-address 192.168.1.55;
    }
    
  • 自定义选项(/etc/dhcp/conf.d/options.conf)
    # 定义代码为 123 的自定义字符串选项
    option custom-option code 123 = string;
    option custom-option "This is a custom option";
    
    # 为特定主机覆盖
    host client1 {
        hardware ethernet 00:11:22:33:44:55;
        fixed-address 192.168.1.101;
        option custom-option "Client1 Custom Option";
    }
    
  • 类与条件池(/etc/dhcp/conf.d/classes.conf)
    class "printers" {
        match if substring (option vendor-class-identifier, 0, 9) = "HP-Printer";
    }
    pool {
        allow members of "printers";
        range 192.168.1.210 192.168.1.220;
        option routers 192.168.1.1;
    }
    
  • 说明:以上示例涵盖了子网、固定租约、自定义 DHCP 选项(通过 option code 定义)、以及按厂商类为打印机分配专属地址池等常见“模板化”需求。

三、生效与验证

  • 语法检查与服务管理:
    • 语法:sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
    • 重启与自启:
      sudo systemctl restart isc-dhcp-server
      sudo systemctl enable isc-dhcp-server
      sudo systemctl status isc-dhcp-server
      
  • 日志与租约查看:
    • 查看服务日志:sudo journalctl -u isc-dhcp-server -f
    • 传统日志关键字:grep dhcpd /var/log/syslog
    • 租约数据库:/var/lib/dhcp/dhcpd.leases
    • 租约列表工具:sudo dhcp-lease-list
  • 连通性测试(可选):
    • 安装测试工具:sudo apt install dhcping
    • 向服务器发送请求:sudo dhcping -c 4 192.168.1.1
  • 防火墙放行(如使用 ufw):sudo ufw allow 67/udp(服务器侧 UDP 67)。

四、自动化与批量生成

  • 批量导入设备到模板:将设备清单(CSV/DB)生成 /etc/dhcp/conf.d/hosts.conf 的 host 块,示例 Python 片段:
    #!/usr/bin/env python3
    import sys
    def block(mac, name, ip):
        return f'host {name} {{\n  hardware ethernet {mac};\n  fixed-address {ip};\n}}\n'
    devices = [
        ("00:1A:2B:3C:4D:5E", "dev-pc01", "192.168.1.55"),
        ("00:1A:2B:3C:4D:5F", "printer-01", "192.168.1.60"),
    ]
    with open("/etc/dhcp/conf.d/hosts.conf", "w") as f:
        f.write("# Auto-generated\n")
        for m, n, i in devices:
            f.write(block(m, n, i))
    # 生成后重启服务
    import os; os.system("systemctl restart isc-dhcp-server")
    
  • 适用场景:机房/实验室大规模设备、按部门或用途分文件维护、与 CMDB/资产系统对接自动下发。

五、常见问题与排查要点

  • 语法与包含路径:
    • 每条声明与代码块结尾需有分号“;”;include 路径需为绝对路径;变更后用 dhcpd -t 校验。
  • 监听接口与地址规划:
    • 确认 /etc/default/isc-dhcp-server 中的 INTERFACESv4 与实际提供 DHCP 的网卡一致;DHCP 服务器本机应使用静态 IP且与子网匹配。
  • 地址池与保留地址:
    • 网关、打印机等保留地址务必放在 range 之外,避免冲突。
  • 端口与多 DHCP 服务:
    • DHCP 使用 UDP 67/68;若同机运行 dnsmasq 等也会提供 DHCP,需停用或调整以避免端口冲突。
  • 日志优先:
    • 服务异常时优先查看 journalctl -u isc-dhcp-server/var/log/syslog 中的 dhcpd 日志条目。

0