切换VLAN时KEA DHCP分配错误IP地址的问题求助
问题描述
我们用一台APU盒子部署了KEA DHCP4服务,盒子的单个端口承载所有VLAN的标签流量,每个VLAN都配置了对应的IP子网(比如VLAN70对应10.14.70.0/24,绑定接口enp3s0.70),配置示例如下:
{ "subnet": "10.14.70.0/24", "interface": "enp3s0.70", "pools": [ { "pool": "10.14.70.100-10.14.70.199" } ], "option-data": [ { "name": "routers", "data": "10.14.70.254" } ], "reservations": [ { "hw-address": "xx:xx:xx:xx:xx:xx", "ip-address": "10.14.70.200" }, { "hw-address": "yy:yy:yy:yy:yy:yy", "ip-address": "10.14.70.11" } ] }
单个VLAN下的IP分配工作正常,但当笔记本从一个VLAN(比如70)切换到另一个VLAN(比如71)时,KEA会因为识别到笔记本的MAC地址,直接分配旧VLAN的IP,导致无法联网,必须手动释放IP后重新请求才能正常获取新VLAN的IP。
想请教下有没有配置选项可以让KEA始终根据请求来源的接口(VLAN子接口)来分配IP,或者其他解决这个问题的方法?
解决方案建议
我之前也碰到过类似的VLAN切换后KEA复用旧租约的问题,给你几个实用的配置调整方向:
1. 启用always-select-subnet强制按接口选子网
这是最直接的解决方法,在KEA的DHCP4配置中添加subnet-selection区块,开启always-select-subnet: true。这个参数会让KEA忽略客户端已有的租约记录,每次都根据请求到达的子接口来匹配对应的VLAN子网,分配正确的IP。
示例配置片段:
"Dhcp4": { // 保留你原有的全局配置(比如租约数据库、日志等) "subnet-selection": { "always-select-subnet": true }, // 你的各个VLAN子网配置... "subnets": [ // VLAN70的子网配置 { "subnet": "10.14.70.0/24", "interface": "enp3s0.70", // ...其他配置 }, // VLAN71的子网配置 { "subnet": "10.14.71.0/24", "interface": "enp3s0.71", // ...其他配置 } ] }
2. 缩短租约有效期(辅助优化)
虽然不能直接解决问题,但缩短租约的有效时间可以让旧VLAN的租约更快过期,减少切换后碰到旧IP的概率。你可以在全局配置里调整这两个参数:
"Dhcp4": { "max-lease-time": 3600, // 最大租约时间1小时 "renew-timer": 1800, // 续租时间30分钟 // ...其他配置 }
3. 检查客户端类(Client Class)的匹配规则
如果你之前配置了基于MAC地址的客户端类,可能会导致KEA跳过接口匹配直接分配固定子网的IP。这种情况下需要调整客户端类的测试条件,加入接口名称的判断,比如:
"client-classes": [ { "name": "vlan70-client", // 同时匹配VLAN标签和接口名称 "test": "substring(option[82].hex, 0, 2) == '0070' && ifname == 'enp3s0.70'", "next-server": "10.14.70.254" } ]
不过这个配置相对复杂,优先尝试第一种方法即可。
修改完配置后,记得重启KEA DHCP4服务让配置生效,比如执行:
systemctl restart kea-dhcp4
备注:内容来源于stack exchange,提问作者paddex

