通过修改配置文件,使用NAT6的方式,让使用docker bridge网络内的容器也能访问IPv6
具体方法:
0.首先确保linux服务器上的ip转发相应功能是开启的
1.编辑 /etc/docker/daemon.json,写入以下内容,开启IPv6支持(如果该文件已经存在其他内容的话,把花括号内的选项,按照文件格式,添加到文件的末尾即可)
[ol]{
"ipv6": true,
"fixed-cidr-v6": "fd10::/80"
}[/ol]复制代码
2.创建一个支持ipv6的docker bridge网络,例如下面这样(其中 anet 为网络的标识名字,fd00::/80为内网子网网段)
[ol]docker network create --ipv6 --subnet fd00::/80 anet[/ol]复制代码
3.修改iptables的配置文件,加入NAT规则以能使其正常访问外部(以下为命令方式暂时生效,需要随后使用既定方法永久保存。如果服务器本身就存在iptables相关的配置文件的话,请考虑转换格式后,将其直接写入配置文件)
[ol]ip6tables -t nat -A POSTROUTING -s fd00::/80 ! -o br+ -j MASQUERADE
ip6tables -t nat -A POSTROUTING -s fd10::/80 ! -o docker0 -j MASQUERADE[/ol]复制代码
4.重启docker相关服务,尝试添加一个容器到已经创建的bridge网络(如果使用的是命令行的话则需要加一个 --network 选项后面跟上创建的网络,如果用的是docker compose文件的话直接加一个 network: 后面跟上创建的网络即可)
5.可以进入容器内命令行,试试ping任意一个IPv6网站,如果出现以下类似于以下这个例子的话,那就代表成功了
[ol]# ping -6 google.com
PING google.com (2a00:1450:4001:809::200e): 56 data bytes
64 bytes from 2a00:1450:4001:809::200e: seq=0 ttl=53 time=1.234 ms
64 bytes from 2a00:1450:4001:809::200e: seq=1 ttl=53 time=1.611 ms
64 bytes from 2a00:1450:4001:809::200e: seq=2 ttl=53 time=1.860 ms
64 bytes from 2a00:1450:4001:809::200e: seq=3 ttl=53 time=1.769 ms
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 12.769/16.618/19.611 ms[/ol]复制代码