这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » DHCP相关脚本场景及实现方案

共1条 1/1 1 跳转至

DHCP相关脚本场景及实现方案

工程师
2025-08-04 07:42:46     打赏

以下是几种常见的 ,涵盖 Linux 系统下的 `isc-dhcp-server` 配置、

自动化部署和实用工具整合:


 一、基础概念说明

DHCP (Dynamic Host Configuration Protocol)  

自动为局域网内的设备分配 IP 地址、子网掩码、网关、DNS 等信息,避免手动配置。


核心文件路径 (Ubuntu/Debian)  

 主配置文件: `/etc/dhcp/dhcpd.conf`  

 租约数据库: `/var/lib/dhcp/dhcpd.leases`  

 日志文件: `/var/log/syslog` (含 `dhcpd` 关键词)


二、典型应用场景 + 脚本示例

 场景:快速搭建简单 DHCP 服务 (单子网)

```bash

sudo nano /etc/dhcp/dhcpd.conf

```

写入以下内容后重启服务:

```conf

# 基础配置模板

ddns-update-style none;          # 禁用动态DNS更新

default-lease-time 600;          # 默认租期600秒 (10分钟)

max-lease-time 7200;             # 最大租期7200秒 (2小时)

authoritative;                    # 拒绝非授权请求

log-facility local7;              # 日志级别

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 domain-name-servers 8.8.8.8, 8.8.4.4; # DNS服务器

}

```

启动服务:

```bash

sudo systemctl restart isc-dhcp-server

sudo systemctl enable isc-dhcp-server # 开机自启

```

验证效果: 新设备连接网络后应获得 `192.168.1.100~200` 区间内的 IP


场景:固定MAC地址绑定特定IP(防止抢占)

编辑 `/etc/dhcp/dhcpd.conf` 追加:

```conf

# 静态绑定示例 (替换XX:XX:XX为真实MAC)

host workstation,

    hardware ethernet 00:1A:2B:3C:4D:5E;

    fixed-address 192.168.1.55;

```

获取设备MAC方法:

```bash

ip link show # 查看本机MAC

arp -a | grep <设备IP> # 通过ARP表查找在线设备MAC

```


场景:多子网混合部署(路由隔离)

```conf

shared-network MyNetwork {

    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;

    }

    subnet 192.168.2.0 netmask 255.255.255.0 {

        range 192.168.2.100 192.168.2.200;

        option routers 192.168.2.1;

    }

}

```

注意: 两个子网需物理隔离或三层交换机支持互通


场景:自动化批量导入设备信息(Python脚本)

创建 `/opt/dhcp/import_devices.py`:

```python

#!/usr/bin/env python3

import os

import sys


def generate_host_block(mac, name, ip):

    return f"""host {name},\n\thardware ethernet {mac};\n\tfixed-address {ip};\n"""


if __name__ == "__main__":

    with open("/etc/dhcp/hosts.conf", "w") as f:

        # 示例数据 - 实际可从CSV/DB读取

        devices = [

            ("00:1A:2B:3C:4D:5E", "dev-pc01", "192.168.1.55"),

            ("00:1A:2B:3C:4D:5F", "dev-printer", "192.168.1.60")

        ]

        f.write("# Auto-generated by import_devices.py\n")

        for mac, name, ip in devices:

            f.write(generate_host_block(mac, name, ip))

    os.system("service isc-dhcp-server restart")

```

赋予执行权限并运行:

```bash

sudo chmod +x /opt/dhcp/import_devices.py

sudo /opt/dhcp/import_devices.py

```

优势: 适合机房/实验室大规模设备管理


场景:应急临时DHCP服务(单接口直连)

```bash

#!/bin/bash

# emergency-dhcp.sh

INTERFACE=eth0          # 根据实际修改

RANGE_START=192.168.99.100

GATEWAY=192.168.99.1

NETMASK=255.255.255.0

DNS=8.8.8.8


echo "Configuring emergency DHCP on $INTERFACE..."

echo "APIPA network configured: $RANGE_START/24"

echo "Gateway: $GATEWAY | DNS: $DNS"


# 使用 dnsmasq 快速搭建临时DHCP (轻量级替代方案)

sudo dnsmasq --interface=$INTERFACE \

    --dhcp-range=$RANGE_START,192.168.99.200 \

    --dhcp-option=router,$GATEWAY \

    --dhcp-option=dns-server,$DNS \

    --except-interface=lo --bind-interfaces

```

特点: 无需修改主DHCP配置,适合现场维护应急网络


 三、高级技巧 & 注意事项

| 功能                         | 实现方式                                       | 风险提示                     |

|---------------------|----------------------------------|------------------------------|

|   保留地址段             | `reserved-addresses` 声明        | 避免与现有设备冲突           |

|   自定义选项             | `option code value`              | 参考 RFC 2132 定义代码范围    |

|   VLAN支持              | Trunk端口+`subclass`声明          | 需交换机配合配置PVID         |

|   日志分析                | `grep 'DHCPACK' /var/log/syslog` | 监控成功分配事件的异常模式   |

|   安全防护                | `deny unknown-clients;`          | 阻止未认证设备获取租约       |

|   跨网段广播响应     | `bootp-broadcast`                | 仅适用于无中继代理的环境      |


 四、故障排查命令集锦

```bash

# 检查服务状态

systemctl status isc-dhcp-server

journalctl -u isc-dhcp-server --since "5 minutes ago"


# 验证配置文件语法

dhcpd -t -cf /etc/dhcp/dhcpd.conf


# 查看当前活跃租约

cat /var/lib/dhcp/dhcpd.leases | tail -n +5


# 抓包分析DHCP交互过程 (需安装tcpdump)

sudo tcpdump -i eth0 port bootps && sleep 30 # 观察REQUEST/OFFER/ACK流程

```


 五、最佳实践建议

1. 备份原始配置: `sudo cp /etc/dhcp/dhcpd.conf{,}.bak`

2. 小步迭代: 每次修改后重启服务前先用`dhcpd -t`校验语法

3. 保留足够地址池: 根据网络规模合理设置`range`大小

4. 定期清理旧租约: `rm /var/lib/dhcp/dhcpd.leases` (谨慎操作!)

5. 防火墙放行UDP 67/68端口: `sudo ufw allow 67:68/udp`


六、替代方案对比表

| 工具                        | 适用场景                       | 优点                            | 缺点                             |

|--------------------|------------------------|-----------------------|-----------------------|

| `isc-dhcp-server`  | 企业级生产环境         | 功能完善,标准兼容    | 配置复杂,资源占用高   |

| `dnsmasq`             | 小型网络/家用           | 轻量化,集成DNS/TFTP  | 高级功能有限            |

| `microdhcp`          | 嵌入式设备                | 超轻量(<50KB)                 | 仅支持基础功能         |

| Windows Server     | AD域环境                | 图形化管理                        | Linux环境不可用       |


根据实际需求选择合适的方案,中小型网络推荐优先尝试 `dnsmasq`,复杂环境使用 `isc-dhcp-server`。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]