NAS 的 Docker 上部署了多个服务,如何通过 DDNS 将 IPv6 解析到子域名中?

9 小时 30 分钟前
 BOGU
条件:
1 、外网可以访问到内网的 IPv6 地址,防火墙已开启;
2 、每个 Docker 的容器可以获取到 ipv6 公网地址;



问题:
如何自动获取每一个容器的 IPv6 公网地址,并将其正确解析到对应的子域名中?


示例:
容器名:emby ,240e::1 ,emby.XXX.XXX > 240e::1
容器名:immich ,240e::2 ,immich.XXX.XXX > 240e::2
516 次点击
所在节点    NAS
15 条回复
lengrongec
9 小时 25 分钟前
容器网络配置应该选择 bridge 模式,不是 host 模式
FawkesV
9 小时 23 分钟前
反向代理
FawkesV
9 小时 17 分钟前
@FawkesV #2 忽略 理解错了 应该不得行
z7356995
9 小时 7 分钟前
我是这样部署的,因为 443 和 80 端口被封,所以 nas 里其实不同服务是通过端口来区分的,群晖里外网不同的端口进来可以只向不同的服务,开放一下不同的端口进好了,我是用 ddns-go 用 cloudflare 来自动 ipv6 地址的 ddns,, 一些程序如 transmisson 不支技 ipv6 就用群晖代理转发
z7356995
9 小时 6 分钟前
只要一个域名就好,这样不要配制那么多证书
coderZoe
8 小时 58 分钟前
这样不好吧,把 docker 容器也配公网 ip 是不是不安全?最好还是主机对外暴露一个 nginx 端口,nginx 通过域名转发到主机相应的服务上。
YamatoRyou
6 小时 32 分钟前
大致流程 (并不详尽):

宿主机部分 (通过以下步骤创建的接口默认不含 IPv4 地址):
- 创建一个网络接口, 父接口为宿主机的物理网卡;
```
ip link add <接口名称> link <父接口名称> type macvlan mode bridge
```
- 启动刚才创建的接口
```
ip link set <接口名称> up
```
- 添加路由条目, 主要用于宿主机本身与 Docker 容器的通信, 不影响来自其它机器的访问
```
ip -6 route add <地址块> dev <接口名称>
```

Docker 部分 (通过以下步骤创建的网络默认不含 IPv4 地址):
- 创建一个 macvlan 驱动的网络, 并为该网络分配一个合适大小的地址块;
```
docker network create \
-d macvlan \
--ipv6 \
--subnet=<地址块> \
--gateway=<位于地址块中的网关, 我的习惯是取该块中第 1 个地址> \
-o parent=<父接口> \
-o macvlanmode=bridge \
<网络名称>
```
- 有需求的容器连接到该网络, 并为每个容器分配一个在上述地址块范围内的地址;
docker network connect --ip6=<IPv6 地址, 必须位于地址块范围内, 我的习惯是最后 32 位随机生成> <网络名称> <容器名称>

用 docker inspect <容器名称> 获取容器的 IPv6 地址, 最后传递到 DDNS 相关脚本.

----
其它:
我自己的实例为网络分配了长度为 /96 的块.
在宿主机创建的接口于下次重启机器后消失.
edk24
2 小时 41 分钟前
我自己的方案:

软路由 openwrt 拨号,用 lucky 插件 ddns 更新 ipv6 域名绑定。 以及子域名反向代理。 以及端口转发等
TimPeake
2 小时 37 分钟前
我曾经也想这样。但是想想太复杂了 还是端口区分吧
idrunk
2 小时 34 分钟前
直接配置解析就行了,不过被禁的典型端口搞不定的,除非在客户端配置转发,如果你的服务是面向自己在外使用的,可以带端口使用
idrunk
2 小时 31 分钟前
哦,你是想用域名路由到指定服务,那可以用 nginx 等重定向请求到对应的容器啊
tsanie
1 小时 15 分钟前
我的方案是 docker 容器不获取 ipv6 ,群晖 ddns ,然后利用群晖自带 nginx 的反向代理,给不同 hostname 设置 proxy_pass 到不同容器服务开放的端口。

群晖 web 上操作反向代理有点啰嗦,可以在文件存储上写好.conf ,然后 ln 到/usr/local/etc/nginx/sites-enabled/,最后 synosystemctl reload nginx 一下就 ok 了

顺便 include /usr/syno/etc/www/certificate/system_default/cert.conf;还可以使用系统默认的证书配置,很方便。
f165af34d4830eeb
31 分钟前
其实 ipv6 地址用一个就够了,靠 nginx 之类的反代通过子域名区分再转发到容器监听的端口上。

主域名绑定 ddns ,子域名再 CNAME 到主域名上就行,这样对外只需要一个 ipv6 地址。
Kaiyuan
27 分钟前
脚本用前缀加容器 MAC 组合成 IP ,然后改 DNS ,我在路由器上是这样子做的,给设备加域名。
Yadomin
25 分钟前
跑一个 traefik 做反代就完了

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

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

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

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

© 2021 V2EX