运营商:中国电信
路由器: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网卡名称 容器名称
执行后再启动容器即可