跳转至

Docker与IPv6

背景介绍

随着 IPv6 的普及如今家用宽带基本上都是自带外网的 IPv6 资源的。IPv6 资源分发到每个家里可以理解是一个资源池,哪怕光猫下面连接路由器,路由器下面再接一些设备,也可以保证这些设备也获取到独立的公网 IPv6 地址。那么该如何充分利用这些 IPv6 资源呢?下面国光就简单介绍一下如何让群晖的 Docker 充分利用 IPv6 资源。

抛出问题

Docker 自带的 bridge 网桥默认是不支持 IPv6 的:

这就导致了我们下图传统方法通过 bridge 映射的 8443 和 8080 端口无法被 IPv6 网络访问,只能走 IPv4 网络:

从 DSM7 开始群晖官方也不建议我们去修改 Docker 的配置文件,而且考虑到 IPv6 的地址可能会发生变化,我们如果直接去编辑 Docker 配置文件,强开 IPv6 的话也并不是一个很优雅的方式。这里其实我们除了使用 host 网络类型,其实我们还有别的选择,就是自带的 Web Station 套件。

部署方式 优点 缺点
Host 网络类型 简答方便 不能灵活设置端口
Web Station 套件 有点繁琐 可灵活设置映射到宿主机的端口

下面国光来就来分别以实际演示一下这两张让 Docker 获取 IPv6 的方法在群晖系统中的实际应用。

系统介绍

下面就实战演示一下,如果使用群晖 NAS 搭建一些常用的系统,并配置 IPv6 网络正常访问。先来看看我们接下来要部署哪些系统吧:

这些是我的 NAS 目前安装的系统,个人觉得这些系统 NAS 上通过 Docker 部署还是很方便的,当然还有其他不错的服务也可以 Docker 部署,下面就不一一列举了:

镜像名 说明
jeessy/ddns-go 简单方便的动态解析工具,支持多个系统平台和多个云厂商
talebook/talebook 基于 Calibre 魔改的简约美观的个人图书管理系统
xhofe/alist 支持接管管理各大网盘的系统

ddns-go - 动态解析

ddns-go 默认的端口为 9876 端口,不会占用群晖 NAS 的 80 端口,而且 Linux 下的 Docker 也支持 host 类型的网络模式,ddns-go 官方也建议我们使用 Docker 来部署搭建:

Bash
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

默认大家都是有 Docker 基础的,国光简单解释一下几个参数的作用:

--restart=always:表示随 Docker 服务启动就开启自启这容器

--net=host :表示使用 host 网络,即和主机共享 IP,这样就可以获取到公网的 IPv6 地址

考虑到我的个人情况,国光将群晖本地的 /volume5/docker/ddns-go 文件夹挂载到 ddns-go 容器的 /root 目录下:

ddns-go 的使用非常简单,首先填写我们域名厂商的 AK 和 SK 即可:

因为国光的家庭带宽无公网的 IPv4,所以这里只开启 IPv6 地址:

  1. 一般来说通过网卡获取的 IPv6 地址要准确一点
  2. Domains 直接填写我们想要解析的 IPv6 地址即可,DDNS-GO 会自动带着我们的 AK 和 SK 去控制台帮我们添加解析记录

至此我们的操作就完成了,从 ddns-go 系统网页右侧也可以看到解析日志的一些细节:

然后我们就可以使用我们 ddns-go 解析配置的域名直接访问我们的群晖 NAS 系统了:

talebook - 图书管理

因为 talebook 默认的也是 80 端口,所以我们不能直接使用 host 网络类型直接部署了,如果我们使用传统 -p 桥接类的话:

Bash
-p <本机端口>:80

这样就会导致我们的容器无法使用 IPv6,只可以通过 IPv4 访问,这样就减少了很多便利性。所以接下来我们需要 Web Station 套件出场了。

首先选择 bridge 网络类型:

接着重点来了,这里选择「通过 Web Station 启动网页门户」,然后我们根据镜像开的端口数目,自己添加对应的端口,这里的 80 是容器本身预设的端口:

为了不用每次重启服务都要手动启动容器,我们这里还勾选了「启用自动重新启动」 。从下一步可以看出来我们的 80 端口会被b本地的 Web Station 进行管理:

根据 talebook 官方说明,我们添加一个本地的文件映射到容器的 /data 目录下:

接着会引导我们到 Web Station 继续配置端口:

选择「基于端口」的门户类型,然后将容器的 80 端口绑定到 NAS 的 8080 端口:

继续添加新的端口效果如下:

我们就可以使用上一小节的 DDNS IPv6 域名直接访问安装我们的 tablebook 图书管理系统了:

接来来追求完美我们新增 1 个 book 子域名,使用 DDNS IPv6 动态解析:

这样也可以使用 book 这个子域名来访问我们的图书管理系统:

alist - 网盘接管

同理其他系统搭建也是换汤不换药,国光我就不在啰里八嗦从盘古开天辟地开始讲了,下面只讲一下 alist 服务的关键操作。

还是通过「Web Station」来接管容器的 Web 端口:

然后根据官方文档,在高级设置配置变量:

添加共享文件夹映射到容器的 /opt/alist/data 目录:

第一次启动可以在日志里面查看默认密码:

然后就可以愉快的通过 IPv6 的 DDNS 使用 alist 啦:


最后更新: 2023-03-06