Fix DHCP client unable to get IP and config not persisting

- Fixed verifyAssignment being too strict for new clients
- Fixed parseRequestedIP string conversion bug
- Fixed response sent to 0.0.0.0 instead of broadcast address
- Added SO_BROADCAST support for UDP socket
- Fixed session persistence after page refresh (localStorage)
- Added in-memory session store for auth middleware
- Added config reloader so DHCP server picks up web UI changes dynamically
This commit is contained in:
CNBUGS AI
2026-04-24 16:03:54 +08:00
commit 8ad4c3576d
39 changed files with 7756 additions and 0 deletions
+257
View File
@@ -0,0 +1,257 @@
# 使用场景示例
## 场景一:家庭网络管理
### 背景
你有一个家庭网络,想管理所有设备的 IP 分配,并为重要设备(NAS、打印机)分配固定 IP。
### 配置步骤
1. **配置 DHCP 地址池**
```json
{
"dhcp": {
"enabled": true,
"interface": "eth0",
"network": "192.168.1.0",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"dns_servers": ["192.168.1.1", "114.114.114.114"],
"lease_time": 86400,
"ip_pool_start": "192.168.1.100",
"ip_pool_end": "192.168.1.200"
}
}
```
2. **为 NAS 添加静态绑定**
- 登录 Web 界面
- 进入 DHCP → 静态 IP 绑定
- 点击"新增绑定"
- 输入:
- MAC 地址:`00:11:22:33:44:55`NAS 的 MAC
- IP 地址:`192.168.1.10`
- 主机名:`my-nas`
- 描述:`家庭 NAS 存储`
3. **为打印机添加静态绑定**
- MAC 地址:`AA:BB:CC:DD:EE:FF`
- IP 地址:`192.168.1.20`
- 主机名:`printer`
- 描述:`客厅打印机`
### 效果
- 手机、电脑等设备自动获取 `192.168.1.100-200` 范围内的 IP
- NAS 和打印机始终使用固定 IP,方便访问
- 在 Web 界面可以看到所有在线设备
---
## 场景二:小型办公室网络
### 背景
10 人办公室,需要内部 DNS 解析公司服务器,并管理员工设备。
### 配置步骤
1. **配置内部 DNS 记录**
登录 Web 界面 → DNS 管理 → 新增记录:
| 域名 | 类型 | 值 | TTL | 用途 |
|------|------|-----|-----|------|
| oa.company.local | A | 192.168.1.50 | 300 | OA 系统 |
| file.company.local | A | 192.168.1.51 | 300 | 文件服务器 |
| git.company.local | A | 192.168.1.52 | 300 | Git 服务器 |
| www.company.local | CNAME | file.company.local | 300 | 公司官网 |
2. **为员工电脑绑定 IP**
- 记录每个员工的 MAC 地址
- 分配固定 IP 方便管理
- 例如:`192.168.1.101` - 张三的电脑
3. **查看 DNS 查询日志**
- 监控内部域名解析情况
- 排查网络问题
### 效果
- 员工可以通过 `oa.company.local` 访问 OA 系统
- 不需要配置 hosts 文件
- 集中管理所有网络资源
---
## 场景三:开发测试环境
### 背景
开发人员需要模拟 DNS 环境,测试域名解析。
### 配置步骤
1. **修改 DNS 端口(避免冲突)**
```json
{
"dns": {
"enabled": true,
"listen_addr": "127.0.0.1",
"listen_port": 5353,
"upstream": ["8.8.8.8"]
}
}
```
2. **添加测试域名**
```bash
# 创建测试记录
curl -X POST http://localhost:8080/api/dns/records \
-H "X-Session-ID: xxx" \
-H "Content-Type: application/json" \
-d '{
"name": "api.test.local",
"type": "A",
"value": "127.0.0.1",
"ttl": 60
}'
```
3. **配置系统 DNS**
```bash
# Linux
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
# 或使用 dnsmasq 转发
```
4. **测试解析**
```bash
dig @127.0.0.1 -p 5353 api.test.local
```
### 效果
- 本地开发环境模拟生产 DNS
- 快速切换不同测试场景
- 查看完整的 DNS 查询日志
---
## 场景四:树莓派网络服务
### 背景
在树莓派上运行轻量级 DHCP+DNS 服务,作为家庭网络的核心。
### 硬件要求
- 树莓派 3B+ 或更高
- 8GB SD 卡
- 有线网络连接
### 安装步骤
1. **安装 Docker**
```bash
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi
```
2. **部署服务**
```bash
git clone <your-repo>
cd dhcp-dns-manager
docker-compose up -d
```
3. **设置开机自启**
```bash
docker-compose enable
```
4. **配置网络接口**
```json
{
"dhcp": {
"interface": "eth0"
}
}
```
### 效果
- 低功耗 24 小时运行
- 替代路由器 DHCP 功能
- 提供快速本地 DNS 解析
---
## 场景五:网络隔离测试
### 背景
测试不同网段的网络隔离策略。
### 配置多网段(需要多个实例)
**实例 1 - 网段 A**
```json
{
"dhcp": {
"network": "192.168.10.0",
"ip_pool_start": "192.168.10.100",
"ip_pool_end": "192.168.10.200"
},
"web": {
"port": 8081
}
}
```
**实例 2 - 网段 B**
```json
{
"dhcp": {
"network": "192.168.20.0",
"ip_pool_start": "192.168.20.100",
"ip_pool_end": "192.168.20.200"
},
"web": {
"port": 8082
}
}
```
### 效果
- 隔离测试环境和生产环境
- 模拟复杂网络拓扑
- 验证防火墙规则
---
## 最佳实践
### 1. IP 地址规划
```
192.168.1.1 - 网关
192.168.1.2-50 - 静态设备(服务器、打印机)
192.168.1.51-99 - 预留
192.168.1.100-200 - DHCP 动态分配
192.168.1.201-254 - 预留
```
### 2. DNS 命名规范
```
设备类型.位置.域名
- nas.home.local
- printer.office.local
- server.dc.local
```
### 3. 安全建议
- 修改默认密码
- 限制 Web 界面访问 IP
- 启用 HTTPS(反向代理)
- 定期备份数据库
### 4. 监控建议
- 监控 DHCP 地址池使用率
- 设置告警(地址池 > 80%)
- 定期查看 DNS 查询日志
---
选择适合你的场景开始使用吧!🚀