docker配置macvlan网络模式

配置macvlan网络模式实现macvlan与host网络互通,及互通服务自启动

简单来说就是使用macvlan网络模式的docker容器,可以看作是局域网内的一个独立设备,它会有一个独立的内网IP。
每个macvlan下的docker容器,都有自己一套完整的端口可用,不会互相冲突。
来说,macvlan最大的优点就是可以和宿主机配置为不同网关,方便网络分流。
当然如果是其他网络拓扑模式的同学,也可以通过macvlan来给每个容器分配好IP,方便通过IP分流管理。

打开Open vSwitch


首先进入-控制面板-网络-网络界面-管理-Open vSwitch 设置-打开Open vSwitch

Open vSwitch就是虚拟交换机。可以简单这样理解,docker容器接入这台交换机,就可以连上你的路由器,相当于一台手机or平板or盒子接入你家网络。

查看NAS网卡情况


确认打开Open vSwitch开关以后,我们进入SSH控制台
输入
ip addr
查看NAS网卡情况 确认Open vSwitch功能是否打开



图中列出了NAS的所有网卡,其中有一个ovs_eth0的网口,对应NAS物理网口信息。
这个网口就是开启了Open vSwitch以后的联网网口。如果你的联网网口是其他口(eth),这里的ovs_eth也可能不一样,自行注意。
等会创建macvlan网络需要使用这个端口,一定记好,不要搞错。

查看docker的网络详情

输入

docker network ls

查看docker的网络详情

目前默认只有三种网络模式


如果已经有driver为macvlan的docker网络,可以执行

docker network rm name
来进行删除,name为macvlan网络实际名称,即图上的NAME栏参数。

创建自定义macvlan网络


确认docker网络中没有macvlan网络,我们再进行下一步。
创建自定义macvlan网络。
创建命令很简单,和创建docker容器类似


我这里内网网段是
192.168.1.0/24
主路由网关
192.168.1.3
旁路由网关
192.168.1.5

我的目的是让qB和TR不经过旁路由网关,直接走主路由网关,所以要把macvlan的网关设置成 192.168.1.3

创建macvlan网络命令

仅ipv4

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.3 -o parent=ovs_eth1 name

ipv4&ipv6双栈

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.3 --ipv6 --subnet=2008::/60 --gateway=2008::1  -o parent=ovs_eth1 name

docker network create -d macvlan #指定创建的网络类型是macvlan

--subnet=192.168.1.0/24 #macvlan的ipv4网段,这里写你的内网网段即可。

--gateway=192.168.1.3 #macvlan的ipv4网关,这里写您需要容器走的网关。

--ipv6 #启用ipv6支持

--subnet=2408::/60 #macvlan的ipv6前缀

--gateway=2408::1 #macvlan的ipv6网关

-o parent=ovs_eth1 #桥接网络走的是ovs_eth0接口,如果你的接口不是这个,请自行更改。

name #macvlan网络的名称


参数怎么填大家按照自己实际需求情况


这里给个参考

docker network create -d macvlan --subnet=11.0.0.0/24 --gateway=11.0.0.1 --ipv6 --subnet=2408:825c:900:xxxx::/60 --gateway=2408:825c:900:xxxx::1  -o parent=ovs_eth0 IP03


创建了一个名为GGGGG(名字随意,你喜欢就可以)的ipv4&ipv6双栈macvlan网络。


创建完成以后可以再次输入 docker network ls 检查是否创建成功
也可以打开docker的webui,检查网络信息


macvlan网络创建成功以后,我们就可以使用它来创建具体容器了


容器创建指定ipdocker命令

docker run -dit \
--net=IP03 \
--ip=192.168.1.80 \
--name clash \
-v /volume1/docker/clash/config.yaml:/root/.config/clash/config.yaml \
-p 8890:7890 \
--privileged=true \
--restart always \
dreamacro/clash


--net=clash #为容器使用名为clash的docker网络模式
--ip=192.168.1.80 #指定容器IP
其余部分跟普通创建容器一致


创建其他容器只要 --net 配置为macvlan网络名称即可,大家自行举一反三
创建成功以后可以看到macvlan网络模式下有三个容器

查看docker ip

docker exec -it 891a6784b ip addr


以上就是如何创建macvlan网络模式,以及如何创建依赖于macvlan网络docker容器的方法


一般在macvlan模式下同网段的其他机器可以和容器互通,但宿主不能和容器互通,这是在macvlan模式设计的时候为了安全而禁止了宿主机和容器直接通信。

打个比方就是你用host模式创建的青龙面板,默认情况下是访问不了ping不通macvlan模式下的clash客户端的,反之也一样。

让macvlan与macvlan之间可以互通


如果想要实现互通,有个曲线救国的方法,就是macvlan与macvlan之间可以互通,只需要在宿主机再创建一个macvlan网络,然后修改路由,让数据经过这个macvlan达到互通的目的。

假设现有网段为192.168.1.0/24的网络:

名字ip接口
宿主机192.168.1.10eth0
容器192.168.1.20macvlan

建立一个名为macvlan2macvlan接口,并分配一个ip:

名字ip接口
macvlan2192.168.1.15macvlan

命令:

ip link add macvlan2 link eth0 type macvlan mode bridge
ip addr add 192.168.1.15 dev macvlan2
ip link set macvlan2 up

修改路由,让宿主机到容器(192.168.1.20)的数据经过macvlan2:

ip route add 192.168.1.20 dev macvlan2

宿主机 访问 容器的ip:
192.168.1.20

容器 访问 宿主机ip:
192.168.1.15

最后修改:2023 年 02 月 14 日
如果觉得我的文章对你有用,别忘了点赞或赞赏,让我知道路上有你陪伴。