别问,问就是在摆烂
写在前面
因为isc-dhcp
项目目前已不再更新,转向开发kea DHCP
了,从官方的介绍中我们可以了解到kea DHCP
有以下优点:
灵活性:Kea DHCP 提供了广泛的配置选项和灵活的扩展机制,可以根据不同的网络需求进行高度定制。它支持动态更新配置、灵活的租约管理、多种地址分配策略以及丰富的选项定义。
性能和可扩展性:Kea DHCP 通过优化的设计和实现,具有出色的性能和可扩展性。它采用了多线程和异步处理,以处理大规模网络环境下的高并发请求,并能有效地管理大量的租约信息。
强大的管理和监控功能:Kea DHCP 提供了丰富的管理和监控功能,可通过命令行工具或REST API进行配置、状态查询和统计数据收集。管理员可以轻松地监视服务器状态、租约信息、日志记录,并进行动态配置和管理。
安全性:Kea DHCP 提供了安全的通信和认证机制,以保护服务器和客户端之间的通信安全。它支持TLS加密和身份验证,可以防止未经授权的访问和数据泄露。
兼容性:Kea DHCP 兼容标准的DHCPv4和DHCPv6协议,并支持常见的客户端操作系统和网络设备。它还支持动态DNS(DDNS)更新、网站指导模式(Captive Portal)、PXE引导、客户端分类和挂钩脚本等功能。
注意,这是官方说法,我也信了,但最后为什么选择不迁移了呢?且听我娓娓道来
环境介绍
这次测试使用的环境是在KVM虚拟化的环境中进行的,使用172.18.146.0/24
作为测试网段
DHCP服务器将架设在一台运行UbuntuServer 22.04.2 LTS
的虚拟机上,仅启用DHCPv4(v6用不上),此外是直接用root用户操作的(我懒得打sudo)
设备 |
IP |
操作系统 |
DHCP Server |
172.18.146.53 |
UbuntuServer 22.04.2 LTS |
User |
DHCPv4 |
Windows 10 Pro |
安装软件
安装kea
可以直接使用apt
进行安装,也可以编译安装,这里我们两者都会介绍到。
软件源安装
这种方法非常简单,一条命令即可完成安装
上述命令将会自动安装kea在软件源中的所有软件(但不是所有其项目的所有软件,后面会说)
以下是源中所有可选安装的组件
在本次实验中,使用下面的命令安装部分必要的组件即可
安装好后配置文件均位于/etc/kea
文件夹中
为什么不推荐源安装
源中的软件包缺失了很多kea
所推荐或是新增的功能,例如源安装的kea
并不能正常的与数据库进行交互(似乎是源预编译没有使用相关选项进行编译),同时缺失了hooks的支持,在版本上,也比官方的落后一些(目前ubuntu源的kea组件是2.0.2版本的)
源码安装
源码安装的好处是可以用上kea的所有功能,缺点是需要忍受很长的编译时间。
本次实验环境所编译的包为构建用于和mysql(也可以是mariadb)交互的。
安装编译所需包
首先根据官方文档所要求的安装编译所需的软件
由于需要在编译时加上--with-mysql
的选项,所以需要额外安装以下的包
拉取源码
直接从官方仓库拉取即可
编译并安装软件
进入项目文件夹
生成配置文件
生成构建环境
由于我们需要使用mysql数据库,所以此处需要加上–with-mysql`的选项
编译软件
通常情况下会花费很多时间,可以先出门吃个饭
安装
更新链接缓存
依照上述方法编译后配置文件夹默认位置为软件安装位置下的etc/kea
子文件夹中
正式使用及配置文件解析
完成上一节操作后就可以正式开始使用kea了,但是!这里就要说一说kea不好的地方了,kea的配置文件,是json的格式,这意味着,会有一大堆的括号,极不利于阅读
简易使用教学
kea可以通过keactrl
来启用各项服务(其实systemctl也可以用,如果是从源码编译的systemctl命令不能开箱即用),例如可以使用以下命令查看服务状态
可以看到各项服务都启动了
在不添加选项的情况下,keactrl start
将会根据配置文件夹下的keactrl.conf
配置文件的内容来启动相关服务,例如我们不想启动DHCPv6的服务的话就可以将配置文件中的
改成
配置文件解析
此处我们以DHCPv4来说(别的我也不想用),下面是一个配置文件的节选(不用仔细看,我会将其拆分的更仔细,仅注意我所添加的分割线即可)
监听网卡配置
配置文件中的interfaces-config
配置用于告诉软件应该监听什么端口,例如我们的网口为eth0
,就应该将此项配置的"interfaces": [ ]
改为如下
数据库配置
数据库配置有两种,一种为以本地文件为数据库的形式,即下面这段
还有一种是真数据库,即下面这段
可以根据自己的实际情况选择使用哪一种
全局的DHCP配置
上面这段为全局下的dhcp配置
renew-timer
表示客户端在租约过期前需要发起续租(Renew)请求的时间间隔。在默认配置中,客户端应在租约过期前的几秒内发送续租请求。如果客户端成功续租,则租约会得到更新,继续使用同一IP地址
rebind-timer
表示在租约过期后,如果客户端无法与原DHCP服务器通信,客户端可以向任意可用的DHCP服务器发送绑定(Rebind)请求的时间间隔。在默认配置中,客户端可以在租约过期后的几秒内发送绑定请求,以尝试绑定到任意可用的DHCP服务器并获取新的租约
valid-lifetime
表示租约的有效期,即客户端可以使用分配的IP地址的时间长度。在默认配置中,客户端获得的租约将在几秒后过期,除非在此期间成功进行了续租。
option-data
中所填入的为RFC2132定义的DHCP的各类功能相关的配置,基本格式如下
上面这段代码的含义是定义了DHCP服务器的域名(Domain Name,DHCP代码为15),下面是部分的DHCP代码表提供参考
DHCP代码 |
含义 |
1 |
子网掩码(Subnet Mask) |
2 |
时间偏移(Time Offset) |
3 |
默认网关(Router) |
4 |
时间服务器(Time Server) |
5 |
名称服务器(Name Server) |
6 |
DNS服务器(Domain Name Server) |
7 |
日志服务器(Log Server) |
8 |
Cookie服务器(Cookie Server) |
9 |
LPR服务器(Line Printer Server) |
12 |
主机名(Host Name) |
15 |
域名(Domain Name) |
17 |
根路径(Root Path) |
18 |
扩展路径(Extensions Path) |
19 |
IP层最大数据长度(IP Layer Maximum Datagram Size) |
23 |
默认IP生存时间(Default IP Time-to-Live) |
28 |
广播地址(Broadcast Address) |
33 |
静态路由(Static Route) |
43 |
供应商特定选项(Vendor Specific Information) |
50 |
请求的IP地址(Requested IP Address) |
51 |
租约时间(IP Address Lease Time) |
53 |
DHCP消息类型(DHCP Message Type) |
54 |
服务器标识(Server Identifier) |
55 |
参数请求列表(Parameter Request List) |
56 |
DHCP消息(Message) |
57 |
最大DHCP消息大小(Maximum DHCP Message Size) |
58 |
客户端唯一标识(Client Identifier) |
59 |
客户端状态(Client System) |
60 |
厂商类标识(Vendor class identifier) |
61 |
客户机硬件地址(Client Identifier) |
66 |
TFTP服务器名称(TFTP Server Name) |
67 |
引导文件名称(Bootfile Name) |
69 |
炸弹选项(DHCP Relay Agent Information) |
150 |
TFTP服务器地址(TFTP Server Address) |
需要注意,这是标准的DHCP协议的定义,虽然kea的软件是遵照标准所设计的,但在实际填写各选项时,请务必还是看一眼kea的官方文档,确定配置应如何编写
kea扩展
在配置文件中为hooks-libraries
段落,此为kea的高级应用,不说了(我懒)
地址池配置
地址池配置为subnet4
段落,下面是定义一个网段的配置
- subnet: 定义一个子网,此处为
192.0.2.0/24
,表示一个以 192.0.2.0
作为网络地址的CIDR形式的子网,子网掩码为255.255.255.0
。
- pools: 定义了一个地址池,其中包含一个范围。此处的地址池为 “192.0.2.1 - 192.0.2.200”,表示可用于分配的IP地址范围从
192.0.2.1
到192.0.2.200
。
- option-data: 定义了DHCP选项的数据。在这里,指定了一个名为 “routers” 的选项,其值为
192.0.2.1
。这表示在DHCP租约期间,客户端将收到一个名为 “routers” 的选项,并且该选项的值将设置为 “192.0.2.1”,指示客户端使用该IP地址作为默认网关。这个定义仅适用于此地址池,且其优先级高于全局的option-data。
- reservations: 定义了一个预留(reservation),用于为特定的客户端设备分配特定的IP地址。在此配置中,指定了一个硬件地址(hw-address)为
1a:1b:1c:1d:1e:1f
的设备,将被分配IP地址 192.0.2.201
。
为什么最后又不选择使用kea DHCP?
kea DHCP的模块化确实为部署提供了很多的选择,但这个模块化并不人性,并不是通过添加或删除可执行文件就可以增加或减少其功能的,而是需要进行编译。
stork为kea官方所推荐使用的监控平台,但功能过于鸡肋。
数据库方面没有很成熟的方式进行操作,交互上需要通过hook,并且如果要方便管理员使用则需要二次开发
json格式的配置文件过于反人类,看的眼睛疼