移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

2021-04-14 15:47:13 36点赞 198收藏 33评论

创作立场声明:折腾了许久的 unraid 容器 IPv6,记录一下学习过程遇到的一些问题以及解决方案,希望能对值友有所帮助.

写在前面

NOTE
本文字数 3300+,配图 26,预估阅读时间 7 ~ 9 分钟

如之前的文章介绍,unraid 本身开启 ipv6 还是比较简单

路由与NAS 篇九:大内网宽带入坑小记——修改光猫桥接并配置IPv6实现外网访问NAS创作立场声明:本文仅用于记录这次尝试移动宽带桥接及IPv6相关配置,实现通过外网访问路由器及NAS,方便后续翻查,也给感兴趣的值友一定的参考NOTE本文字数4500+,配图30+,预估阅读时间9~12分钟写在前面最近忙搬家,欠的文章都还没补充,又入了一个移动宽带的新坑。这次趁机记录一下方便后续翻查,丶Source| 314 评论267 收藏2k查看详情

先在 MAIN 页面停掉 Array 磁盘阵列

SETTINGSS - Network Settings 设置 IPv4 + IPv6 即可

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

之前的文章因篇幅原因,对 unraid 的 ipv6 细节没有展开来讲,

本文讲介绍 Unraid 容器的 IPv6 配置,并以 Transmission 为例进行演示:

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

浓缩版

如果有一定的基础,并且赶时间的话,推荐仅看本部分内容即可
后续的内容会比较啰嗦,介绍了一堆基础知识以及踩过的坑,仅为记录

如何在 Unraid 下配置 Transmission 支持 IPv6:

  1. 关闭路由器的 DHCPv6 服务只保留路由通告服务

  2. 迫使 unraid 仅用 SLAAC 申请 IPv6,以保证 br0 类型的 docker 可分配 IPv6

  3. 修改 Transmission 容器网络类型为 Custom:br0

  4. 确保 Transmission 的配置支持 IPv6

  • 对端端口绑定 IPv6:"bind-address-ipv6": "::"

  • RPC 端口绑定 IPv6:"rpc-bind-address": "::"

路由器开放 Transmission 的对端端口、RPC 端口的白名单支持从外网访问

如果配置正确,就可以在支持 Transmission 通过 IPv6 上传下载、外网访问管理

docker获取IPv6

Unraid 为 docker 默认提供了 4 种网络类型

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

其实就是 docker 网络类型的知识,简单介绍一下 docker 的 5 种网络类型:

网络类型说明使用场景
none只有 lo 回环网卡,封闭的网络不需要网络的容器,保证容器的安全性
host使用宿主网络,性能好没有网络隔离,不能复用宿主已使用端口
bridge保证容器间、容器与宿主间网络隔离适用大部分场景,通过端口映射暴露服务
container和指定的容器共享网络unraid 界面不提供这种网络模式
custom自定义网络,unraid 提供物理桥接可以分配与宿主同网络的 IP

Host网络类型

通过前面的配置,已经可以为 Unraid 分配 IPv6

基于此,就可以通过将容器设置为 host 网络类型以共享宿主的 IPv6

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

这种类型的容器,可以直接利用宿主网络进行通信

在内网时,可以直接通过 Nas 的 IPv4 地址 10.0.0.2 访问

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

在外部网络时,也可以通过 Nas 的 IPv6 地址来访问(4G 网络):

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

当然,为了方便,肯定还是需要配置好 DDNS 通过 IPv6 域名来访问

Custom网络类型

如前面介绍,Unraid 提供了类似物理桥接的 Custom:br0 网络类型

通过这种方式,我们可以让容器获取到与宿主同个子网的网络地址

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

如上图,Nas 分配的 IP 是通过主路由分配的 10.0.0.2

br0 网络类型的容器可以分配到同个子网的 10.0.0.4

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

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,下文会有介绍)

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

进入到这个 br0 网络类型的容器,可以看到已经分配 v4、v6 双栈 IP

同时,IPv6 已经是公网 IPv6,可以直接在外网进行访问(只要防火墙放开)

unraid的IPv6

默认支持DHCPv6及SLAAC

Unraid 在开启 ipv6 支持后,默认可获取到两个公网 ipv6 地址:

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

这两个地址分别是:

  1. 128 位的 ipv6 地址是通过 DHCPv6 获取到的

  2. 64 位的 ipv6 地址是通过 SLAAC 获取到的

当然这个的前提是你的路由器固件开启了路由通告服务DHCPv6服务

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

这里可能会有人想直接通过 DHCPv6 给 Unraid 指定 IPv6 的后缀

来获取更高的可读性,比如 运营商分配的前缀::2

但是很遗憾,在 openwrt 这个方式行不通:

  1. openwrt 分配的 IPv6 后缀和客户机的 DUID 是对应的

  2. openwrt 改不了客户机的 DUID,也不能直接指定客户机的 IPv6

比如我为 Nas 分配了固定的 IPv6 后缀

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

但实际上获取到的还是跟之前的一致,也就是 ::2a2 后缀

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

DUID 为 DHCPv6 设备的唯一 ID,用于标识不同的客户端

但所幸 DUID 是基本不变的,通过 DHCPv6 获取到的 IPv6 其后缀也是不变的

路由关闭DHCPv6服务

并且在实际测试中,当路由器开启了 DHCPv6 服务之后,

设置为 br0 网络模式的容器也无法分配到 IPv6 地址,需要关闭路由 DHCPv6 服务

猜测是 Unraid 的 br0 第一个 IPv6 地址为 DHCPv6 分配的 /128 地址

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

之后 Unraid 上重新获取 IP 后可以看到显示的 IPv6 变成 /64 的地址

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

所幸目前大部分支持 IPv6 的设备都支持 SLAAC 模式,对应路由通告服务

且 DHCPv6 并没有得到很好的普及,比如 Android 就不支持 DHCPv6

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

所以关闭了 DHCPv6 对于目前使用上基本没啥影响(至少从我使用情况)

Transmission支持IPv6

IPv6配置调整

Transmission 主要是调整两个监控端口支持 IPv6:

  • Peer Port:用于上传下载数据

  • RPC Port:管理端口,一般会提供 WebUI 进行管理

这两个参数被定义在 Transmission 配置目录下的 settings.json

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

Peer Port

对于比较新版本的 Transmission,Peer port 已默认开启 IPv6 支持:

如果还不行,请检查并加上这个配置: "bind-address-ipv6": "::"

RPC Port

Transmission 需要 3.0 版本之后才默认支持 RPC 绑定 IPv6 地址

更详细信息可以参考官方 Issue:Add IPv6 support for RPC server #59

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

所以如果在使用小于 3.0 的版本,只能升级或者手动打补丁来支持

之后就可以修改配置 RPC 绑定的配置,默认为 "rpc-bind-address": "0.0.0.0"

需将上面配置项的值 0.0.0.0 修改为 :: 以开启双栈支持(需彻底退出重启)

Transmission网络类型选择

如上面介绍,针对 Transsmission 容器有两种方式来支持 IPv6:

网络类型配置说明
Host配置简单,存在端口冲突风险,与宿主不存在网络隔离存在安全风险
Custom需屏蔽 DHCPv6,与宿主网络隔离,不需要考虑端口冲突问题

需要注意,这两种方式,都不需要 Nas 进行 NAT,所以网络性能基本差不多

我个人比较建议是使用 Custom 网络模式,隔离网络

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

另外,也支持固定 IP 配置;默认留空,则由 Docker 自行申请

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

从 Unraid 论坛的帖子来看 IPV6 NOT WORKING

Docker 并不是使用 SLAAC 的方式来获取 IPv6 地址,而是按顺序

比如网关是 ::1,则第一个 br0 网络类型的 docker 分配到 ::2

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

但从我的情况来看,实际上 Docker 获取到两个 IPv6 地址:

  • 第一个比较长的是通过 EUI-64 地址转换获取

  • 第二个比较短的,就是符合上面帖子的情况,按顺序分配

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

通过 MAC 地址进行 EUI64 转换:2409:****:****:****:42:aff:fe00:3/64

配置开启防火墙

路由器防火墙默认限制 IPv6 转发,需要配置开启对应端口允许外部访问

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

在路由管理后台 网络 - 防火墙 - 流量规则 页面新建转发规则并编辑

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

建议修改 Transmission 这两个默认端口,同时一定要开启 RPC 的密码认证

Transmission在IPv6环境使用体验

目前运营商都已经支持 IPv6 环境,日常使用上基本是没有问题

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

最高的下载速度也能跑到 3OMB/s 下载,基本算接近 300M 宽带的实际上限

移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

在外网也可通过 IPv6 访问管理页面进行操作,比如已经支持 IPv6 的手机 4G 网络

就可以实现在外部通过浏览器、 APP(TransmissionRemote) 来进行下载操作等

当然,你要问和 IPv4 比起怎么样?

—— 有公网 IPv4 谁还来折腾这鬼东西??移动大内网如何愉快玩耍Transmission——Unraid容器IPv6实战指南

展开 收起
33评论

  • 精彩
  • 最新
  • 🐂ipv6还能这么玩,另辟蹊径呀

    校验提示文案

    提交
    现在 ipv6 算是比较普及了,而且资源多不需要nat,都是给公网,就可以有得玩了

    校验提示文案

    提交
    收起所有回复
  • 直接用host网络不就可以连上ipv6了吗,我就是这么用的

    校验提示文案

    提交
    这样没有网络隔离

    校验提示文案

    提交
    收起所有回复
  • 我的nas黑裙能获取到公网ipv6 但是我访问不了,同样路由也获取到IPv6,我就能访问,路由防火墙我直接关了的

    校验提示文案

    提交
    感觉要么是路由器防火墙没处理好,要么就是nas获取到的ipv6有问题

    校验提示文案

    提交
    是不是还需要转发什么的

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • DUID在哪里找?

    校验提示文案

    提交
    [皱眉] 太久远了,有点忘记了

    校验提示文案

    提交
    收起所有回复
  • 解决了大难题,网络改host直接就可以访问docker了

    校验提示文案

    提交
    这是最简单的方式哈哈

    校验提示文案

    提交
    收起所有回复
  • 现在遇到一个坑爹的问题,unraid docker双栈模式下,transmission会出现只上报ipv6地址,不上报v4地址的情况,刚安装好的时候还上报了v4地址,某天重启后发现真的不上报v4地址了,至今不知道如何处理

    校验提示文案

    提交
    [傻笑] 这个还真没遇到过,这个上报也是看 tracker 支持的协议栈吧..所以大部分是上报 IPv4..

    校验提示文案

    提交
    收起所有回复
  • 折腾半天,爱快貌似只有DHCPv6模式,没有路由通告……有+无状态,unraid 也是获取到俩v6地址。然后docker还是没办法自动获取v6,突发奇想手动用给的前缀给qb设置了一个v6地址,它现在也有俩v6了……哈哈不知道这个会不会变

    校验提示文案

    提交
    理论上应该都支持的,不然安卓不支持 dhcpv6 就获取不到 ipv6 地址了,可能 ikuai 不支持自定义配置吧

    校验提示文案

    提交
    我找到原因了…docker服务启动时虚拟的软路由还没启动,导致后面路由器起来容器也没v6,必须把整个docker服务重启,就好了,好坑

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 🐂ipv6¥

    校验提示文案

    提交
  • 路由器只有一个ipv6开或关的选项,打开后所有设备都暴露在公网,有办法让unraid只对部分docker分配ipv6地址吗?

    校验提示文案

    提交
  • “默认为 "rpc-bind-address": "0.0.0.0"需将上面配置项的值 0.0.0.0 修改为 :: 以开启双栈支持”
    大佬帮了我,感谢!!

    校验提示文案

    提交
  • s佬牛皮zsbd

    校验提示文案

    提交
  • 小米路由器没有v6端口转发,新一点的有v6防火墙,全关之后如果用cusrom:br0获取v6的话,是不是就没法做ddns了呀 [大囧]
    我现在全是host,挂了个unraid v6地址的ddns,然后通过端口访问不同容器 [喜极而泣] [喜极而泣]

    校验提示文案

    提交
  • bind-address-ipv4删掉的话是不是就可以只用ipv6上传下载了

    校验提示文案

    提交
  • 嘿嘿,终于找到教程啦,我就说为毛br0的qb docker 拿不到v6地址,原来是dhcpv6的锅,一会回去就折腾,谢谢大佬!

    校验提示文案

    提交
  • ipv6普及p很多资源还是v4,统计v6的网站又少了一堆

    校验提示文案

    提交
  • 救命之恩啊,终于有人讲了和路由器设置相关的问题了。v6获取分配都没问题,台式机直接v6RDC也可以,可是docker死活外网连接不了。原来是要在路由器里面开口子。幸好和大佬一样用的是openwrt。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
198
扫一下,分享更方便,购买更轻松