dibbler-server的DHCPv6-PD如何分配56位前缀
dibbler-server
是一个实现DHCPv6的应用层软件,用于给客户端提供IPv6地址分配。
dibbler-server
支持IPv6地址分配、前缀委派等,本文总结了在前缀委派时需要的配置和可能出现的错误。
在 DHCPv6 前缀委派(PD)配置中,pd-length
和 pd-pool
的参数关系直接影响前缀分配的逻辑合理性:
参数关系
pd-length
必须严格大于pd-pool
定义的前缀长度。例如,若pd-pool
定义为3000:458:aa31:5700::/48
(48 位前缀),则pd-length
应设为56或64等更大的数值。若两者相等(如均为 48),服务器无法分割前缀池,只能将整个/48
分配给一个客户端,导致后续请求无法分配前缀。
分配失败的原因分析
- 地址空间耗尽:当
pd-length=48
时,每个客户端需要占用整个/48
前缀池。一旦分配一次,池中再无可用前缀,后续请求因资源不足失败。 - 逻辑冲突:DHCPv6 前缀委派的核心机制是将父前缀拆分为子前缀。若无法分割(长度相同),服务器会判定配置错误或忽略请求。
扩展性与多客户端支持
若需支持多个客户端,需确保 pd-length 比 pd-pool 前缀长度至少大 8 位(如 /48 → /56)。例如:
- 父前缀
3000:458::/40
搭配pd-length=48
,可分配256个/48
子网。 - 多池配置允许客户端从多个池各获一个子前缀,但每个池仍需满足
pd-length > pd-pool
的规则。
故障排查
下面给出pd-length
和pd-pool
相等时dibbler-server
的相关日志,
25:58 Server Warning Prefix pool /56 defined and clients are supposed to get /56 prefixes. Only ONE client will get prefix
示例
iface "wan" {
// also ranges can be defines, instead of exact values
t1 18-20
t2 27-30
prefered-lifetime 36
valid-lifetime 72
# assign addresses from this pool
class {
pool 2020:6789::1000 - 2020:6789::2000
}
# assign temporary addresses from this pool
ta-class {
pool 2001:db8:2222::/96
}
#assign /56 prefixes from this pool
pd-class {
pd-pool 3000:458:aa31:5700::/48
# 这里要配置为56,同时上面要配置为48
pd-length 56
}
# provide DNS server location to the clients
option dns-server 2020::ff,2020::fe
}
上面的配置中dibbler-server
从前缀池3000:458:aa31:5700::/48
中向客户端分配/56
前缀,可以分配$2^8=256$个前缀给客户端。
上面配置的前缀池大小为/48
,分配给客户端的前缀长度为pd-length 56
,如果这两者相等服务器则无法分隔前缀池,只能将整个前缀分配给一个客户端,导致后续请求无法分配前缀。
参考文档
- 原文作者:生如夏花
- 原文链接:https://DBL2017.github.io/post/%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE/dibbler-server%E7%9A%84dhcpv6-pd%E5%A6%82%E4%BD%95%E5%88%86%E9%85%8D56%E4%BD%8D%E5%89%8D%E7%BC%80/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。