<br />
<br />
使用macvlan网络模式创建docker,使容器拥有独立ip,便于分流
适用场景:
因nas需要科学环境比如拉docker镜像、刮削等等,但是qb/tr又不想让他走科学,如何做到单独让qb、tr不走科学网络?常见的方法是使用旁路由的分流规则,比如openclash、passwall等或者爱快主路由上根据协议、域名分流等等,但是这种方法还是难免有一些流量偷走科学流量,如果docker容器可以有独立的ip,单独设置网关是最保险的措施。
经常使用的docker网络有bridge和host,本文介绍另一种:macvlan,本文可能不适用于小白,可以自己查看其他教程用web界面创建docker容器熟悉熟悉再来阅读本教程
准备工作:
1、飞牛1台,因飞牛不支持web界面创建,本文采用命令行创建
2、查看网卡名称,使用ifconfig或者ip addr命令,查看当前nas ip的网卡名称(如果开启了ovs,网卡名称则带_ovs):
3、主路由的ipv6模式改成无状态模式或者叫SLAAC,这样子可以保证ipv6地址前缀变化时容器跟着变化!
查看网卡时记得提权,sudo -i 密码是nas密码,盲输回车


创建macvlan网络:
例如V4:192.168.8.0/24 网关192.168.8.1 V6:随便填一个内网地址 ,可以参考我的 他会自动从宿主机获取v6
docker network create -d macvlan --subnet=192.168.8.0/24 --gateway=192.168.8.1 --ipv6 --subnet=fd00::/64 -o parent=ens7 macnet
#如开启了虚拟机ovs网络模式,此处应该是parent=ens7_ovs=
命令注释:
--subnet=家里V4子网网段
--gateway=家里V4不走科学环境的网关
--ipv6 --subnet=家里V6子网网段 跟我一样就行,这是个内网段,创建容器时会向父网卡dhcp获取真实ip
-o parent=nas网卡,也是macvlan 的父网卡
macnet 这个随意,就是macvlan网络的网卡名称,可以跟我一样


出现一段很长的英文数字组合就表示创建成功了,可以通过命令docker network ls 确认,也可以在web界面docker-网络中查看
创建容器(示例QB)
1、创建好qb配置文件目录,例如在docker文件夹下新建了qb这个文件夹,右键-详细信息-复制原始路径,是:/vol1/1000/docker/qb

2、再创建qb下载目录,同样的方法复制真实路径 是:/vol2/1000/download
docker run --name qbittorrent --network macnet -v /vol1/1000/docker/qb:/config -v /vol2/1000/download:/downloads --ip=192.168.8.29 --restart=always --privileged=true -d linuxserver/qbittorrent:latest
#容器不需要额外配置ipv6地址,会自动获取
命令注释:
--name=容器名称,随意就好,通过这个名字可以分辨哪些容器就行
--net=macnet macnet是上一步创建的macvlan网卡名称
--ip=192.168.8.29 ip地址根据实际情况更改
-v ****:/config 映射nas目录给docker容器,前面是刚刚复制原始路径,冒号后面是docker内目录名称,/config不能修改
-v ****:/downloads qb下载目录,同理,downloads如果修改,到时候web界面里面也要修改,最好不改
-v ****:/**** 如果你有其他目录也需要映射,自行添加,没有就跳过
--privileged=true 赋予容器最高特权,最好不改
--restart=always 重启策略:跟随nas启动docker容器
linuxserver/qbittorrent:latest 镜像名称,如果需要指定qb版本,把latest替换成具体版本号,比如linuxserver/qbittorrent:4.6.5
创建成功后依旧是一堆英文和数字组合:

可以ssh进容器输入ip addr查看是否有24开头的V6地址

进阶玩法
macvlan具有隔离特性,所以你所创建的macvlan容器是无法与其他docker容器或者nas本身进行通信的,比如你的Moviepilot无法关联qb/tr下载任务,你的iyuu无法通过qb辅助做种转种,如果不在意这个,下面的可以不用看了。
简单来说就是添加一张网卡做为路由中转
ip link add TTTTT link ens7 type macvlan mode bridge
#TTTTT为网卡名 随意就好,ens7网卡名称根据实际情况更改
ip addr add 192.168.8.222 dev TTTTT
#ip地址 设置一个你局域网其他不冲突的任何地址,不是QB也不是nas的!
ip link set TTTTT up
#启动网卡
ip route add 192.168.8.29 dev TTTTT
#添加路由,ip地址为qb地址,目的是使去往qb的流量网TTTTT这张网卡过

添加后docker容器就可以互相通信了,注意添加的路由重启会失效,评论区有解决方案,自行尝试
注意事项
创建容器时必须把所有目录设置好,创建好后不要去web界面更改设置,比如映射目录之类的,因为更改后qb的ip地址会变化且有可能跟你局域网其他地址冲突,如果需要修改目录,建议重新创建容器(此bug已反馈,等待修复,具体是:web页面编辑后,docker inspect的IPAMConfig信息丢失)