NAS&Docker 篇五:【一文讲透】Docker容器使用IPv6网络的终极方案:搭建macvlan网络模式实现IPv4&IPv6双通
哈喽,小伙伴们!答应你们的事我来兑现了!
就在上篇教程文章中,我教大家怎么在Docker版的qBittorrent上开启IPv6为下载提速。其中有两个方案:一个是采用Host网络模式,一个是Portainer手动添加IPv6网络。
虽说那两种方案是目前最便捷的,但是都有弊端。Host网络因为和主机共有一个IP,后期随着我们NAS上搭建的服务越来越多,很有可能会造成端口冲突,而Portainer手动添加IPv6网络虽说可行,但是我通过这两天尝试,感觉这样添加的网络非常的不稳定,具体原因恕我不才,我也不知道为什么~
So,最终找到了一种适用于当前NAS上的Docker容器使用IPv6网络的终极方案,那就是:在Docker上搭建macvlan网络实现IPv4&IPv6双通!
关于什么是macvlan网络,这里我也不想多说(其实主要原因是太专业的知识俺也不资道~哈哈),有兴趣的请自行度娘。
我们只需要知道它其实就是相当于我们在NAS中虚拟出来了一张独立的物理网卡,并且它独立于NAS的IP,拥有自己独立的 mac 地址,这样的话,我们在这个网络模式下搭建的Docker容器就会和它共用IP,所以我们就不用担心端口会和NAS的IP端口发生冲突了~(不知道我说的够不够清楚?个人理解能力有限,表达能力也有限,你们将就看吧~)
PS:今天的教程不能直接抄作业,请务必根据你自己那边的实际情况来修改配置和命令!!!
macvlan网络模式的创建
🔺在NAS的网络环境中,Docker默认的就三种网络模式:
- bridge: 桥接模式 [默认网络模式]
- host: 主机模式
- none: 无网络模式 [不常用-测试用]
所以我们首先需要创建macvlan网络模式。
接下来的操作就需要远程终端SSH连接NAS了。至于SSH工具请自行解决,Putty,XShell,FinalShell等都可以,我个人使用的是FinalShell。
🔺使用SSH连接工具连接到NAS之后先改用管理员模式登录。直接输入命令“【sudo -i 】回车,提示输入密码,密码就是我们NAS的登录密码,输入的时候不会有显示,输入完成后直接点回车即可。当出现“root”的标识的时候(威联通是admin),说明我们现在就是管理员模式了。
不用管理员模式其实也行,主要是我个人习惯了管理员模式赋予的最大权限,避免了很多我也不知道的未知问题。
🔺然后输入命令【docker network ls】确认我们当前docker的网络详情。我这边还是之前说的默认三种网络模式,请确认你那边也是一样,最主要是没有macvlan网络。如果有请删掉重新配置。删除命令为【docker network rm XXXX】,XXXX是你那边的macvlan网络名字。
🔺接着输入命令【ifconfig】并回车查询当前网卡信息,会看到下面列出了很多网卡列表。
🔺那怎么确定那个是我们需要的信息呢?我们可以看到在列表中“eth0”上有个“inet addr:192.168.50.192”,而这个IP正好就是我们NAS的本地IP地址,所以“eth0”就是我们需要的网卡信息。
通过这个信息,我们可以得出以下结果:
- 接口名称:eth0(网卡接口)
- ipv4网段/网关:192.168.50.XXX(其实就是局域网的网段/网关)
- ipv6网段/网关:240e:XXXX:XXXX:XXXX(这里的ipv6需要用到Global前面的地址才是公网ipv6,下面一个fe80是内网ipv6地址,不需要)
🔺接着输入macvlan网络的创建命令:
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 --ipv6 --subnet=240e:XXXX:XXXX:XXXX::/60 --gateway=240e:XXXX:XXXX:XXXX::1 -o parent=eth0 macnet
下面对以上命令加以说明:
- docker network create -d macvlan #指定创建的网络类型是macvlan
- --subnet=192.168.50.0/24 #macvlan的ipv4网段,这里写你的内网网段即可,最后一位是0(/24默认不要动)
- --gateway=192.168.50.1 #macvlan的ipv4网关,最后一位是1(其实就是路由器的本地IP地址)
- --ipv6 #启用ipv6支持
- --subnet=240e:XXXX:XXXX:XXXX::/60 #macvlan的ipv6前缀::/60(前缀取公网ipv6前4个网段即可,最后的 /60 默认不要动)
- --gateway=240e:XXXX:XXXX:XXXX::1 #macvlan的ipv6网关(其实就是前缀前4个网段::1)
- -o parent=eth0 #桥接网络走的是eth0接口(也就是前面我们ifconfig命令得出的接口名称)
- macnet #macvlan网络的名称(我这里名称就叫做macnet,你那边可以随意更改)
这里顺便说下,如果你不启用ipv6,仅启用ipv4,只需要将—ipv6以及后面的ipv6的信息去掉即可,也就是:
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=eth0 macnet
🔺再次输入输入命令【docker network ls】检查以下,我们创建的macvlan虚拟网卡是否成功。
🔺因为我用的是华硕NAS,打开Portainer之后在它的网络列表中也能看到多出了一个我们创建的macvlan网络,名称macnet,且已经同时启用了IPv4&IPv6网络。
Docker容器使用IPv6网络实操
macvlan网络创建成功,我们就可以开始在该网络模式下搭建容器了!
用那个Docker容器来检测今天的教程效果呢?毫无疑问,当然是qBittorrent了!有了IPv6的加持,搭配最新的tracker,下载速度必然是满速“狂飙”。
🔺镜像我使用的是这位国内大佬的“国内优化版”,主要是它对某些“吸血BT”做了屏蔽(大家不要误会,没说是XL哈),并且内置tracker订阅地址,支持自动更新tracker,非常强大!
🔺先来看看大佬给出的配置命令。这个配置命令使用的网络模式是Docker默认的bridge,要想使用今天我们所说的macvlan网络模式,我们就不需要配置它的环境变量(-e)以及端口转发(-p),因为前面说过,macvlan网络其实是虚拟出来的一张独立的物理网卡,而环境变量(-e)以及端口转发(-p)都是在原宿主机(NAS)上的配置,并且两者默认是无法相通的,所以macvlan网络模式就用不上这些了。
🔺所以我们在去除环境变量(-e)以及端口转发(-p)之后,我们qBittorrent在macvlan网络下的搭建命令便为:
docker run -d --name=qbittorrentee --net=macnet --ip=192.168.50.10 -v /volume1/Docker/qbittorrent/config:/config -v /volume2/影视下载:/downloads --privileged=true --restart=always superng6/qbittorrentee:latest
再次解释下以上命令:
- -net=macnet #为qBittorrent容器使用名为macnet的网络模式(也就是我们创建的macvlan网络名称)
- --ip=192.168.50.10 #指定qBittorrent容器IP,前面说过macvlan网络独立于NAS的IP,这里指定一个内网内的其它任意IP即可)
- --privileged=true #赋予qBittorrent容器特权,免得意外退出了
其它就没什么好说了,-v 后面的挂载点根据自己NAS的实际路径自己更改哈!
🔺完成之后我们在Portainer的qBittorrent容器详情页面最下方查看连接的网络,可以看出它已经获取到了IPv4&IPv6的两个IP。
🔺直接登录qBittorrent的WEB页面看看效果吧!请注意,这里的登录IP地址一定要输入我们搭建命令中的指定IP,而不是宿主机(NAS)的IP,后面带上默认的端口8080。用户名和密码不用多说,默认的都是admin/adminadmin。
🔺进入WEB页面之后默认便是中文,首先开启镜像制作者内置的tracker订阅地址吧~
🔺可以看到,瞬间速度拉满的快感还是非常爽的,并且用户列表同时连接了IPv4,IPv6用户,说明我们的macvlan网络搭建是没有问题的~!
打通宿主机(NAS)和macvlan网络容器互访
这个一般是给特定使用场景的小伙伴学习吧,比如说nas-tools~~
前面说过,原宿主机(NAS)和当前macvlan网络下的容器采用的是相互独立的网卡,默认是无法相通(也是为了安全的考量),也就是无法访问的,怎么搞定这个问题呢?根据macvlan网络的特性,既然宿主机(NAS)和当前macvlan网络下的容器不能相同,但是macvlan网络与macvlan网络之间可以互通的,所以只需要用ip link手动再创一个macvlan网卡即可。
具体操作如下:
🔺我们只需要输入以下命令:
ip link add SMZDM link eth0 type macvlan mode bridge
ip addr add 192.168.50.50 dev SMZDM
ip link set SMZDM up
ip route add 192.168.50.10 dev SMZDM
命令的说明如下:
- ip link add SMZDM link eth0 type macvlan mode bridge #创建一个名为SMZDM的macvlan网卡接口(SMZDM可随意更改),eth0是我们前面获取到的宿主机(NAS)的物理接口
- ip addr add 192.168.50.50 dev SMZDM #指定SMZDM接口的IP为192.168.50.50,这个和前面设置的qBittorrent容器须在同一网段
- ip link set SMZDM up #启动SMZDM接口
- ip route add 192.168.50.10 dev SMZDM #让宿主机(NAS)到qBittorrent容器(指定的macvlan网络模式IP)经过SMZDM接口
🔺确认以下我们创建的SMZDM网卡接口是否生效。输入命令【ifconfig】就能看到列表中有SMZDM了。
🔺再输入命令【ip route show】查看路由表信息,可以看出qBittorrent容器(IP192.168.50.10)确实是经过我们创建的SMZDM网卡接口的。
🔺最后直接终端ping一下qBittorrent容器的IP,能ping通就说明是没有问题的!
不过这个方案还有一个很大的弊端,就是在设备重启后会失效,需要重新再配置一遍。具体怎么解决我目前还不知道怎么操作,希望有知道的大佬指导一下~
文章的最后说说今天折腾需要的NAS产品吧!毫无疑问,以上所有的配置和搭建都是在SSH远程终端完成的,所以目前也只有传统NAS才支持这个功能。
目前国内市场传统NAS也就三大家:群晖,威联通和华硕。而考虑到NAS目前升级的幅度基本都是“挤牙膏”模式(三大家都是一个德性),所以个人建议在选购的时候尽量一步到位,至少用5年以上还是没有问题的。
👉群晖DS920+
🔺虽说目前群晖主推新品DS923+,但我个人建议还是找合适的渠道上群晖DS920+吧,主要原因配置几乎一样,但920+更便宜吗,性价比更高!都是主流的4硬盘位产品,采用了intel 赛扬J4125 4核心处理器,为4核/4线程设计,原生搭载4GB DDR4内存,但支持扩展,尾部提供了双USB3.0,千兆LAN和eSATA,以及双92mm排气风扇。用来玩Docker、搭建虚拟机等应用没有任何问题。
👉威联通TS-464C
🔺威联通TS464C处理器采用Intel 赛扬N5095,有4个3.5英寸盘位和2个NVMe SSD盘位,支持Intel OpenVINO AI引擎,全方位提升AI算力,并且原生搭载usb3.2和HDMI2.0,这个对于玩虚拟机的小伙伴来说,直接搞定了直连的问题,还是非常实用的。
👉华硕AS6704T
🔺华硕AS6704T搭载Intel Celeron新一代N5105 10纳米四核心处理器,内置DDR4-2933 4GB双通道内存,拥有2个2.5G端口,四个M.2 PCie3.0(NVMe)SSD插槽,整体做工和配置都对得起华硕“阿苏斯”应有的品质!
以上三台机器也是本人目前把玩的三台NAS,个人觉得每台都不错,玩顺手之后用起来都挺方便的。只不过群晖被公司“高价”收购了,因为存的是公共资料,所以以后可能不会再随意折腾了,过段时间看情况,后期还是想玩玩”黑群“吧~~
好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,我会经常给大家分享各类有意思的软件和免费干货,咱们下期再见!谢谢大家~
杯具上演帝
校验提示文案
xsohydra2015
校验提示文案
小白在路上
校验提示文案
明显没睡醒
校验提示文案
Makvesky
校验提示文案
混凝土结构
校验提示文案
歪我是小爽啊
校验提示文案
清风静入夜
校验提示文案
林溪风
校验提示文案
fengpan584
校验提示文案
eMuzi
1.关于ipv6的网段,运营商隔一段时间会更改,不知有什么方法自适应没有?
2.关于宿主机与docker容器互通的那一部分,如果将代码写在go文件里是不是可以解决?
校验提示文案
爱自嗨的攻城狮
校验提示文案
tutu果酱
校验提示文案
弗老大
校验提示文案
值友4101817968
有个疑点,重启失效是指创建的这个网卡消失还是网卡里面的IPV6信息消失,是重启NAS还是重启网络
校验提示文案
风吹pp凉嗖嗖
校验提示文案
尧尧妈妈
校验提示文案
罗冠旗舰店
校验提示文案
悬崖2011
校验提示文案
啥都没有
校验提示文案
Makvesky
校验提示文案
原来折腾之心还没熄火
校验提示文案
明显没睡醒
校验提示文案
Policemen
校验提示文案
丶悠
校验提示文案
战斗大四哥
校验提示文案
evoc1278
校验提示文案
搞机之道
校验提示文案
值友已删除
校验提示文案
jardy129
校验提示文案
啥都没有
校验提示文案
悬崖2011
校验提示文案
罗冠旗舰店
校验提示文案
尧尧妈妈
校验提示文案
风吹pp凉嗖嗖
校验提示文案
值友4101817968
有个疑点,重启失效是指创建的这个网卡消失还是网卡里面的IPV6信息消失,是重启NAS还是重启网络
校验提示文案
弗老大
校验提示文案
tutu果酱
校验提示文案
爱自嗨的攻城狮
校验提示文案
eMuzi
1.关于ipv6的网段,运营商隔一段时间会更改,不知有什么方法自适应没有?
2.关于宿主机与docker容器互通的那一部分,如果将代码写在go文件里是不是可以解决?
校验提示文案