一、config-set 成功要素
1. 必须发送完整配置(不能只发变化的部分)
{
"command": "config-set",
"service": ["dhcp6"],
"arguments": {
"Dhcp6": {
"interfaces-config": {...},
"lease-database": {...},
"control-sockets": [...],
"valid-lifetime": 86400,
"preferred-lifetime": 43200,
"renew-timer": 43200,
"rebind-timer": 75600,
"subnet6": [...],
"option-data": [...],
"server-id": {...},
}
}
}
2. option-data 必须包含 code 字段
{"name": "dns-servers", "data": "9.9.9.9", "space": "dhcp6"}
{"name": "dns-servers", "code": 23, "data": "9.9.9.9", "space": "dhcp6"}
| IPv4 选项 | code | IPv6 选项 | code |
|---|
| routers | 3 | dns-servers | 23 |
| domain-name-servers | 6 | domain-search | 24 |
| broadcast-address | 28 | - | - |
3. space 必须与 service 匹配
| service | space |
|---|
| Dhcp4 | "dhcp4" |
| Dhcp6 | "dhcp6" |
4. 请求头必须正确
-H "Content-Type: application/json"
5. 配置必须完整且有效
- 如果
config-set 返回 result: 1 + 错误信息 → 检查具体错误
- 如果
config-set 返回 result: 0 → 成功
二、config-write 成功要素
1. 必须先执行 config-set 成功
config-write 写入的是内存中的配置,所以必须先用 config-set 把配置加载到内存。
2. 请求格式必须正确
curl -u kea-admin:kea-admin-password \
-H "Content-Type: application/json" \
-X POST http://192.168.100.4:8001/ \
-d '{"command":"config-write"}'
或者指定文件名:
curl -u kea-admin:kea-admin-password \
-H "Content-Type: application/json" \
-X POST http://192.168.100.4:8001/ \
-d '{"command":"config-write","arguments":{"filename":"/etc/kea/kea-dhcp6.conf"}}'
3. 文件路径必须正确且有写权限
ls -la /etc/kea/kea-dhcp6.conf
4. config-write 不需要 service 参数
{"command": "config-write", "service": ["dhcp6"]}
{"command": "config-write"}
5. 查看 config-write 是否成功
{ "arguments": { "filename": "/etc/kea/kea-dhcp6.conf", "size": 4459 }, "result": 0, "text": "Configuration written to /etc/kea/kea-dhcp6.conf successful" }
{ "result": 400, "text": "Bad Request" }
三、完整的成功流程
┌─────────────────────────────────────────────────────────────────────┐
│ 完整的成功流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 步骤 1: 拉取配置 │
│ ─────────────── │
│ config-get → 获取 Kea 当前配置 → 存入 ipam_kea_node_config │
│ │
│ 步骤 2: 提取静态配置 │
│ ─────────────── │
│ 移除 subnet4/subnet6/option-data → 存入 kea_static_attr │
│ │
│ 步骤 3: 组装完整配置 │
│ ─────────────── │
│ kea_static_attr + 数据库子网 + 数据库选项 = 完整配置 │
│ │
│ 步骤 4: config-set 到内存 │
│ ─────────────────── │
│ curl -d '{"command":"config-set", ...}' │
│ ✅ 必须包含完整配置 │
│ ✅ option-data 必须包含 code │
│ ✅ space 必须匹配 service │
│ │
│ 步骤 5: config-write 到文件 │
│ ─────────────────── │
│ curl -d '{"command":"config-write"}' │
│ ✅ 必须先 config-set 成功 │
│ ✅ 不需要 service 参数 │
│ ✅ 文件路径必须有写权限 │
│ │
└─────────────────────────────────────────────────────────────────────┘
四、常见失败原因
| 失败现象 | 可能原因 | 解决方案 |
|---|
config-set 返回 result: 1 | 配置不完整或格式错误 | 检查错误信息,补充缺失字段 |
config-set 返回 code 0 does not exist | option-data 缺少 code | 添加对应的 code 字段 |
config-write 返回 400 | 缺少 Content-Type 头或格式错误 | 添加 -H "Content-Type: application/json" |
config-write 返回 400 | 包含 service 参数 | 移除 service 参数 |
| 配置文件没有更新 | config-set 失败 | 先修复 config-set |
| 权限错误 | 文件权限不足 | sudo chown _kea:_kea /etc/kea/kea-dhcp6.conf |