linux本身不直接支持dhcpv6 pd委派功能,nmcli仅能配置本机作为pd客户端获取前缀(如/48),但无法自动切分子网、发布ra或运行dhcpv6服务器;需额外部署radvd、dhcpcd/isc-dhcp-server及启用ipv6转发才能实现向下委派。

Linux 本身不直接支持作为 DHCPv6 PD 客户端向下游设备委派前缀,nmcli 也不提供“配置 PD 服务端”或“开启前缀委派转发”的能力。它只能让本机作为 DHCPv6 PD 客户端,从上游(如运营商光猫、核心防火墙)获取一个 IPv6 前缀,并将该前缀应用到本机接口上——但不会自动切分子网、发布 RA、启动 DHCPv6 服务器来分发给下游路由器或终端。
nmcli 能做的:让 Linux 主机成为 DHCPv6 PD 客户端
这是前提。只有先成功获取到一段前缀(例如 2001:db8:abcd::/48),后续的委派逻辑才可能展开。
- 确认 NetworkManager 已启用 IPv6 和 DHCPv6 支持:
sudo nmcli general networking onsudo nmcli connection modify eth0 ipv6.method auto(启用 SLAAC + DHCPv6 自动获取) - 强制启用 DHCPv6 PD(关键):
sudo nmcli connection modify eth0 ipv6.dhcp-duid llsudo nmcli connection modify eth0 ipv6.dhcp-send-hostname yessudo nmcli connection modify eth0 ipv6.ignore-auto-routes no - 重启连接生效:
sudo nmcli connection down eth0 && sudo nmcli connection up eth0 - 验证是否拿到 PD 前缀:
ip -6 route | grep 'via'(看是否有 upstream 网关)ip -6 addr show dev eth0 | grep 'inet6.*global'(看是否有 /48 或更长前缀的地址)sudo journalctl -u NetworkManager | grep -i 'dhcpv6.*prefix'(查日志确认 PD 是否协商成功)
nmcli 不能做的:自动向下委派(需额外组件)
nmcli 不负责生成子网、不广播 RA、不运行 DHCPv6 服务。要实现“下游自动分配”,你必须在本机上额外部署:
- radvd:用于发送 Router Advertisement,通告下游子网前缀(如把 /48 切成多个 /64),并开启“Managed flag”或“Other flag”引导客户端走 DHCPv6
- dhcpcd 或 isc-dhcp-server(带 DHCPv6 PD 支持):真正响应下游请求,将主前缀按需委派 /64 给分支路由器
-
内核路由与转发:
echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/forwarding
并持久化(写入/etc/sysctl.conf)
典型下游委派流程(需组合工具)
假设你通过 nmcli 成功从上游拿到 2001:db8:abcd::/48,想为两个 LAN 口(eth1、eth2)各委派一个 /64:
- 手动规划子网:2001:db8:abcd:1::/64 → 分配给 eth1;2001:db8:abcd:2::/64 → 分配给 eth2
- 用 ip 命令添加本地路由:
sudo ip -6 route add 2001:db8:abcd:1::/64 dev eth1sudo ip -6 route add 2001:db8:abcd:2::/64 dev eth2 - 配置 radvd.conf,为每个接口广播对应前缀,并设
AdvManagedFlag on(表示下游应使用 DHCPv6 获取地址) - 配置 dhcpd6 或 dnsmasq(支持 DHCPv6 PD),监听 eth1/eth2,响应 IA_PD 请求,按策略委派 /64
注意事项
多数云环境(如华为云、阿里云)不开放 DHCPv6 PD 上游协商,仅提供固定前缀或 SLAAC 地址。物理网络中,PD 依赖上游明确支持且已开启委派功能(如华为防火墙开启 dhcpv6 pd 并允许委派长度)。
nmcli 是配置入口,不是完整方案。它帮你拿前缀,剩下的子网划分、通告、服务、转发,得靠系统级工具协同完成。











