这是一个创建于 561 天前的主题,其中的信息可能已经有所发展或是发生改变。
Host: 一台 x86 的 ubuntu 做的路由, 桥接光猫拨号
eth0: 连光猫 192.168.1.0/24
eth1: 内网连交换器 192.168.0.0/24
wide-dhcp6c + dnsmasq 获取 slaac 地址和 ra 广播,路由以及内网机器外网 ipv6 都正常获取。
docker 配置:
cat /etc/docker/daemon.json
{
"data-root":"/data/docker",
"bip": "10.20.0.1/16",
"ipv6": true,
"fixed-cidr-v6": "fd00:5::/80",
"ip6tables": true,
"experimental": true
}
bridge network 方式的 container 通过 ipv6 nat 方式能访问 ipv6 外部网络
macvlan 配置步骤:
docker network create -d macvlan --subnet=192.168.0.0/24 --ip-range=192.168.0.192/26 --gateway=192.168.0.10 --ipv6 --subnet=fd00:8::/80 --gateway=fd00:8::1 -o macvlan_mode=bridge -o parent=eth1 macnet
ip link add macvlan link eth1 type macvlan mode bridge
ip addr add 192.168.0.10/24 dev macvlan
ip -6 addr add fd00:8::1 dev macvlan
ifconfig macvlan up
ip route add 192.168.0.192/26 dev macvlan
ip -6 route add fd00:8::/80 dev macvlan
测试 container
docker run -d --restart=always --net=macnet --ip=192.168.0.254 --name=mtool_vlan praqma/network-multitool
container 内部 ip 地址:
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:00:FE
inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::42:c0ff:fea8:fe/64 Scope:Link
inet6 addr: fd00:8::2/80 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:17957 (17.5 KiB) TX bytes:2356 (2.3 KiB)
具体问题如下:
fd00:8::2 ping 的通 fd00:8::1
fd00:8::2 ping 不通 host 里 macvlan 以外的其他 ipv6 网络
内网 192.168.0.0/24 网段的能 ping 通 fd00:8::1 , ping 不通 fd00:8::2
bridge 网络 fd00:5::/80 的 container 能 ping 通 fd00:8::2, 但反过来不行, 这点我是最不能理解的
host 上面的内核设置, 路由,以及 iptables SNAT 规则都检查了,应该没问题,一来这台 host 一直跑主路由, 二来 bridge 模式的 container 能 nat ipv6 方式访问外网,macvlan 的 ipv6 我也是配置的 nat 方式, 两者应该没什么区别。
第 1 条附言 · 2023-05-12 06:10:39 +08:00
macvlan 的 container 能 ping 通 host 上面所有的 global ipv6 地址, 但就是出不去 host
第 2 条附言 · 2023-05-12 10:25:43 +08:00
最后发现是 docker 默认会把 FORARD 链的 policy 改为 DROP ,但是目前发现只改了 ipv6 ,没改 ipv4 ,不知道为什么
3 条回复 • 2023-05-11 08:47:44 +08:00
|
|
1
paranoiagu 2023-05-11 08:25:34 +08:00 via Android
容器直接获取 ipv6 公网 ip ,不要通过路由器 nat
|
|
|
2
luckjoe680 2023-05-11 08:30:11 +08:00
docker ipv6 只能 host 吧?
|
|
|
3
aries1998 2023-05-11 08:47:44 +08:00
@ paranoiagu 试过直接 slaac 方式,container 能拿到 ipv6 ,但也访问不了外网,有点怀疑跟 nat 方式不通是一样原因。 另外直接拿外网 ip 又要搞防火墙,太麻烦,还是得用 nat 方式。 @ luckjoe680 好像没这种说法
|