docker容器ipv6设置
Glider 三月 26, 2022前言
在使用qbit等bt下载软件时,如果有ipv6地址,节点的连接性将会更好,下载速度更快,peer也会更多。刷流更快
由于docker对于ipv6的支持并不是特别好,不能像ipv4一样,为创建的容器自动分配ipv6地址,或者进行nat等操作。
但是对于一个所有软件都装在docker内的mjj来说,这是不能容忍的事情。
在查阅了诸多资料之后,这里记录一下docker如何完美开启ipv6,并且为容器自动进行v6nat等操作。
环境验证
为了开启docker的ipv6支持,首先你的host主机必须要有能用的ipv6地址(废话)
这里用北邮人进行验证
ping6 byr.pt
PING byr.pt(2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d)) 56 data bytes
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d): icmp_seq=1 ttl=48 time=88.0 ms
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d): icmp_seq=2 ttl=48 time=86.7 ms
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d): icmp_seq=3 ttl=48 time=81.6 ms
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d): icmp_seq=4 ttl=48 time=86.0 ms
接下来用busybox容器使用host网络进行验证
docker run --rm -it --net=host busybox /bin/sh
ping6 byr.pt
PING byr.pt(2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d)) 56 data bytes
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d
如果以上输出的东西都正常,说明你的docker安装和host的ipv6都正常。
如果后续步骤出现了什么问题,一定要使用上述两种方式检查网络的连通性,以便debug
正文
经过上一节的验证后,你的ipv6地址应该是没问题了,接下来对docker的网络进行配置
vim /etc/docker/daemon.json #加入以下配置的时候,注意别破坏了原来的结构,例如镜像啥的
{
"experimental": true,
"ipv6": true,
"ip6tables": true,
"fixed-cidr-v6": "fc00:100::/24"
}
systemctl daemon-reload
systemctl restart docker
完事后查看主机本身是否还能连上ipv6,方式如同第一节。
如果没什么问题,则恭喜你,完成了设置。
如果发现主机的ipv6失效了,ping不通,则尝试以下补救措施:
- 编辑
/etc/sysctl.conf
文件,加入以下字段
net.ipv6.conf.ens3.accept_ra = 2
# 注意,这里的ens3是你的网卡名称,可以使用`ip addr`等命令进行查看,看情况进行修改
sudo sysctl -p
使设置生效
之后再尝试ping6,查看主机的ipv6是否恢复
最后
此时你的docker应该可以无感的进行ipv6分配了,我们测试一下:
docker run --rm -it busybox /bin/sh
ping6 byr.pt
PING byr.pt(2001:da8:215:4078:250:56ff:fe97:654d (2001:da8:215:4078:250:56ff:fe97:654d)) 56 data bytes
64 bytes from 2001:da8:215:4078:250:56ff:fe97:654d
结语
这里只是记录了我的折腾过程,由于docker的ipv6不完善,可能会出现更多奇奇怪怪的问题。
暂时能用就行……