运营商:中国电信
路由器:X86软路由,ikuai系统,3.6.0
网络环境:IPv4 & IPv6双动态公网IP地址
一、SSH连接至群晖,输入ip a,查看网卡名称
kenny@Diskstation-zjg:~$ ip a
6: ovs_bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1
link/ether 00:11:32:e9:fd:f9 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.23/24 brd 10.10.10.255 scope global ovs_bond0
valid_lft forever preferred_lft forever
inet6 fc00:b84:f70b:1::e6e/128 scope global
valid_lft forever preferred_lft forever
inet和inet6分别对应的是nas的ipv4地址和ipv6地址,正确ipv4地址对应的ovs_bond0就是需要的网卡名称,记住备用。
二、查看运营商给我们分配的ipv6地址前缀是什么(以安徽电信为例)
1、以我的网络设备和环境为例,主路由也就是负责拨号的路由上面,我用的是ikuai系统,进入网络设置,下翻找到ipv6设置
2、在ikuai的ipv6设置内,右边内网ipv6地址就包含有需要的前缀
以我获取到的地址240e:361:46d6:4910::1001/60为例,macvlan网络需要的前缀就是240e:361:46d6:4910::
三、返回群晖SSH,开始创建macvlan网络并分配ipv6地址
docker network create -d macvlan -o parent=ovs_bond0 6Net --subnet=10.10.10.0/24 --ip-range=10.10.10.200/29 --gateway=10.10.10.2 --ipv6 --subnet=240e:361:46d6:4910::1/64
详细解析:
1、-d macvlan
指定创建的网卡所用驱动程序为macvlan,保持不变即可。
2、-o parent=ovs_bond0
指定父接口为NAS实际的网卡名称,也就是第一步中ip a获取到的网卡名称,替换ovs_bond0为你自己的网卡名称即可。
3、6Net
是macvlan网络的名称,名称可以自定义,但不能缺少这一块内容,可以直接命名为macvlan
4、--subnet=10.10.10.0/24
指定macvlan网卡的子网,根据实际情况替换修改即可。
5、--ip-range=10.10.10.200/29
指定macvlan网卡的IP段及子网掩码,根据实际情况替换修改即可。
6、--gateway=10.10.10.2
指定macvlan网卡的网关地址,也就是主路由地址,如家里有其他路由或次级路由,则以实际情况为准替换即可。
7、--ipv6 --subnet=240e:361:46d6:4910::1/64
配置macvlan网卡的ipv6部分,subnet和ipv4部分一样是指定子网,240e:361:46d6:4910
这个部分是前面查到的本地ipv6前缀,以你实际查到的去替换即可,/64是v6部分的子网掩码,同样以各人实际情况进行替换,一般默认/64即可。
8、确认各项内容无误后,粘贴至群晖SSH运行即可。
四、macvlan网络成功创建后,在docker内创建容器指定网络至macvlan网卡即可。
1、容器启动后,可以在主路由端刷新查看是否有对应新IP地址的设备出现
2、也可以在终端内执行
root@Diskstation-zjg:~# docker network inspect 6Net
{
"Name": "6Net",
"Id": "520ced5fd86a0f38391782217ea98adf6da635fd76039e7adf74e4df460ba7e6",
"Created": "2022-01-08T22:56:18.489283715+08:00",
"Scope": "local",
"Driver": "macvlan",
"EnableIPv6": true,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.10.10.0/24",
"IPRange": "10.10.10.200/29",
"Gateway": "10.10.10.2"
},
{
"Subnet": "240e:361:46d6:4910::1/64"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"6a08fa7c79037818b66a86f670214eedb1558b1bb152d33475329253cd05190c": {
"Name": "linuxserver-qbittorrent1",
"EndpointID": "505854ece8c32a658ec961a2202d7d5137f0357e11f1581781f2594cc52d1695",
"MacAddress": "02:42:0a:0a:0a:c8",
"IPv4Address": "10.10.10.200/24",
"IPv6Address": "240e:361:46d6:4910::2/64"
}
},
"Options": {
"parent": "ovs_bond0"
},
"Labels": {}
}
]
"Containers": {}这个部分就是容器的参数,包括容器ID、名称,MAC地址,IPv4和IPv6地址。
3、群晖DSM7可能会出现docker套件内点击网络显示空白的情况,就需要在SSH内将已创建容器的网络部分从桥接host网卡转移至macvlan网卡
root@Diskstation-zjg:~# docker stop linuxserver-qbittorrent1
root@Diskstation-zjg:~# docker network connect 6Net linuxserver-qbittorrent1
root@Diskstation-zjg:~# docker start linuxserver-qbittorrent1
docker network connect macvlan网卡名称 容器名称
13 条评论
很有用,感谢博主。通过这个方法可以实现同一台群晖上不同的docker走不同的网关了。
不过ipv6地址dddd变化的问题,我这里也是有几率会失去v6连接
ipv6的问题没有很好的解决办法,我现在遇到失去v6连接的时候也只能删除macvlan之后重新创建一个
如果路由器支持,可以在pppoeclient中配置一下prefix hint尝试一下
问一下图形化 界面怎么给macvlan设置ipv6地址
目前我的群晖是DSM7,打开docker,网络,新增,按教程填入对应的地址、范围及网关即可。
大佬能教教怎么填写的吗?
你按教程一步步来就可以了
ipv6地址输入错误了怎么修改呀
删除docker网络之后重新创建。但是记得删除之前把已连接到docker网络的容器断开连接。
docker stop 容器名称/ID
docker network disconnect 网络名称 容器名称/ID
docker network rm 网络名称
docker network create ……
docker network connect 网络名称 容器名称/ID
好奇--ipv6 --subnet=aaaa:bbbb:cccc:dddd::/64这里,从运营商哪里获取到的IPv6(aaaa:bbbb:cccc:dddd::/64),abc还好,dddd可能会变,那下次dddd变了,通过macvlan的docker还能正确获取到IPv6吗?
还有你的开启macvlan的命令行,缺少了设置ipv6的网关的命令 --gateway=aaaa:bbbb:cccc:dddd::1。
目前测试dddd变化之后还能获取到IP地址,至于ipv6网关地址未指定的问题,暂时未发现有什么影响
不指定网关的话web页面docker页面会显示不出来网络
我的目前没有这个问题,一直都用着好好的,可能版本不一样?