創(chuàng)作立場聲明:折騰了許久的 unraid 容器 IPv6,記錄一下學習過程遇到的一些問題以及解決方案,希望能對值友有所幫助.
NOTE
本文字數(shù) 3300+,配圖 26,預(yù)估閱讀時間 7 ~ 9 分鐘
如之前的文章介紹,unraid 本身開啟 ipv6 還是比較簡單
先在 MAIN 頁面停掉 Array 磁盤陣列后
在 SETTINGSS - Network Settings 設(shè)置 IPv4 + IPv6 即可
之前的文章因篇幅原因,對 unraid 的 ipv6 細節(jié)沒有展開來講,
本文講介紹 Unraid 容器的 IPv6 配置,并以 Transmission 為例進行演示:
如果有一定的基礎(chǔ),并且趕時間的話,推薦僅看本部分內(nèi)容即可
后續(xù)的內(nèi)容會比較啰嗦,介紹了一堆基礎(chǔ)知識以及踩過的坑,僅為記錄
如何在 Unraid 下配置 Transmission 支持 IPv6:
關(guān)閉路由器的 DHCPv6 服務(wù)只保留路由通告服務(wù)
迫使 unraid 僅用 SLAAC 申請 IPv6,以保證 br0 類型的 docker 可分配 IPv6
修改 Transmission 容器網(wǎng)絡(luò)類型為 Custom:br0
確保 Transmission 的配置支持 IPv6
對端端口綁定 IPv6:'bind-address-ipv6': '::'
RPC 端口綁定 IPv6:'rpc-bind-address': '::'
路由器開放 Transmission 的對端端口、RPC 端口的白名單支持從外網(wǎng)訪問
如果配置正確,就可以在支持 Transmission 通過 IPv6 上傳下載、外網(wǎng)訪問管理
Unraid 為 docker 默認提供了 4 種網(wǎng)絡(luò)類型
其實就是 docker 網(wǎng)絡(luò)類型的知識,簡單介紹一下 docker 的 5 種網(wǎng)絡(luò)類型:
網(wǎng)絡(luò)類型 | 說明 | 使用場景 |
---|---|---|
none | 只有 lo 回環(huán)網(wǎng)卡,封閉的網(wǎng)絡(luò) | 不需要網(wǎng)絡(luò)的容器,保證容器的安全性 |
host | 使用宿主網(wǎng)絡(luò),性能好 | 沒有網(wǎng)絡(luò)隔離,不能復用宿主已使用端口 |
bridge | 保證容器間、容器與宿主間網(wǎng)絡(luò)隔離 | 適用大部分場景,通過端口映射暴露服務(wù) |
container | 和指定的容器共享網(wǎng)絡(luò) | unraid 界面不提供這種網(wǎng)絡(luò)模式 |
custom | 自定義網(wǎng)絡(luò),unraid 提供物理橋接 | 可以分配與宿主同網(wǎng)絡(luò)的 IP |
通過前面的配置,已經(jīng)可以為 Unraid 分配 IPv6
基于此,就可以通過將容器設(shè)置為 host
網(wǎng)絡(luò)類型以共享宿主的 IPv6
這種類型的容器,可以直接利用宿主網(wǎng)絡(luò)進行通信
在內(nèi)網(wǎng)時,可以直接通過 Nas 的 IPv4 地址 10.0.0.2
訪問
在外部網(wǎng)絡(luò)時,也可以通過 Nas 的 IPv6 地址來訪問(4G 網(wǎng)絡(luò)):
當然,為了方便,肯定還是需要配置好 DDNS 通過 IPv6 域名來訪問
如前面介紹,Unraid 提供了類似物理橋接的 Custom:br0
網(wǎng)絡(luò)類型
通過這種方式,我們可以讓容器獲取到與宿主同個子網(wǎng)的網(wǎng)絡(luò)地址
如上圖,Nas 分配的 IP 是通過主路由分配的 10.0.0.2
而 br0
網(wǎng)絡(luò)類型的容器可以分配到同個子網(wǎng)的 10.0.0.4
Custom:br0
是橋接到 br0 物理網(wǎng)橋:
由主路由分配 IP,與 Nas 宿主處于同個子網(wǎng) 10.0.0.0/24
雖然與 Nas 通過一根網(wǎng)線連接到路由,但在路由看來是兩個獨立的設(shè)備
Bridge
(容器默認網(wǎng)絡(luò)模式)是橋接到 docker0 虛擬網(wǎng)橋
從 docker0 子網(wǎng)分配一個 IP 給容器使用:172.17.0.0/16
容器的網(wǎng)關(guān)被設(shè)為 docker0 172.17.0.1
容器與 Nas 處于不同子網(wǎng),與外網(wǎng)通信需要由 docker0 進行 NAT 地址轉(zhuǎn)換
以一個 br0 類型的容器為例(需要路由器關(guān)閉 DHCPv6,下文會有介紹)
進入到這個 br0
網(wǎng)絡(luò)類型的容器,可以看到已經(jīng)分配 v4、v6 雙棧 IP
同時,IPv6 已經(jīng)是公網(wǎng) IPv6,可以直接在外網(wǎng)進行訪問(只要防火墻放開)
Unraid 在開啟 ipv6 支持后,默認可獲取到兩個公網(wǎng) ipv6 地址:
這兩個地址分別是:
128 位的 ipv6 地址是通過 DHCPv6 獲取到的
64 位的 ipv6 地址是通過 SLAAC 獲取到的
當然這個的前提是你的路由器固件開啟了路由通告服務(wù)及DHCPv6服務(wù)
這里可能會有人想直接通過 DHCPv6 給 Unraid 指定 IPv6 的后綴
來獲取更高的可讀性,比如 運營商分配的前綴::2
但是很遺憾,在 openwrt 這個方式行不通:
openwrt 分配的 IPv6 后綴和客戶機的 DUID 是對應(yīng)的
openwrt 改不了客戶機的 DUID,也不能直接指定客戶機的 IPv6
比如我為 Nas 分配了固定的 IPv6 后綴
但實際上獲取到的還是跟之前的一致,也就是 ::2a2
后綴
DUID 為 DHCPv6 設(shè)備的唯一 ID,用于標識不同的客戶端
但所幸 DUID 是基本不變的,通過 DHCPv6 獲取到的 IPv6 其后綴也是不變的
并且在實際測試中,當路由器開啟了 DHCPv6 服務(wù)之后,
設(shè)置為 br0
網(wǎng)絡(luò)模式的容器也無法分配到 IPv6 地址,需要關(guān)閉路由 DHCPv6 服務(wù)
猜測是 Unraid 的 br0 第一個 IPv6 地址為 DHCPv6 分配的 /128
地址
之后 Unraid 上重新獲取 IP 后可以看到顯示的 IPv6 變成 /64
的地址
所幸目前大部分支持 IPv6 的設(shè)備都支持 SLAAC 模式,對應(yīng)路由通告服務(wù)
且 DHCPv6 并沒有得到很好的普及,比如 Android 就不支持 DHCPv6
所以關(guān)閉了 DHCPv6 對于目前使用上基本沒啥影響(至少從我使用情況)
Transmission 主要是調(diào)整兩個監(jiān)控端口支持 IPv6:
Peer Port:用于上傳下載數(shù)據(jù)
RPC Port:管理端口,一般會提供 WebUI 進行管理
這兩個參數(shù)被定義在 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
修改為 ::
以開啟雙棧支持(需徹底退出重啟)
如上面介紹,針對 Transsmission 容器有兩種方式來支持 IPv6:
網(wǎng)絡(luò)類型 | 配置說明 |
---|---|
Host | 配置簡單,存在端口沖突風險,與宿主不存在網(wǎng)絡(luò)隔離存在安全風險 |
Custom | 需屏蔽 DHCPv6,與宿主網(wǎng)絡(luò)隔離,不需要考慮端口沖突問題 |
需要注意,這兩種方式,都不需要 Nas 進行 NAT,所以網(wǎng)絡(luò)性能基本差不多
我個人比較建議是使用 Custom 網(wǎng)絡(luò)模式,隔離網(wǎng)絡(luò)
另外,也支持固定 IP 配置;默認留空,則由 Docker 自行申請
從 Unraid 論壇的帖子來看 IPV6 NOT WORKING
Docker 并不是使用 SLAAC 的方式來獲取 IPv6 地址,而是按順序
比如網(wǎng)關(guān)是 ::1
,則第一個 br0 網(wǎng)絡(luò)類型的 docker 分配到 ::2
但從我的情況來看,實際上 Docker 獲取到兩個 IPv6 地址:
第一個比較長的是通過 EUI-64 地址轉(zhuǎn)換獲取
第二個比較短的,就是符合上面帖子的情況,按順序分配
通過 MAC 地址進行 EUI64 轉(zhuǎn)換:2409:****:****:****:42:aff:fe00:3/64
路由器防火墻默認限制 IPv6 轉(zhuǎn)發(fā),需要配置開啟對應(yīng)端口允許外部訪問
在路由管理后臺 網(wǎng)絡(luò) - 防火墻 - 流量規(guī)則 頁面新建轉(zhuǎn)發(fā)規(guī)則并編輯
建議修改 Transmission 這兩個默認端口,同時一定要開啟 RPC 的密碼認證
目前運營商都已經(jīng)支持 IPv6 環(huán)境,日常使用上基本是沒有問題
最高的下載速度也能跑到 3OMB/s 下載,基本算接近 300M 寬帶的實際上限
在外網(wǎng)也可通過 IPv6 訪問管理頁面進行操作,比如已經(jīng)支持 IPv6 的手機 4G 網(wǎng)絡(luò)
就可以實現(xiàn)在外部通過瀏覽器、 APP(TransmissionRemote) 來進行下載操作等
當然,你要問和 IPv4 比起怎么樣?
—— 有公網(wǎng) IPv4 誰還來折騰這鬼東西??