容器中开启ipv6的方式可能有很多,其中一种就是在容器中分配公网ipv6地址,但是这样做就把容器中的端口全暴露到了公网中,用ip6tables 也不好管理,不安全。建议使用ipv6 nat的方式。
ipv6 nat 就是在容器中分配一个私有的ipv6地址,这和目前常用的ipv4桥接模式没有区别。
开启ipv6有什么好处,说下我的使用场景:
最近在树莓派(Ubuntu 20.04.1 LTS)中部署了aria2 进行bt下载(使用容器部署),但是没有真实的ipv4公网地址(因为是长沙移动的宽带), 如果开启ipv6, 就可以和其他的ipv6用户直接通讯了,理论上寻找资源和下载速度会提高。
开始之前:
宿主机已经有ipv6地址了, (如果没有请先确认你的运营商是否支持,请自行网上冲浪找答案。 )
ifconfig 查看, inet6 为 global的ip就是ipv6地址
docker engine 的版本大于等于20.10.2,因为这个版本才开始支持ip6tables。(如果小于这个版本,就要用第三方的工具管理ip6tables的nat规则:robbertkl/docker-ipv6nat )
正式开始:
编辑 /etc/docker/daemon.json ,加上以下内容。(如果没有这个文件直接创建。)
{ "ipv6": true, "fixed-cidr-v6": "fd00::/80", "experimental": true, "ip6tables": true }
重启docker engine
sudo systemctl restart docker
测试
sudo docker run --rm -it busybox ping -6 -c4 ipv6-test.com
sudo docker run --rm -it busybox ifconfig
能ping通ipv6的公网地址了。容器中的eth0 也有fd00::/80段的地址。完成!
下面给一个我在用的aria2的docker-compose.yaml
version: "3" services: aria2: image: hurlenko/aria2-ariang hostname: aria2 restart: always ports: - 127.0.0.1:6800:8080 - 56999:56999 - 56999:56999/udp volumes: - /mnt/md0/aria2:/aria2/data - /etc/aria2:/aria2/conf environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 - RPC_SECRET=YOUR_RPC_SECRET - DOMAIN=0.0.0.0:8080 - ARIA2RPCPORT=443 network_mode: bridge
可以上面这个网站扫描ipv6端口。
原文:
https://zhuanlan.zhihu.com/p/342633966