Docker使用ipv6小记

记录一下折腾在不同的服务提供商使用ipv6跑docker容器的惨痛教训

1.服务提供商有提供/64地址使用,但不是整个地址块指向你

此类型已知厂商:vultr/scaleway

步骤1.打开Linux的内核参数文件

修改 /etc/sysctl.conf,新增

#接受IPv6 默认路由
net.ipv6.conf.all.accept_ra=2
#打开ipv6的内核转发
net.ipv6.conf.all.forwarding=1
#暂时不确定是否有效,先写着
net.ipv6.conf.all.proxy_ndp=1
步骤2.安装软件包ndppd,把ipv6的prefix告诉你的服务商都在你这
#Rhel
yum install ndppd -y
#Debian
apt install ndppd -y

修改ndppd的配置文件/etc/ndppd.conf (没有就直接创建)

route-ttl 30000
proxy 你的外网接口 {
    router no
    timeout 500
    ttl 30000
    rule 你的整个/64(比如aabb:ccdd:114:514::/64) {
        static
    }
}

然后重启及设置开机启动

systemctl restart ndppd.service
systemctl enable ndppd.service
步骤3.打开Docker的ipv6功能

修改/etc/docker/daemon.json,没有就新建

{
  "ipv6": true,
  "fixed-cidr-v6": "一段ipv6"
}

这里的ipv6有两种玩法,假设运营商给你的是aabb:ccdd:114:514::/64
0.docker貌似要求最小/80
1.fixed-cidr-v6直接给他整一段服务商给你的地址块,比如aabb:ccdd:114:514:1919::/80,然后你的docker跑在默认的bridge网络下的就会拿到这里面的地址。如果要指定ip的,再抠一段出来自己搞network
2.fixed-cidr-v6给他整一段私有地址,fd00::/8,但是不用默认的bridge,自己建一个新的network,整段拿进去用

这种玩法相当于把整个容器暴露在公网,自己想办法防护

2.服务提供商有提供/64地址使用,而且把整个地址块指向你了

此类型已知厂商:Linode

参考第一节,不用配置ndppd就可以了

3.服务提供商只给你一个ipv6地址使用

此类型已知厂商:aws/qcloud

直接打开Docker的ipv6功能,nat6搞起

修改/etc/docker/daemon.json,没有就新建

{
  "ipv6": true,
  "fixed-cidr-v6": "一段ipv6",
  "ip6tables": true,
  "experimental": true
}

这里的ipv6因为没有运营商给你的地址块,只能用fd00::/8了,加上”ip6tables”: true和”experimental”: true,开启ipv6的nat

这种玩法需要通过docker-proxy去nat,或者你可以自己想别的办法映射到外网ip去
2023.09.15

更早的文章

RouterOS v7更新ipv6在Cloudflare解析的脚本

分享一下适用于RouterOS v7更新ipv6在Cloudflare解析的脚本目前做得很戳,由于RouterOS v7上游更新ip后不会删掉老ip,目前采取关闭接口重新打开的方式,将导致网络断开,恢复时间取决于重新通过SLAAC拿到地址的时间。TODO🐦:记录ip到本地,后续先确定老地址id,直接删除老地址。脚本1(接口关闭脚本)::local v6addrCount [/ipv6/address print count-only where interface=接口名称 and glo...…

继续阅读