docker macvlan 环境 nat ipv6 连不通外网

2023-05-11 08:13:26 +08:00
 aries1998
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 方式, 两者应该没什么区别。
1339 次点击
所在节点    Docker
3 条回复
paranoiagu
2023-05-11 08:25:34 +08:00
容器直接获取 ipv6 公网 ip ,不要通过路由器 nat
luckjoe680
2023-05-11 08:30:11 +08:00
docker ipv6 只能 host 吧?
aries1998
2023-05-11 08:47:44 +08:00
@paranoiagu 试过直接 slaac 方式,container 能拿到 ipv6 ,但也访问不了外网,有点怀疑跟 nat 方式不通是一样原因。 另外直接拿外网 ip 又要搞防火墙,太麻烦,还是得用 nat 方式。

@luckjoe680 好像没这种说法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939065

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX