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

289 天前
 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 了)

4862 次点击
所在节点    DevOps
49 条回复
JensenQian
289 天前
前面放个 openwrt 的路由器
然后直接端口转发
Cabana
289 天前
我的解决方案
1. nginx 反代 ipv6 的流量到 docker 的 ipv4 端口
2. docker 的网络路由配置为 host
chenjia404
288 天前
2023 年了,docker 还不默认支持 ipv6
c1273082756
288 天前
openwrt+socat 转发即可
sadfQED2
288 天前
@c1273082756
@JensenQian 大佬,能否细说下,是在 openwrt ,网络->防火墙->端口转发这个地方设置吗。我对 openwrt 不太熟,这里的转发指的是啥?是指所以入站流量都转发吗?假设我需要把请求我 nas 123 端口的 v6 流量转发到 v4 的 123 端口,那我在这里配置”wan and wan6 123 端口 -> lan x.x.x.x 123 端口“ 这样吗? 他这个外部端口指的是对方发起连接的端口还是请求访问的端口呢? 另外,我这样转发,是不是把所有流量都转发了呀?比如请求我家里电脑的 123 端口的流量,也转发到 nas 了?
sadfQED2
288 天前
@Cabana nginx 转发跟我用 ha 转发都一样,挺麻烦的,还得多配一套东西。我不太想把服务部署到物理机上面,尽量都用 docker 维护,方便管理。

我容器网络已经设置成 host 了,依然没监听 v6 端口
hahasong
288 天前
docker 不需要单独开启实验性 v6 支持。一是你的服务要支持 v6 ,监听 0.0.0.0 或者[::]:0 这种格式。二是 docker run 的时候指定 --network host 直接使用你 host 的 ip 地址
villivateur
288 天前
我来帮你 @ ssh 大哥

@defunct9
Cabana
288 天前
@sadfQED2 #6 加了--network host 没道理不行的, 要么是你的服务本身就不支持 ipv6.
我的跑 pt 的 Transmission 就是这么跑在 docker 的.
150530
288 天前
我的 docker 没有开 v6 支持,安装的青龙使用-p 映射的端口,可以使用 ipv6 访问,问题应该在于你容器中的应用有没有监听::就和 v4 监听 0.0.0.0 一样,可以用 netstat -atn 查询一下
kaedeair
288 天前
那个 ipv6 是指容器内部的网络,正常使用搞个网关用 host 模式,根据域名分流就搞定了
ice920
288 天前
docker 没监听 v6 端口,不知道你的 NAS 是不是群晖,应该群晖 DSM6 和 7.2 才支持监听 v6 端口,也可以 -p 映射出来是使用,否则用 Host 网络模式获得 IPv6
OpenWrt 防火墙 - 通讯规则,开放 NAS 防火墙,限制地址:仅 IPv6 ,协议:TCP+UDP ,目标区域:LAN ,目标地址:::22cd/::ffff ,目标端口:8880 8443 (空格隔开)
zmcity
288 天前
需要任意端口入站,小规模部署——Host
需要任意端口入站,大规模部署——固定前缀+Docker 开 v6 支持 (家宽肯定搞不定固定前缀)
只需要指定端口入站——Docker 端口转发
只需要指定端口入站,但希望局域网内可以用 v6 地址访问——Docker 端口转发+EUI 前缀+Docker 开 v6 支持。

家用的话,像 PT 这种应用直接 Host 模式搞起,还能直接用 nas 的 ddns 访问。
sadfQED2
288 天前
@hahasong 我用的 docker compose ,我查了,说现在还不支持 v6
sadfQED2
288 天前
@ice920 我是 dsm6.2..3
zayia
288 天前
用的软路由里面的 lucky
ddns 可以直接将 ipv6 和 ipv4 绑定固定域名
然后端口映射后就可以 ipv6 访问容器
ttimasdf
288 天前
敢把 NAS 直接放公网上,你也是头铁。

docker network 最大的作用就是做隔离和 NAT ,你不让人家做 NAT 你不是把它活给抢了。所以对于开发者来说做 ipv6 support 没必要。本来 docker 环境做 firewall rule 就麻烦,现在还想在上面整花活……更没必要了

上面提 openwrt + socat 的,都 openwrt 了直接从防火墙配置里端口转发梭一下就完事了,还整啥 socat ,还得手写个 init script 麻烦的要死。

要我说,防火墙和访问控制是个极麻烦的东西,无论是 openwrt 的 fw4 生成还是手写 iptables ,都需要经验,既然你又没经验,我建议就在前面套个 openwrt ,openwrt 上装个 vpn ,openvpn 还是 softether 还是什么 swan 的,随便啥都行,这样攻击面就减小到 vpn 的暴露端口,用 softether 的 vpn over dns/icmp 你甚至一个端口都不用开,里面 NAS 你想 expose 多少个端口都没问题。

如果不懂,就全部无脑 gui ,openwrt 有 luci ,openvpn 和 strongswan 在 openwrt 上也有 gui ,softether 有个独立管理软件。搞什么 haproxy socat 甚至还有说 nginx 的,真的,不懂就别上。那才是真真正正增加管理难度的
sadfQED2
288 天前
@ttimasdf 兄弟,你先别急,咱就说,有没有可能,我说可能,我 vpn 是通过 docker 安装在 nas 上面的,我现在就是需要把端口暴露到公网上。
JensenQian
288 天前
@sadfQED2 #5
我么看懂楼主的需求
楼主是要外面 v6 也能访问你 ddns 家里的 docker 吗
网络防火墙那边可以,我 lede 的固件没法用这个转发,装了个 socat
外部访问啊就直接 ddns 的域名:端口就行
[img][/img]
不过这样子很不安全,我的建议是你搞个 openvpn 或者 wireguard 回家然后访问
leonshaw
288 天前
还得做 NAT ,不光是 docker 的问题,IPv6 就没想明白公私域怎么解耦

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

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

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

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

© 2021 V2EX