让Docker容器使用SLAAC配置IPv6
让Docker容器使用SLAAC配置IPv6
About
最近在把家里网络全部拆了重来,把流量划分到完全不同VLAN里面这样我就知道什么设备什么业务在疯狂占用我的带宽,以防止被PCDN

但是遇到一个问题,BT应用最好需要用IPv6以提供更好的连接能力,但是家里的IPv6地址只能通过SLAAC获取,我也不想使用Docker的Host模式,这样如果容器被干炸了,这样入侵者会横向入侵我的网络,所以需要单独在这个VLAN里面单独进行NDP,但是Docker对IPv6支持很糟糕,普通模式只能使用静态地址,但是现在有ipvlan模式,这个模式下可以让接口桥接进L2,通过SLAAC自动配置容器IPv6地址。
先创建一个ipvlan网络
docker network create -d ipvlan --subnet=10.103.0.0/24 \ --ip-range=10.103.0.48/28 \ --gateway=10.103.0.1 \ --ipv6 \ --subnet=fd00:103::/64 \ -o parent=enp1s0.103 \ -o ipvlan_mode=l2 \ lan1_vlan_103
接着把容器加入到这个网络,需要添加参数让容器强制接受RA通告
--sysctl net.ipv6.conf.all.accept_ra=2 --sysctl net.ipv6.conf.eth0.accept_ra=2
接着测试一下,应该就没问题了
docker exec -it uptime-kuma ping6 240e:f7:e01f:f1::30 PING 240e:f7:e01f:f1::30(240e:f7:e01f:f1::30) 56 data bytes 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=2 ttl=56 time=12.0 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=3 ttl=56 time=11.5 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=4 ttl=56 time=12.9 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=5 ttl=56 time=11.4 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=6 ttl=56 time=11.7 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=7 ttl=56 time=11.8 ms 64 bytes from 240e:f7:e01f:f1::30: icmp_seq=8 ttl=56 time=11.8 ms --- 240e:f7:e01f:f1::30 ping statistics --- 8 packets transmitted, 7 received, 12.5% packet loss, time 28ms rtt min/avg/max/mdev = 11.405/11.876/12.895/0.472 ms
在路由器里面也能看到被分配了IPv6地址
31 D 240e:xxx:xxxxxx:a500:11b:f035 C0:25:A5:1B:F0:35 vlan103-bt main