Debian路由器动态IPv6前缀下的DHCPv6/SLAAC配置疑问(range6设置)
Debian路由器动态IPv6前缀下的DHCPv6/SLAAC配置疑问(range6设置)
嗨,我来帮你搞定这个动态IPv6前缀下的DHCPv6配置难题!核心问题在于你没法写死range6里的前缀,因为ens19获取的前缀是动态变化的——这时候就得用到**前缀委托(Prefix Delegation, PD)**功能,让dhcpd6自动从上游(ens19)拿到前缀,再动态分配给ens18的子网。
下面是一步步的配置方案,结合你的现有配置来调整:
1. 配置dhcpd6.conf核心内容
因为前缀是动态的,我们不能直接指定固定前缀,而是通过前缀委托池来动态关联上游分配的前缀。把你的/etc/dhcp/dhcpd6.conf改成这样:
# 全局配置:指定DNS服务器(可以换成你偏好的,比如国内的240c::6666) option dhcp6.name-servers 2001:4860:4860::8888, 2001:4860:4860::8844; # 可选:指定域名搜索域 option dhcp6.domain-search "your-local-domain.lan"; # 监听需要用到的接口 interface ens19; interface ens18; # 定义前缀委托池:从上游获取的前缀中,拆分出/64的子前缀给ens18子网 prefix6 pool pd_pool { prefix-length 64; # 给下游设备分配的子网前缀长度(通常是/64) prefix-delegation hint; # 向上游DHCPv6服务器发送前缀请求的提示 } # 配置ens18的IPv6子网,用::/0匹配所有动态获取的前缀 subnet6 ::/0 { # 这里的range是相对前缀的偏移,实际会和动态子前缀组合 # 比如上游给的是2001:db8:abcd::/48,ens18会拿到2001:db8:abcd:1::/64 # 那么这个range就对应2001:db8:abcd:1::1 到 2001:db8:abcd:1::ffff range6 ::1 ::ffff; # 绑定前面定义的前缀委托池 prefix6 pd_pool; # 如果要同时支持SLAAC(无状态地址自动配置)+ 无状态DHCPv6(只发DNS等配置) # 就加上下面这行,设备会自己生成IPv6地址,从DHCP拿其他参数 option dhcp6.stateless; }
2. 确保IPv6转发和路由通告支持
Debian作为路由器,必须开启IPv6转发,同时让ens19能接受上游的路由通告(才能拿到前缀委托):
编辑/etc/sysctl.conf,添加或修改这两行:
net.ipv6.conf.all.forwarding=1 net.ipv6.conf.ens19.accept_ra=2
然后执行命令让配置生效:
sysctl -p
3. 检查现有网络配置
你的/etc/network/interfaces里ens19的IPv6配置已经加了request_prefix 1,这个是对的——它会告诉上游DHCPv6服务器:“请给我分配一个前缀用于下游子网”,确保上游网络支持前缀委托(大部分ISP的IPv6服务都支持)。
4. 重启服务并验证
重启DHCPv6服务:
systemctl restart isc-dhcp-server
可以通过日志查看是否正常运行:
journalctl -u isc-dhcp-server -f
之后连接到ens18的设备应该能自动获取到IPv6地址(不管是SLAAC生成的,还是DHCPv6分配的),同时拿到DNS等配置。
关键说明
- 为什么不用固定前缀?因为上游给你的前缀是动态的,每次重启ens19或者续租可能都会变,写死的话会直接失效。
subnet6 ::/0是通配符配置,让dhcpd6自动适配所有动态获取的前缀。prefix6 pool负责从上游拿到的大前缀里拆分出适合下游的子前缀(这里是/64,符合IPv6子网的标准)。
备注:内容来源于stack exchange,提问作者Karmylr
相关产品推荐
相关产品推荐

