Docker IPV6 NAT

2020-12-06 14:18:53 +08:00
 qq296015668

最接在做容器化的 IPV6,发现一些小伙伴跟我一样根据官方文档配置后,容器里面根本无法与外部通信

注意:我们只讨论 IPV6 NAT 的实现,容器需要真实的外网 IPV6 不在此范围

Docker

vi /etc/docker/daemon.json
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
  # 这里的 "fixed-cidr-v6": "2001:db8:1::/64" 只是容器内部使用的 ipv6 地址,选一个常用不与现有网络冲突的网段即可(不知道如何设置保持默认也行)
}
systemctl reload docker

官方文档到这里就结束了,这样设置后,容器确实可以获取到 ipv6 的地址了,但是除了宿主之外的 ipv6 均无法正常访问,这是因为 ip6tables 规则缺失,不知道为什么 Docker 没有自动生成 NAT 规则

ip6tables -t nat -A POSTROUTING -s 2001:db8:1::/64 -j MASQUERADE

Docker-Compose

如果是 docker-compose, 可以不修改 /etc/docker/daemon.json, 直接使用 yml 定义

cat docker-compose-network.yml
version: '2.2'

networks:
  net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16
        - subnet: 2001:db8:10::/64
ip6tables -t nat -A POSTROUTING -s 2001:db8:10::/64 -j MASQUERADE
1980 次点击
所在节点    Docker
2 条回复
zro
2020-12-06 14:23:37 +08:00
用 Docker 调试网络方面,实在是太蛋疼了。。
qq296015668
2021-02-07 14:54:03 +08:00
经过测试,VMware 虚拟机需要像文中这样操作,但是 Hyper-V 只需要开启地址转发

firewall-cmd --add-masquerade --permanent
firewall-cmd --reload

然后重启 docker 即可

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

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

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

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

© 2021 V2EX