ipv6 访问 docker 最优雅的姿势是啥?

2023-07-25 09:34:28 +08:00
 sadfQED2

背景:我自己家里的 nas ,有 ipv6 ,没有公网 ipv4 ,在外想通过 ipv6 访问容器内的服务。

问题:netstat 命令看了下,docker 只监听了 v4 端口,没监听 v6 端口。

查到的方案:

1.https://docs.docker.com/config/daemon/ipv6/ 开启 docker 的 ipv6 ,但这踏马竟然是实验性功能??? docker 这么成熟的东西,ipv6 的支持竟然还在实验?而且他这个支持,并不是我需要的,他这个是给每个容器分配不同的 ipv6 ,外网通过容器 ip 访问。那我人在外,我踏马怎么知道容器 ip 是多少啊

2.通过 haproxy 转发一下,把 ipv6 端口流量转到 v4 端口上,增加了架构复杂度,以后维护麻烦。

因此上来问问各种运维大哥,有没有什么优雅一点的姿势啊。

@ssh 大哥(不记得你 id 了)

7187 次点击
所在节点    DevOps
49 条回复
lentrody
2023-07-25 19:05:15 +08:00
你用的什么 DDNS ? docker 的 IPv6 地址是 EUI64 生成的固定后缀吗?
如果是固定后缀那么就可以通过任意一个地址的前缀拼接得到其他所有设备的完整地址,有些 DDNS 服务商比如 dynv6 可以自动这样拼接地址并关联到子域名。
whetherTsmile
2023-07-25 22:05:43 +08:00
docker 只监听了 v4 端口,没监听 v6 端口
你可以看下 io 和 docker0 端口有没有 inet6 ,然后看下 net.ipv6.conf.lo.disable_ipv6 开了没
neroxps
2023-07-25 22:25:28 +08:00
@sadfQED2 dsm 7 已经支持了吧 dsm 6.2 内核是不支持 ipv6 nat 。用工具转发或是路由 66nat 吧
iceheart
2023-07-26 07:16:31 +08:00
同意 #40 用 lxc+lxd 就完了,哪有这么多事
wheat0r
2023-07-26 10:33:00 +08:00
可以通过 docker compose 指定网络和容器的 ipv6 子网信息,但是你似乎没有办法让容器自动获取 RA 出来的地址。所以如果你的 ipv6 地址是运营商给的、每次拨号会变的地址,那就不用折腾了。
vicv
2023-07-26 11:39:49 +08:00
我和你的使用情景是一样的,移动有公网 IPv6 没有公网 IPv4 。我是群晖 NAS ,我的做法是这样的:光猫开启桥接模式,让主路由器进行拨号,这样的话路由器下的设备都可以拿到 IPv6 地址(这里其实有安全风险,但是一般很少人会扫描 IPv6 网络)。群晖的 docker 配置中启用 IPv6 支持,创建一个新的 docker 网络并使用 docker 的 macvlan 驱动桥接到群晖的物理网卡,然后使用了这个网络创建的容器就相当于在直接连接到路由器上的一个设备,可以获得路由器分配的一个内网 IPv4 地址以及公网的 IPv6 地址(不需要 IPv6 的容器不使用这个 docker 网络就可以了)。然后使用 jeessy/ddns-go 这个 docker 镜像来对容器的 IPv6 地址做 ddns 解析,然后在外网就可以愉快地通过域名访问内网的 IPv6 服务了。
yzkos
2023-07-26 15:06:22 +08:00
我群晖现在就是通过 ipv6 访问的,但是完全没有配置过 ipv6 这些东西,只要 nas 有 ipv6 公网,开放的端口 ipv6 就能访问到。

群晖 docker 软件界面有两个网络 bridge 和 host ,
如果你的容器使用 bridge 用 ipv6 是访问不了的,可以在控制面板-》 synology 应用程序门户-》反向代理服务器,添加一个新的端口号对 docker 的端口反代就可以用 ipv6 访问了。例如 docker 映射端口是 5244 ,在反向代理里面新增一个 5243 反代到 http://localhost:5244 ,使用 ipv6:5243 就能公网访问了。
如果是使用 host 里面就能 ipv6 加端口直接访问。

我的两个里面显示都是 ipv6 已禁用,不耽误外网直接访问。
tsanie
2023-07-26 16:51:35 +08:00
我的也是,群晖本身有 IPv6 ,没有修改过 docker 配置,网络里面 IPv6 都是 Disabled ,有些服务比如 gitea 用自带的反代到 localhost 映射出来的端口,有些服务比如 aria 设置的--network=host ,这些服务都能走外部由 IPv6 访问,例如手机流量。

办公室没有 IPv6 就走的 zerotier 虚拟组网,另外又弄了个 cloudflare tunnel 作为备用线路。
ttimasdf
2023-07-26 17:42:24 +08:00
好吧,我们分类讨论

要解决你的需求,你既然容器里有 vpn 了,你也通过 vpn 访问,那直接把需要访问的容器拉个子网,通过 alias 访问即可

要回答你的问题,非得暴露 ipv6 的话,SO 说行,https://serverfault.com/a/1054917

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

https://yangjunhui.monster/t/959423

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

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

© 2021 V2EX