config-set 和 config-write成功目前已知的必备要点

6 阅读2分钟

一、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 字段

// ❌ 错误(缺少 code)
{"name": "dns-servers", "data": "9.9.9.9", "space": "dhcp6"}

// ✅ 正确
{"name": "dns-servers", "code": 23, "data": "9.9.9.9", "space": "dhcp6"}
IPv4 选项codeIPv6 选项code
routers3dns-servers23
domain-name-servers6domain-search24
broadcast-address28--

3. space 必须与 service 匹配

servicespace
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
# 应该显示 kea 用户有写权限

4. config-write 不需要 service 参数

// ❌ 错误
{"command": "config-write", "service": ["dhcp6"]}

// ✅ 正确
{"command": "config-write"}

5. 查看 config-write 是否成功

# 返回 result: 0 表示成功
{ "arguments": { "filename": "/etc/kea/kea-dhcp6.conf", "size": 4459 }, "result": 0, "text": "Configuration written to /etc/kea/kea-dhcp6.conf successful" }

# 返回 result: 400 表示失败
{ "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 existoption-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