给宿主机分配私有IPv6地址
/etc/docker/daemon.json添加以下内容
“`json
{
"registry-mirrors": ["https://docker.hetao.me"],
"bip": "172.18.0.1/16",
"ipv6": true,
"fixed-cidr-v6": "fd33::1/64",
"experimental": true,
"ip6tables": true
}
</p></li>
</ul>
<pre><code class="line-numbers">这样可以全局开启IPv6
如果要在docker compose中开启IPv6,可以在docker-compose.yaml中指定
“`yaml
services:
web:
image: haohetao/nginx
restart: always
ports:
– 80:80/tcp
– 443:443/tcp
– 443:443/udp
networks:
web-network:
ipv4_address: 172.30.0.20
ipv6_address: fd34::20
networks:
web-network:
driver: bridge
enable_ipv6: true
ipam:
config:
– subnet: “172.30.0.0/24”
– subnet: “fd34::/64”
这样docker会自动添加NAT64,容器用私有IPV6也能上网
- 分配固定公网IP
ip6tables设为false,同时把私有IPv6改为公网IPv6即可,此方法需要路由器或者云平台支持划分子网段
aws支持,aliyun不支持
-
NDP proxying
注意:aliyun不支持,aliyun限制了一个网卡只能有一个IPv6地址(不同实例规格数量不同),多余的IP会被拦截
daemon.json配置
{
"registry-mirrors": ["https://docker.hetao.me"],
"bip": "172.18.0.1/16",
"ipv6": true,
"fixed-cidr-v6": "2409:8a1e:6a51:61e1:2::/80",
"experimental": true,
"ip6tables": false
}
容器子网要在宿主机的网段范围内,前缀要小于宿主机前缀(不能等于)
然后在宿主机上执行
sysctl -w net.ipv6.conf.enp6s18.proxy_ndp=1
sysctl net.ipv6.conf.default.forwarding=1
sysctl net.ipv6.conf.all.forwarding=1
ip -6 neigh add proxy 2409:8a1e:6a51:61e1:0:242:ac11:2 dev enp6s18 #这个ipv6地址是容器的ipv6地址
最后一部的ip -6 neigh命令可以替换为npd6
apt install npd6
cd /etc/
cp npd6.conf.examle npd6.conf
配置
prefix=2409:8a1e:6a51:61e1:2:
interface = enp6s18
systemctl enable npd6
systemctl start npd6
- SLAAC或DHCPv6分配公网IPv6
目前没有找到方法
总结下来就是还是NAT66最靠谱,其它方法都有各种局限性
Views: 65