很多人配置好 PVE 之后,发现自己的 PVE 主机没有 IPv6 地址,无法远程访问,排查了很久依然无法获取地址,这其实是因为 PVE 内置的安全策略导致的,必须开启 IPv6 相关报文转发才能正常通过 DHCPv6 或 SLAAC 获取 IPv6 地址

按下面的操作修改配置文件后即可正常获取 IPv6。
注意:本教程是让你的 PVE 主机 和 LXC 容器获取 IPv6 地址,如果你虚拟机和其他下连设备出现问题,请先确定是不是你自己的问题

  • 修改配置文件 nano /etc/sysctl.conf
  • 把文件内容替换为/在末尾加上下面的内容
1
2
3
4
5
6
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.vmbr0.accept_ra=2
net.ipv6.conf.all.autoconf=2
net.ipv6.conf.default.autoconf=2
net.ipv6.conf.vmbr0.autoconf=2
  • 重启主机

另外备注一下:LXC 容器 获取 IPv6 地址要设置成 SLAAC 才能获取地址(设置为 SLAAC 后既可以 DHCPv6 有状态,也可以 SLAAC 无状态,设置为 DHCP 只能拿到Link-Local 链路地址)
LXC 容器修改完网络设置重启对应容器即可

重启之后检查一下 PVE 主机和 LXC 容器有没有拿到地址

1
2
3
4
5
6
7
8
9
10
11
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.20.6.9 netmask 255.224.0.0 broadcast 10.31.255.255
inet6 2408:8210::18a9:1eff:fee2:600c prefixlen 64 scopeid 0x0<global>
inet6 2408:8210::10:20:6:9 prefixlen 128 scopeid 0x0<global>
inet6 fe80::18a9:1eff:fee2:600c prefixlen 64 scopeid 0x20<link>
ether 1a:a9:1e:e2:60:0c txqueuelen 1000 (Ethernet)
RX packets 134 bytes 33534 (33.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 126 bytes 24570 (24.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以看到同时通过 DHCPv6 和 SLAAC 拿到了地址