PVE 宿主机 IPv6 自动获取配置标准文档

1. 背景与问题

在 PVE(Proxmox VE)宿主机上,vmbr0 网桥配置静态 IPv4 并启用 IPv6 SLAAC 自动获取时,常见以下问题:

  • 每次意外断电重启后,宿主机无法获取上游 IPv6 地址
  • 需要手动执行 systemctl restart networking 才能恢复
  • 配置文件出现重复段落、pre-up 时序错误、accept_ra 被系统重置等情况

本文档提供一套经过验证的标准配置,确保 IPv6 在正常重启和意外断电重启后均能稳定自动获取。


2. 最终标准配置

编辑 /etc/network/interfaces:

auto lo
iface lo inet loopback

iface nic0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.2*4/24
        gateway 192.168.1.1
        bridge-ports nic0
        bridge-stp off
        bridge-fd 0
        accept_ra 2
        autoconf 1

iface nic1 inet manual

iface nic2 inet manual

source /etc/network/interfaces.d/*

关键参数说明:

参数作用
accept_ra 2允许接收路由器通告(RA),即使系统开启了 IPv6 转发也生效
autoconf 1启用 SLAAC 地址自动配置,收到 RA 后生成全球 IPv6 地址

注意:accept_ra 和 autoconf 必须写在 vmbr0 的 inet static 段内,由 ifupdown2 在接口 up 阶段统一应用,避免使用 post-up echo 或 pre-up 手动干预。


3. 固化内核参数(可选但推荐)

为防止网络服务重载或系统策略覆盖 accept_ra,将其写入 sysctl 持久化配置:

echo "net.ipv6.conf.vmbr0.accept_ra=2" >> /etc/sysctl.conf
sysctl -p

4. 应用与验证

4.1 应用配置

ifreload -a
# 或
systemctl restart networking

4.2 验证 IPv6 地址

ip -6 addr show vmbr0

预期输出包含以 240e: 或 2xxx: 开头的 scope global 地址,例如:

inet6 240e:346:c71:5400:eaff:1eff:fed6:36b7/64 scope global dynamic mngtmpaddr proto kernel_ra

4.3 验证内核参数

sysctl net.ipv6.conf.vmbr0.accept_ra

预期输出:

net.ipv6.conf.vmbr0.accept_ra = 2

4.4 重启持久性验证

reboot

重启后再次执行 ip -6 addr show vmbr0,确认 IPv6 地址自动获取成功,无需手动重启网络服务。


5. 常见问题排查

5.1 重启后仍无法获取 IPv6

可能原因:上游路由器(光猫/主路由)启动慢于 PVE,PVE 网卡就绪时尚未收到 RA。

验证方法:

systemctl restart networking
ip -6 addr show vmbr0

若手动重启网络后能获取地址,则确认为启动时序竞争。

处理建议:

  • 检查路由器是否支持“IPv6 快速通告”或“快速启动”选项
  • 或在 PVE 上配置延迟触发的 systemd 服务,在网络就绪后数秒强制刷新 IPv6

5.2 检查 PVE 防火墙是否拦截 ICMPv6

RA 依赖 ICMPv6,若 PVE 防火墙规则过严,可能导致 RA 被丢弃。临时放行 ICMPv6 测试:

# 在 PVE 防火墙中放行 ICMPv6(仅测试用)

确认恢复后,再收紧规则并保留必要的 ICMPv6 放行。

5.3 配置文件常见错误

错误写法问题正确做法
重复写两段 iface vmbr0 inet6 auto配置冲突,行为不可预期只保留一段
pre-up sleep 2 && ip link set nic0 up时序不可靠,可能打乱 RA 接收删除,改用 accept_ra + autoconf
post-up echo "2" > /proc/sys/...可能被网络服务重载覆盖写入接口配置段或 sysctl.conf
只写 accept_ra 2 缺少 autoconf 1收到 RA 但不生成地址两者必须同时配置

6. 配置要点总结

  1. accept_ra 2 + autoconf 1 必须成对出现,且写在 vmbr0 的 inet static 段内。
  2. 避免使用 pre-up 手动拉起物理网卡,交由 ifupdown2 管理桥接时序。
  3. 避免重复配置段,保持 /etc/network/interfaces 简洁唯一。
  4. 推荐固化 sysctl,防止 accept_ra 被系统策略重置。
  5. 意外断电后仍失败时,优先排查上游路由器启动时序与 PVE 防火墙 ICMPv6 放行情况。

7. 参考环境

  • PVE 版本:9.x
  • 网络管理:ifupdown2
  • IPv6 获取方式:SLAAC(路由器通告)
  • 网桥:vmbr0,桥接物理网卡 nic0

文档版本:v1.0 | 适用场景:PVE 单节点宿主机 IPv6 SLAAC 自动获取