配图: rows of yellow lounge chairs photo – Free Image on Unsplash
IPv6 有了,运营商用 PD 协议下发了 240e:3b7:xxx:xxx::/60 这个前缀,理论上,就可以随便分配 IP 给下游设备了,虚机机之类的如果可以桥接,也是没有问题的,那 Docker 可以吗?Docker 支持 IPv6 大概有两种情况
- 每个容器都有 IPv6 地址
- 每个容器能访问 IPv6 网络,但是没有公网 IPv6 地址
官方对 IPv6 的支持不太积极,macOS 上的一些问题一直挂着没有解决,可能 macOS 比较特殊吧,官方文档中提到 IPv6 的支持很简单,需要修改 /etc/docker/daemon.json
,加入两个选项
|
|
|
|
可以看到 bridge 网络已经有了正确的 IPv6 配置,用以下命令测试一下
|
|
发现 ping 不通
修改配置文件,加入以下内容
|
|
重启 Docker,再次测试,发现可以 ping 通了
新加的配置项 ip6tables
是用来开启 IPv6 NAT 的,experimental
是用来开启 IPv6 NAT 的前提,不加这个配置项,ip6tables
会被忽略
如果是 docker-compose,先创建一个网络,并在 docker-compose.yml 中指定网络
|
|
|
|
该方案同样适用于购买服务器时提供商给了一个 /128 的 IPv6 地址的情况,通过该方案,容器可以有一个 fd00::/80
范围的地址,并通过 NAT 到服务商给的 /128 地址访问 IPv6 网络
在一些不支持 IPv6 NAT 的环境(如 DSM 6.1)中,可以尝试通过 macvlan 来配置 IPv6 网络
通过 macvlan 创建 IPv6 网络
前提,该设备处在一个通过 SLAAC 配置 IPv6 的网络中,如家庭网络,企业网络等
macvlan 基于物理网卡创建一个虚拟网卡,可以通过给虚拟网卡配置 IPv6 地址来实现容器的 IPv6 访问
|
|
通过上面配置创建的容器其可以自动获得 IPv6 地址,注意需要根据自己的网络环境修改配置,如 parent 网卡,subnet 等
其原理是通过 macvlan 创建的虚拟网卡,可以接收 RA 消息并得到一个 IPv6 地址
以上