1 前言
KEA 是由Internet Systems Consortium开发的开源DHCPv4 / DHCPv6服务器。 Kea是一款高性能,可扩展的DHCP服务器引擎,可以轻松修改和扩展钩子库。KEA具有以下特性[1]:
- 开源,使用MPL 2.0许可证
- 直接地址分配支持v4和v6,或DHCPv6 前缀授权
- 动态地址分配和主机地址保留
- 更新DNS记录作为续租或过期的动态DNS
- MAC地址追踪,包括 v4和v6
- 支持自定义扩展钩子库
2 安装KEA
KEA的安装可以通过apt的方式直接安装,但是如果需要数据库支持或者需要使用钩子扩展则需要自行编译,本文以自编译的方式介绍如何安装配置KEA。
1) 首先下载源码:
1 | root@ubuntu:~# wget https://ftp.isc.org/isc/kea/1.3.0/kea-1.3.0.tar.gz |
2) 安装必要的编译软件包
1 | root@ubuntu:~# apt install -y gcc build-essential make libmysql++-dev openssl libssl-dev libboost-system-dev liblog4cplus-dev liblog4cplus-1.1-9 libmysqlclient-dev |
3) 配置编译
指明需要使用mysql,若需要修改默认安装路径需要单独指定--prefix
和--exec-prefix
两个参数,前者是编译生成的二进制文件拷贝路径,后者是软件运行时依赖库的查找路径,可以通过./configure -h
查看。
1 | root@ubuntu:~# tar xf kea-1.3.0.tar.gz |
4) 编译
配置完编译依旧是编译二连make
和make install
1 | root@ubuntu:~# make -j8 |
编译完成后默认安装到/usr/local/kea
目录下,相应的配置文件放置在/usr/local/kea/etc/kea
路径下。
3 配置KEA
kea的配置文件是json格式,配置完kea可以先使用json在线解析查看配置是否正确,需要注意的是必须去除配置中的注释才能正确解析。详细的kea配置需要查看官网的介绍[2],同时配置文件kea-dhcp6.conf.sample
示例中也有详细的解释。
如下所示为配置文件参数的含义[3]:
1 | { |
配置完成后重启kea服务即可,重启哪些服务可以在/usr/local/kea/etc/kea/keactrl.conf
文件指定
1 | root@ubuntu:/usr/local/kea/etc/kea$ cat keactrl.conf |
重启DHCP服务
1 | root@ubuntu:~# keactrl start |
首次运行时可能出现kea库找不到的错误,执行ldconfig
命令即可。
若需要指定重启v6或v4则需要添加相应参数
1 | root@ubuntu:~# keactrl start -s dhcpv6 |
关于如何配置KEA的钩子模式可以查看:传送门
3.1 性能测试
使用kea自带的perfdhcp性能测试工具,可以进行dhcp客户端模拟的测试
- 查看每秒能处理多少个discover(v4)或者solicit(v6)消息 ;
- 查看每秒能处理处理4-way packet exchanges(v4 - DORA, v6 - SARR)(即一个完成的请求动态ip的过程),即LPS(Lease per Second,每秒分配租约数)。
1 | root@ubuntu:~# perfdhcp -l eth1 -6 -b mac=00:01:02:03:04:05 -R 999999 -r 100000 -p 30 |
使用上述命令请求v6地址,部分参数解释如下,官方文档可以查看perfdhcp man手册
参数 | 含义 |
---|---|
-l | 指定申请IP接口 |
-4/-6 | 指定申请的IP类型 |
-R | 模拟客户端数量,实际指的是请求DHCP的用户池,perfdhcp会从该池内挑选用户,默认为1 |
-r | 期望的DHCP请求速率,即 LPS速率 |
-p | 测试持续时间 |
-b | 模拟用户mac地址起始,也可以使用uuid替代 |
【Note】
1)理论分配的用户数量为期望速率X持续时间,超过这个数目的请求实际为租约的更新操作。
2)官方给出KEA测试结果:传送门
摘录如下所示
V4 Performance with and without insert trigger:
1 | Memfile with persistence set to false (as a baseline): |
V6 Performance with and without insert triggers:
1 | MEMFILE persistence = false: |
3)另有其他讨论称kea在memryfile 内存模式下能够达到8000-10000的性能,基本上数据库模式下LPS在1000左右,传送门。mysql模式下调优参见邮件讨论mysql 调优
4 其他
4.1 KEA 高可用
目前KEA 1.3版本尚不支持HA高可用模式,官方介绍将在1.4版本支持,当前状态下若想使用HA可以通过数据库后端HA的方式来实现,也可以通过keepalived来实现,见传送门,结合上一篇的keepalived可以很好的实现,原文中需要三台服务器,笔者在实验中使用了两台服务器也可以测试通过,由于keepalived不支持监听UDP端口,因此主要的实现方式是添加keepalived健康检查脚本定时检查kea进程。
4.2 KEA配合phpIPAM
当前phpIPAM并没有直接的插件配合KEA,因此需要自己实现,实现方式有两种:1)直接采用数据库同步的方式,将kea的数据导入phpIPAM中;2)采用phpIPAM的restful接口,同时phpIPAM也给出了API客户端[4]。遇到的困难是KEA的子网标记ID和phIPAM中子网号ID同步转换出错进而导致hosts同步错误,尤其是当KEA的子网号在重启会重新分配(未指定子网号时)或修改子网但未更新子网号时造成的租期数据混乱。
【参考链接】
1)KEA官网
2)KEA官方文档
3)KEA配置介绍