路由与NAS 篇十二:移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南
创作立场声明:折腾了许久的 unraid 容器 IPv6,记录一下学习过程遇到的一些问题以及解决方案,希望能对值友有所帮助.
写在前面
NOTE
本文字数 3300+,配图 26,预估阅读时间 7 ~ 9 分钟
如之前的文章介绍,unraid 本身开启 ipv6 还是比较简单
先在 MAIN 页面停掉 Array 磁盘阵列后
在 SETTINGSS - Network Settings 设置 IPv4 + IPv6 即可
之前的文章因篇幅原因,对 unraid 的 ipv6 细节没有展开来讲,
本文讲介绍 Unraid 容器的 IPv6 配置,并以 Transmission 为例进行演示:
浓缩版
如果有一定的基础,并且赶时间的话,推荐仅看本部分内容即可
后续的内容会比较啰嗦,介绍了一堆基础知识以及踩过的坑,仅为记录
如何在 Unraid 下配置 Transmission 支持 IPv6:
关闭路由器的 DHCPv6 服务只保留路由通告服务
迫使 unraid 仅用 SLAAC 申请 IPv6,以保证 br0 类型的 docker 可分配 IPv6
修改 Transmission 容器网络类型为
Custom:br0
确保 Transmission 的配置支持 IPv6
对端端口绑定 IPv6:
"bind-address-ipv6": "::"
RPC 端口绑定 IPv6:
"rpc-bind-address": "::"
路由器开放 Transmission 的对端端口、RPC 端口的白名单支持从外网访问
如果配置正确,就可以在支持 Transmission 通过 IPv6 上传下载、外网访问管理
docker获取IPv6
Unraid 为 docker 默认提供了 4 种网络类型
其实就是 docker 网络类型的知识,简单介绍一下 docker 的 5 种网络类型:
网络类型 | 说明 | 使用场景 |
---|---|---|
none | 只有 lo 回环网卡,封闭的网络 | 不需要网络的容器,保证容器的安全性 |
host | 使用宿主网络,性能好 | 没有网络隔离,不能复用宿主已使用端口 |
bridge | 保证容器间、容器与宿主间网络隔离 | 适用大部分场景,通过端口映射暴露服务 |
container | 和指定的容器共享网络 | unraid 界面不提供这种网络模式 |
custom | 自定义网络,unraid 提供物理桥接 | 可以分配与宿主同网络的 IP |
Host网络类型
通过前面的配置,已经可以为 Unraid 分配 IPv6
基于此,就可以通过将容器设置为 host
网络类型以共享宿主的 IPv6
这种类型的容器,可以直接利用宿主网络进行通信
在内网时,可以直接通过 Nas 的 IPv4 地址 10.0.0.2
访问
在外部网络时,也可以通过 Nas 的 IPv6 地址来访问(4G 网络):
当然,为了方便,肯定还是需要配置好 DDNS 通过 IPv6 域名来访问
Custom网络类型
如前面介绍,Unraid 提供了类似物理桥接的 Custom:br0
网络类型
通过这种方式,我们可以让容器获取到与宿主同个子网的网络地址
如上图,Nas 分配的 IP 是通过主路由分配的 10.0.0.2
而 br0
网络类型的容器可以分配到同个子网的 10.0.0.4
Custom:br0
是桥接到 br0 物理网桥:
由主路由分配 IP,与 Nas 宿主处于同个子网
10.0.0.0/24
虽然与 Nas 通过一根网线连接到路由,但在路由看来是两个独立的设备
Bridge
(容器默认网络模式)是桥接到 docker0 虚拟网桥
从 docker0 子网分配一个 IP 给容器使用:
172.17.0.0/16
容器的网关被设为 docker0
172.17.0.1
容器与 Nas 处于不同子网,与外网通信需要由 docker0 进行 NAT 地址转换
以一个 br0 类型的容器为例(需要路由器关闭 DHCPv6,下文会有介绍)
进入到这个 br0
网络类型的容器,可以看到已经分配 v4、v6 双栈 IP
同时,IPv6 已经是公网 IPv6,可以直接在外网进行访问(只要防火墙放开)
unraid的IPv6
默认支持DHCPv6及SLAAC
Unraid 在开启 ipv6 支持后,默认可获取到两个公网 ipv6 地址:
这两个地址分别是:
128 位的 ipv6 地址是通过 DHCPv6 获取到的
64 位的 ipv6 地址是通过 SLAAC 获取到的
当然这个的前提是你的路由器固件开启了路由通告服务及DHCPv6服务
这里可能会有人想直接通过 DHCPv6 给 Unraid 指定 IPv6 的后缀
来获取更高的可读性,比如 运营商分配的前缀::2
但是很遗憾,在 openwrt 这个方式行不通:
openwrt 分配的 IPv6 后缀和客户机的 DUID 是对应的
openwrt 改不了客户机的 DUID,也不能直接指定客户机的 IPv6
比如我为 Nas 分配了固定的 IPv6 后缀
但实际上获取到的还是跟之前的一致,也就是 ::2a2
后缀
DUID 为 DHCPv6 设备的唯一 ID,用于标识不同的客户端
但所幸 DUID 是基本不变的,通过 DHCPv6 获取到的 IPv6 其后缀也是不变的
路由关闭DHCPv6服务
并且在实际测试中,当路由器开启了 DHCPv6 服务之后,
设置为 br0
网络模式的容器也无法分配到 IPv6 地址,需要关闭路由 DHCPv6 服务
猜测是 Unraid 的 br0 第一个 IPv6 地址为 DHCPv6 分配的 /128
地址
之后 Unraid 上重新获取 IP 后可以看到显示的 IPv6 变成 /64
的地址
所幸目前大部分支持 IPv6 的设备都支持 SLAAC 模式,对应路由通告服务
且 DHCPv6 并没有得到很好的普及,比如 Android 就不支持 DHCPv6
所以关闭了 DHCPv6 对于目前使用上基本没啥影响(至少从我使用情况)
Transmission支持IPv6
IPv6配置调整
Transmission 主要是调整两个监控端口支持 IPv6:
Peer Port:用于上传下载数据
RPC Port:管理端口,一般会提供 WebUI 进行管理
这两个参数被定义在 Transmission 配置目录下的 settings.json
Peer Port
对于比较新版本的 Transmission,Peer port 已默认开启 IPv6 支持:
如果还不行,请检查并加上这个配置: "bind-address-ipv6": "::"
RPC Port
Transmission 需要 3.0 版本之后才默认支持 RPC 绑定 IPv6 地址
更详细信息可以参考官方 Issue:Add IPv6 support for RPC server #59:
所以如果在使用小于 3.0 的版本,只能升级或者手动打补丁来支持
之后就可以修改配置 RPC 绑定的配置,默认为 "rpc-bind-address": "0.0.0.0"
需将上面配置项的值 0.0.0.0
修改为 ::
以开启双栈支持(需彻底退出重启)
Transmission网络类型选择
如上面介绍,针对 Transsmission 容器有两种方式来支持 IPv6:
网络类型 | 配置说明 |
---|---|
Host | 配置简单,存在端口冲突风险,与宿主不存在网络隔离存在安全风险 |
Custom | 需屏蔽 DHCPv6,与宿主网络隔离,不需要考虑端口冲突问题 |
需要注意,这两种方式,都不需要 Nas 进行 NAT,所以网络性能基本差不多
我个人比较建议是使用 Custom 网络模式,隔离网络
另外,也支持固定 IP 配置;默认留空,则由 Docker 自行申请
从 Unraid 论坛的帖子来看 IPV6 NOT WORKING
Docker 并不是使用 SLAAC 的方式来获取 IPv6 地址,而是按顺序
比如网关是 ::1
,则第一个 br0 网络类型的 docker 分配到 ::2
但从我的情况来看,实际上 Docker 获取到两个 IPv6 地址:
第一个比较长的是通过 EUI-64 地址转换获取
第二个比较短的,就是符合上面帖子的情况,按顺序分配
通过 MAC 地址进行 EUI64 转换:2409:****:****:****:42:aff:fe00:3/64
配置开启防火墙
路由器防火墙默认限制 IPv6 转发,需要配置开启对应端口允许外部访问
在路由管理后台 网络 - 防火墙 - 流量规则 页面新建转发规则并编辑
建议修改 Transmission 这两个默认端口,同时一定要开启 RPC 的密码认证
Transmission在IPv6环境使用体验
目前运营商都已经支持 IPv6 环境,日常使用上基本是没有问题
最高的下载速度也能跑到 3OMB/s 下载,基本算接近 300M 宽带的实际上限
在外网也可通过 IPv6 访问管理页面进行操作,比如已经支持 IPv6 的手机 4G 网络
就可以实现在外部通过浏览器、 APP(TransmissionRemote) 来进行下载操作等
当然,你要问和 IPv4 比起怎么样?
—— 有公网 IPv4 谁还来折腾这鬼东西??
永生的代价是沧桑
校验提示文案
值友2502165247
校验提示文案
麦克阿瑟_2009
校验提示文案
科技爱好
校验提示文案
值友6218324355
校验提示文案
值友5840766396
校验提示文案
二十九画生
校验提示文案
永生的代价是沧桑
校验提示文案
桀木
校验提示文案
香草薄荷qing
大佬帮了我,感谢!!
校验提示文案
NFspring
校验提示文案
落笔成酌
我现在全是host,挂了个unraid v6地址的ddns,然后通过端口访问不同容器
校验提示文案
东方秦兰
校验提示文案
二十九画生
校验提示文案
值友5725518393
校验提示文案
南宫飞逸
校验提示文案
南宫飞逸
校验提示文案
值友5725518393
校验提示文案
二十九画生
校验提示文案
二十九画生
校验提示文案
值友5840766396
校验提示文案
值友6218324355
校验提示文案
东方秦兰
校验提示文案
科技爱好
校验提示文案
落笔成酌
我现在全是host,挂了个unraid v6地址的ddns,然后通过端口访问不同容器
校验提示文案
NFspring
校验提示文案
香草薄荷qing
大佬帮了我,感谢!!
校验提示文案
桀木
校验提示文案
麦克阿瑟_2009
校验提示文案
值友2502165247
校验提示文案
永生的代价是沧桑
校验提示文案
永生的代价是沧桑
校验提示文案