1.安装epel-release。
2.安装kea。
yum install kea* -y
cd /etc/kea/

3.默认配置文档详解。
cp kea-dhcp4.conf kea-dhcp4.bak
vim kea-dhcp4.conf
{
"Dhcp4": {
// 添加需要监听的网络接口名称。
"interfaces-config": {
// 你可能只需添加接口名称(例如 "eth0"),或该接口上的特定 IPv4 地址(例如 "eth0/192.0.2.1")。
"interfaces": [ ]
// Kea DHCPv4 服务器默认使用原始套接字进行监听。这能确保接收所有数据包,包括那些尚未分配 IPv4 地址的直连客户端发送的数据包。
// 但如果你的流量始终通过中继转发,使用常规 UDP 套接字通常更为合适。若需启用此方式,取消以下行的注释:
// "dhcp-socket-type": "udp"
},
// Kea 支持控制通道功能,该功能可让服务器在运行期间接收管理命令。
// 它是一个 Unix 域套接字,用于接收 JSON 格式的命令,例如 config-set(设置新配置)、
// config-reload(通知 Kea 从文件重新加载配置)、statistic-get(获取统计信息)等诸多命令。
"control-socket": {
"socket-type": "unix",
"socket-name": "kea4-ctrl-socket"
},
// 使用 Memfile 租约数据库后端,将租约存储在 CSV 文件中。
// 根据 Kea 的编译配置,它可能还支持 SQL 数据库(MySQL 和 / 或 PostgreSQL)。
// 这些数据库后端需要更多参数,例如数据库名称、主机地址,可能还需要用户名和密码。
// 每个后端都有专用的配置示例。
"lease-database": {
// Memfile 是最简单易用的后端。它是一个内存中的 C++ 数据库,会将其状态存储在 CSV 文件中。
"type": "memfile",
"lfc-interval": 3600
},
// Kea 允许将主机预留信息存储在数据库中。如果你的网络规模较小,
// 或预留的主机数量不多,将这些信息保存在配置文件中可能更简便。
// 若网络规模较大,使用数据库存储通常更为合适。
// 如需启用该功能,取消以下内容的注释:
// "hosts-database": {
// "type": "mysql",
// "name": "kea",
// "user": "kea",
// "password": "1234",
// "host": "localhost",
// "port": 3306
// },
// 配置过期租约回收与租约亲和性功能。
// 过期租约每 10 秒回收一次,每 25 秒会删除已过期超过 3600 秒的回收租约。
// 单次租约回收周期的限制为 100 个租约或 250 毫秒,
// 若连续 5 个回收周期后数据库中仍存在过期租约,系统将记录警告日志。
// 若 “flush-reclaimed-timer-wait-time” 和 “hold-reclaimed-time” 均非 0,
// 当客户端发送释放消息时,租约将标记为过期,而非从租约存储中直接删除。
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"flush-reclaimed-timer-wait-time": 25,
"hold-reclaimed-time": 3600,
"max-reclaim-leases": 100,
"max-reclaim-time": 250,
"unwarned-reclaim-cycles": 5
},
// 此处指定的全局计时器适用于所有子网,除非特定子网中定义了子网专属值。
"renew-timer": 900,
"rebind-timer": 1800,
"valid-lifetime": 3600,
"option-data": [
// 指定选项时,通常需要明确(名称或代码)及数据二者之一。
// 完整的选项配置包含名称、代码、命名空间、CSV 格式和数据。
// 命名空间默认值为 “dhcp4”,通常无需修改,除非使用封装选项。
// CSV 格式默认值为 “true”,这一设置通常也适用,除非你希望将
// 整个选项值指定为长十六进制字符串。例如,配置域名服务器可按如下方式操作:
// {
// "name": "domain-name-servers",
// "code": 6,
// "csv-format": "true",
// "space": "dhcp4",
// "data": "192.0.2.1, 192.0.2.2"
// }
// 但这样写过于繁琐,因此更简便的写法如下:
{
"name": "domain-name-servers",
"data": "192.0.2.1, 192.0.2.2"
},
// 通常,用户更倾向于通过名称引用选项,这样就无需记忆对应的代码。
// 不过,也有部分用户偏好使用数值形式。例如,“domain-name”(域名)选项对应的代码为 15,
// 因此你既可以用 “name”: "domain-name" 引用它,也可以用 “code”: 15 引用。
{
"code": 15,
"data": "example.org"
},
// 域名搜索也是一个常用选项。它会告知客户端尝试解析指定域名内的名称。
{
"name": "domain-search",
"data": "mydomain.example.com, example.com"
},
// 数值中包含逗号的字符串选项,需对逗号进行转义(即每个逗号前添加两个反斜杠)。
// 这是因为逗号被预留用于分隔复合选项中的各个字段。同时,为符合 JSON 规范(该规范不允许使用 "," 格式),
// 因此需要采用这种稍不常见的双反斜杠表示法。
// JSON 支持的合法转义字符包括:反斜杠后接 "/bfnrt" 中的任意字符,
// 或反斜杠后接 "u" 再加四位十六进制数(目前 Kea 仅支持 \u0000 至 \u00ff 范围内的码点)。
// CSV 处理会将 '\' 转换为 '',将 ',' 转换为 ','
// 其他情况(例如 '\x')则保持原样转换为 '\x'。但由于这一处理基于 JSON 字符串值,
// 因此在 JSON 输入中,每个反斜杠字符都必须加倍书写。
{
"name": "boot-file-name",
"data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00"
},
// 接收整数值的选项可采用十进制或十六进制格式指定。// 十六进制格式既可以是纯数字形式(例如 abcd),
// 也可以添加 0x 前缀(例如 0xabcd)。
{
"name": "default-ip-ttl",
"data": "0xf0"
}
// 注意:Kea 会自行提供部分选项。具体包括:
// IP 地址租约类型(代码 51,基于有效租期参数)、
// 子网掩码(代码 1,基于子网定义)、
// 续订时间(代码 58,基于续订计时器参数)、
// 重新绑定时间(代码 59,基于重新绑定计时器参数)。
],
// 此处还可定义其他全局参数,包括选项定义
//(若你需使用厂商选项、自定义选项,或处理 Kea 目前尚未原生支持的选项,该功能会非常实用)。
// 你也可以定义客户端类。若已定义客户端类,传入的数据包可能会被分配至特定类中。
// 一个客户端类可代表具有某些共同特征的任意设备组,例如 Windows 设备、iPhone 设备、
// 需要特殊选项的故障打印机等。// 基于类信息,你可以允许或拒绝客户端使用特定子网,
// 为其添加特殊选项,或修改部分固定字段的值。
"client-classes": [
{
// 该参数指定此类的名称。// 若你需要引用此类,该名称会非常实用。
"name": "voip",
// 这是一个判定规则。该表达式会在每个传入数据包到达时执行计算,
// 计算结果需为布尔值(true 或 false)。若结果为 true,
// 则该数据包会被归入指定的类。此类表达式共有数十种。
"test": "substring (option [60].hex,0,6) == 'Aastra'",
// 若客户端属于此类,你可定义额外行为。例如,将 DHCPv4 数据包中的特定字段设置为指定值。
"next-server": "192.0.2.254",
"server-hostname": "hal9000",
"boot-file-name": "/dev/null"
// 若你希望此类中的设备接收特殊选项,也可在此处定义选项值。
}
],
// 此处还可配置钩子(hooks)功能。Kea 支持一种强大的机制,
// 允许加载外部库以提取信息,甚至能影响服务器处理数据包的方式。
// 这些外部库包括额外的取证日志功能、更灵活的主机预留方式,甚至可添加额外命令。
// "hooks-libraries": [
// {
// // 取证日志库会生成 Kea 所服务所有设备的取证类审计追踪记录,
//
// // 包含设备标识符(如 MAC 地址)、网络位置、活跃时间等信息。
//
// "library": "/usr/lib64/kea/hooks/libdhcp_legal_log.so",
// "parameters": {
// "base-name": "kea-forensic4"
// }
// },
// {
// // 灵活标识符(flex-id)。Kea 软件提供了一种处理主机预留的方式,
// // 支持预留地址、前缀、选项、客户端类及其他功能。
// // DHCPv4 中,预留可基于硬件地址、DUID、电路标识(circuit-id)或客户端标识(client-id);
// // DHCPv6 中,则基于硬件地址或 DUID。
// // 但在某些场景下,预留需求更为复杂,例如使用上述未提及的其他选项、
// // 特定选项的部分内容,甚至结合多个选项和字段来唯一标识客户端。
//
//
//
//
// "library": "/usr/lib64/kea/hooks/libdhcp_flex_id.so",
// "parameters": {
// "identifier-expression": "relay4[2].hex"
// }
// },
// {
// // 主机存储所需的 MySQL 主机后端钩子库。
// "library": "/usr/lib64/kea/hooks/libdhcp_mysql.so"
// }
// ],
// 以下是简单的 IPv4 子网声明示例。取消注释即可启用。
// 这是一个用 [] 标识的列表,包含多个用 {} 标识的结构体。
// 每个结构体描述一个子网,可包含多个参数。
// 其中一个参数是 "pools"(地址池),它同样是一个结构体列表。
"subnet4": [
{
// 该配置定义整个子网。Kea 会使用此信息确定客户端的接入位置。
// 这对应你网络中的完整子网。
// 子网标识符应对每个子网保持唯一。
"id": 1,
// 这是每个子网的必填参数。
"subnet": "192.0.2.0/24",
// 地址池(Pools)定义子网中由 Kea 管理的实际部分。
// 从技术角度来说,这是可选参数,但对于 DHCP 正常工作而言,
// 该参数几乎是必需的。若省略此参数,客户端将无法获取地址,
// 除非已为其配置了主机预留
"pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ],
// 这是子网选择器之一。
// 若 DHCPv4 服务器需接收本地客户端(与服务器处于同一子网)的请求,
// 请取消 “interface”(接口)参数的注释,并指定对应的接口名称。
// 服务器通过该指定接口接收的请求,将分配至当前子网。
// 此规则适用于 DORA 交互流程及重新绑定状态的客户端。
// 续订状态的客户端会以单播方式发送消息,服务器将通过其续订的地址确定客户端所属的子网。
// 使用该参数时,“relay”(中继)参数通常无需配置。
// "interface": "eth0",
// 这是另一个子网选择器。
// 请取消 “relay”(中继)参数的注释,并指定中继地址列表。
// 当服务器通过其中任一中继接收查询时,会选择该子网进行租约分配。
// 使用该参数时,“interface”(接口)参数通常无需配置。
// "relay": {
// "ip-addresses": [ "10.0.0.1" ]
// },
// 这些是子网专属选项。
// 在大多数情况下,你至少需要定义路由选项(routers option),
// 因为缺少该选项时,客户端将无法访问默认网关,也就无法连接互联网。
"option-data": [
{
// 对于每个 IPv4 子网,你很可能至少需要指定一个路由器。
"name": "routers",
"data": "192.0.2.1"
}
],
// Kea 提供主机预留机制。
// Kea 支持通过多种不同类型的标识符进行预留配置:
// 硬件地址(hw-address,即客户端的硬件 / MAC 地址)、
// DUID(客户端插入的唯一标识符)、
// 客户端标识(client-id,客户端插入的标识符)
// 以及电路标识(circuit-id,中继代理插入的标识符)。
// Kea 还支持灵活标识符(flex-id),允许你指定一个表达式,该表达式会对每个传入的数据包进行计算。
// 计算结果将用作标识客户端的依据。//// 注意:Kea 中的预留配置是子网专属的。
// 这与 ISC DHCP 的机制不同。// 迁移配置时请务必注意这一点。
"reservations": [
// 这是针对特定硬件 / MAC 地址的预留配置。 这是一种相当简单的预留方式:仅分配一个地址,无其他额外配置。
{
"hw-address": "1a:1b:1c:1d:1e:1f",
"ip-address": "192.0.2.201"
},
// 这是针对特定客户端标识(client-id)的预留配置。
// 该配置还表明,此客户端将获取一个预留主机名。
// 主机名可针对任意类型的标识符进行定义,并非仅局限于客户端标识(client-id)。
{
"client-id": "01:11:22:33:44:55:66",
"ip-address": "192.0.2.202",
"hostname": "special-snowflake"
},
// 第三个预留配置基于 DUID(设备唯一标识符)。
// 该配置为此特定客户端定义了专属的特殊选项值。
// 若 “域名服务器(domain-name-servers)” 选项已在全局、子网或类级别定义,
// 则客户端专属的选项值将优先生效。
{
"duid": "01:02:03:04:05",
"ip-address": "192.0.2.203",
"option-data": [ {
"name": "domain-name-servers",
"data": "10.1.1.202, 10.1.1.203"
} ]
},
// 第四个预留配置基于电路标识(circuit-id)。
// 这是由中继代理插入的一个选项,中继代理负责将客户端的数据包转发至服务器。
// 本示例中,还为此主机分配了厂商专属选项。
//使用预留功能时,建议配置以下参数:
// 全局预留开关(reservations-global)、子网内预留开关(reservations-in-subnet)、
// 地址池外预留开关(reservations-out-of-pool,子网级参数)
// 以及主机预留标识符类型(host-reservation-identifiers,全局参数)。
{
"client-id": "01:12:23:34:45:56:67",
"ip-address": "192.0.2.204",
"option-data": [
{
"name": "vivso-suboptions",
"data": "4491"
},
{
"name": "tftp-servers",
"space": "vendor-4491",
"data": "10.1.1.202, 10.1.1.203"
}
]
},
// 此预留配置适用于需要设置特定 DHCPv4 字段的客户端。
// 支持配置的三个字段分别是下一跳服务器(next-server)、
// 服务器主机名(server-hostname)和启动文件名(boot-file-name)。
{
"client-id": "01:0a:0b:0c:0d:0e:0f",
"ip-address": "192.0.2.205",
"next-server": "192.0.2.1",
"server-hostname": "hal9000",
"boot-file-name": "/dev/null"
},
// 此预留配置使用灵活标识符(flexible identifier)。
// 管理员无需依赖特定字段,而是可以定义一个表达式,
// 其语法与客户端分类所用表达式类似,例如 substring (relay [0].option [17],0,6)。
// 随后,服务器会根据该表达式对传入数据包的计算结果,匹配对应的预留配置。
// 表达式可指定为十六进制格式,或用单引号包裹的纯文本格式。
// 注意:灵活标识符功能需加载 flex_id 钩子库方可生效。
{
"flex-id": "'s0mEVaLue'",
"ip-address": "192.0.2.206"
}
// 你可以在此处添加更多预留配置。
]
// 你可以在此处添加更多预留配置。
}
],
// DHCPv4 服务器还支持众多其他参数。
// 此处未列出这些参数,是为了避免一次性提供过多信息给用户造成困扰。
// 日志配置从此处开始。Kea 采用不同的日志记录器记录各类操作。有关详细信息(如日志记录器名称)
"loggers": [
{
// 本节配置适用于 kea-dhcp4,它是 DHCPv4 组件的基础日志记录器。
// 该配置指定 DHCPv4 服务器将所有日志消息(级别为 INFO 及以上)写入文件。
"name": "kea-dhcp4",
"output-options": [
{
// 指定输出文件。支持以下几种特殊值:
// - stdout(输出至标准输出)
// - stderr(输出至标准错误输出)
// - syslog(记录至系统日志)
// - syslog:name(使用指定名称记录至系统日志)
// 其他任意值均视为文件名
"output": "kea-dhcp4.log"
// 适用于 systemd 的精简日志格式,避免冗余信息。
// "pattern": "%-5p %m\n",
// 该配置控制日志输出是否在每次写入后刷新至磁盘。
// "flush": false,
// 该配置指定日志文件轮换前的最大大小。
// "maxsize": 1048576,
// 该配置指定需保留的日志轮换文件最大数量。
// "maxver": 8
}
],
// 该配置指定需保留的日志消息级别。支持的值包括:FATAL(致命错误)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)。
"severity": "INFO",
// 若指定日志级别为 DEBUG(调试),则使用此数值配置。
// 0 表示日志详细程度最低,99 表示详细程度最高。
// 请注意,若启用最高详细程度,Kea 可能会生成海量日志。
"debuglevel": 0
}
]
}
}
334

被折叠的 条评论
为什么被折叠?



