精华内容
下载资源
问答
  • macvlan

    2018-08-21 16:50:38
    http://cizixs.com/2017/02/14/network-virtualization-macvlan ***linux 网络虚拟化: macvlan http://network.51cto.com/art/201409/450885.htm ***vlan
    展开全文
  • Macvlan与IPvlan

    2021-02-08 11:17:31
    本文主要就macvlan和ipvlan的工作模式以及差异做简要介绍;同时,为便于形象的理解,还会涉及到一些实际操作命令。 macvlan 这里的macvlan是linux kernel提供的一种network driver类型,它有别于传统交换机上提供的...

    本文主要就macvlan和ipvlan的工作模式以及差异做简要介绍;同时,为便于形象的理解,还会涉及到一些实际操作命令。

    macvlan

    这里的macvlan是linux kernel提供的一种network driver类型,它有别于传统交换机上提供的mac based vlan功能。可以在linux命令行执行lsmod | grep macvlan 查看当前内核是否加载了该driver;如果没有查看到,可以通过modprobe macvlan来载入,然后重新查看。

    如果要查看内核源码,可以到以下路径:/drivers/net/macvlan.c

    工作模式

    • Bridge:属于同一个parent接口的macvlan接口之间挂到同一个bridge上,可以二层互通(经过测试,发现这些macvlan接口都无法与parent接口互通)。
    • VPEA:所有接口的流量都需要到外部switch才能够到达其他接口。
    • Private:接口只接受发送给自己MAC地址的报文。

    三种模式之间的差异,可以通过下图形象的理解:
    在这里插入图片描述

    实验时间

    下面的实验创建了两个macvlan接口,分别放到两个netns中;然后验证这两个macvlan口之间客户互通。

    先使用bridge mode创建两个macvlan接口,其parent接口都是enp0s8。

    # ip link add link enp0s8 name macv1 type macvlan mode bridge
    # ip link add link enp0s8 name macv2 type macvlan mode bridge
    

    查看创建的结果(注意每个接口都有自己的mac地址):

    # ip link 
    3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
        link/ether 08:00:27:31:1a:5d brd ff:ff:ff:ff:ff:ff
    7: macv1@enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1
        link/ether 06:95:37:0c:83:36 brd ff:ff:ff:ff:ff:ff
    8: macv2@enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1
        link/ether a2:e1:f1:e9:95:18 brd ff:ff:ff:ff:ff:ff
    

    创建网络命名空间,并将接口加入进来,并通过dhcp server来分配IP地址:

    # ip net add net-1
    # ip net add net-2
    
    # ip link set macv1 netns net-1
    # ip link set macv2 netns net-2
    
    # ip net exec net-1 ip addr add 10.0.2.18/24 dev macv1
    # ip net exec net-2 ip addr add 10.0.3.19/24 dev macv2
    

    发现macv1 ping不通宿主机接口enp0s8的地址:

    # ip net exec net-1 ping 10.0.2.19
    PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
    ^C
    --- 10.0.2.15 ping statistics ---
    4 packets transmitted, 0 received, 100% packet loss, time 3008ms
    

    但是可以ping通macv2的地址:

    # ip net exec net-1 ping 10.0.2.17
    PING 10.0.2.17 (10.0.2.17) 56(84) bytes of data.
    64 bytes from 10.0.2.17: icmp_seq=1 ttl=64 time=0.043 ms
    64 bytes from 10.0.2.17: icmp_seq=2 ttl=64 time=0.052 ms
    64 bytes from 10.0.2.17: icmp_seq=3 ttl=64 time=0.052 ms
    

    ipvlan

    下面介绍ipvlan接口,它也是linux kernel的一个network driver,具体代码见内核目录:/drivers/net/ipvlan/。与macvlan不同的是,macvlan是通过MAC查找macvlan设备,而ipvlan是通过IP查找ipvlan设备。

    可以思考一下,ipvlan接口和直接在eth0上添加多个ip address的效果有什么区别?

    工作模式

    应用kernel-docs的一句话来介绍这两种模式的差异性:

    • l2: the slaves will RX/TX multicast and broadcast (if applicable) as well.
    • l3: the slaves will not receive nor can send multicast / broadcast traffic.

    形象的理解见下图:
    在这里插入图片描述

    实验时间

    以下实验分别创建了两个ipvlan接口,并放到两个netns中;ipvlan可以配置到不同的网段,它们彼此之间通过内部路由能够互访。

    另外,L2 mode时,ipvlan接口能够接收到二层广播和组播报文;而L3 mode时,ipvlan接口不再处理所有二层报文。实验通过tcpdump抓ARP包的方式来验证该特性差异,通过实验,我们对ipvlan的两种模式应该有比较形象的理解。

    L3 mode实验

    创建两个ipvlan接口,都是使用l3mode;查看其mac地址都等同于其parent接口的mac地址:

    # ip link add link enp0s3 ipvlan1 type ipvlan mode l3
    # ip link add link enp0s3 ipvlan2 type ipvlan mode l3
    
    # ip addr
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 08:00:27:d7:d6:a9 brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
           valid_lft 86193sec preferred_lft 86193sec
        inet6 fe80::c6bb:4c9:37e8:7ac2/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
    7: ipvlan1@enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 08:00:27:d7:d6:a9 brd ff:ff:ff:ff:ff:ff
    8: ipvlan2@enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 08:00:27:d7:d6:a9 brd ff:ff:ff:ff:ff:ff
    

    创建网络命名空间,并将接口放进命名空间:

    # ip net add net-1
    # ip net add net-2
    
    # ip link set ipvlan1 netns net-1
    # ip link set ipvlan2 netns net-2
    

    由于MAC地址一样,因此无法通过dhclient来分配IP地址,只能手动配置:

    # ip net exec net-1 ip addr add 10.0.2.18/24 dev ipvlan1
    # ip net exec net-2 ip addr add 10.0.3.19/24 dev ipvlan2
    

    添加默认路由

    # ip net exec net-1 route add default dev ipvlan1
    # ip net exec net-2 route add default dev ipvlan2
    

    可以ping通另一个namespace中的ipvlan接口(它们位于不同的网段中)

    # ip net exec net-2 ping 10.0.2.18
    PING 10.0.2.18 (10.0.2.18) 56(84) bytes of data.
    64 bytes from 10.0.2.18: icmp_seq=1 ttl=64 time=0.072 ms
    64 bytes from 10.0.2.18: icmp_seq=2 ttl=64 time=0.048 ms
    ^C
    --- 10.0.2.18 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.048/0.060/0.072/0.012 ms
    

    此时,在对端接口上抓不到ARP报文,说明二层广播和组播都不处理,工作在L3

    # ip net exec net-1 tcpdump -ni ipvlan1 -p arp
    
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ipvlan1, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    无法ping通父接口enp0s3的IP

    # ip net exec net-1 ping 10.0.2.15
    PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
    ^C
    --- 10.0.2.15 ping statistics ---
    97 packets transmitted, 0 received, 100% packet loss, time 96106ms
    

    L2 mode实验

    通L3mode类似,实验流程不再过多介绍:

    # ip link add link enp0s3 ipvlan1 type ipvlan mode l2
    # ip link add link enp0s3 ipvlan2 type ipvlan mode l2
    
    # ip net add net-1
    # ip net add net-2
    
    # ip link set ipvlan1 netns net-1
    # ip link set ipvlan2 netns net-2
    
    # ip net exec net-1 ip link set ipvlan1 up
    # ip net exec net-2 ip link set ipvlan2 up
    
    # ip net exec net-1 ip addr add 10.0.2.18/24 dev ipvlan1
    # ip net exec net-2 ip addr add 10.0.3.18/24 dev ipvlan2
    
    # ip net exec net-1 route add default dev ipvlan1
    # ip net exec net-2 route add default dev ipvlan2
    
    # ip net exec net-1 ip link set ipvlan1 up
    # ip net exec net-2 ip link set ipvlan2 up
    
    # ip net exec net-2 ip link set lo up
    # ip net exec net-1 ip link set lo up
    

    与L3 mode不通的是,发现可以抓取到ARP报文(二层广播)

    # ip net exec net-1 tcpdump -ni ipvlan1 -p arp
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ipvlan1, link-type EN10MB (Ethernet), capture size 262144 bytes
    21:06:27.461824 ARP, Request who-has 10.0.3.18 tell 10.0.2.18, length 28
    21:06:27.461818 ARP, Request who-has 10.0.2.18 tell 10.0.3.18, length 28
    21:06:27.461842 ARP, Reply 10.0.2.18 is-at 08:00:27:d7:d6:a9, length 28
    21:06:27.461845 ARP, Reply 10.0.3.18 is-at 08:00:27:d7:d6:a9, length 28
    

    原文链接:https://www.dazhuanlan.com/2019/12/12/5df17e01243b0/

    展开全文
  • <div><p>The macvlan is initially created in a separate network namespace and the sysctl must be set in that namespace too. <p>Fixes #208.</p><p>该提问来源于开源项目:containernetworking/cni</p>...
  • Macvlan技术

    2021-02-08 10:11:14
    1、Macvlan 简介 在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会...

    1、Macvlan 简介

    在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些“网卡”的 MAC 地址和 ethx 都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作。有了 Macvlan 技术,你可以这么做了。

    Macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 interface 有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。Macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。Macvlan 和 Bridge 比较相似,但因为它省去了 Bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,Macvlan 自身也完美支持 VLAN。

    同一 VLAN 间数据传输是通过二层互访,即 MAC 地址实现的,不需要使用路由。不同 VLAN 的用户单播默认不能直接通信,如果想要通信,还需要三层设备做路由,Macvlan 也是如此。用 Macvlan 技术虚拟出来的虚拟网卡,在逻辑上和物理网卡是对等的。物理网卡也就相当于一个交换机,记录着对应的虚拟网卡和 MAC 地址,当物理网卡收到数据包后,会根据目的 MAC 地址判断这个包属于哪一个虚拟网卡。==这也就意味着,只要是从 Macvlan 子接口发来的数据包(或者是发往 Macvlan 子接口的数据包),物理网卡只接收数据包,不处理数据包,所以这就引出了一个问题:本机 Macvlan 网卡上面的 IP 无法和物理网卡上面的 IP 通信!==关于这个问题的解决方案我们下一节再讨论。

    我们先来看一下 Macvlan 技术的流程示意图:
    在这里插入图片描述
    简单来说,Macvlan 虚拟网卡设备是寄生在物理网卡设备上的。发包时调用自己的发包函数,查找到寄生的物理设备,然后通过物理设备发包。收包时,通过注册寄生的物理设备的 rx_handler 回调函数,处理数据包。

    2、 Macvlan vs Bridge

    说到 Macvlan,就不得不提 Bridge,因为你可以把 Macvlan 看成一个简单的 Bridge。但他们之间还是有很大的区别的。

    Bridge

    Bridge 实际上就是一种旧式交换机,他们之间并没有很大的差别。Bridge 与交换机的区别在与市场,而不在与技术。交换机对网络进行分段的方式与 Bridge 相同,交换机就是一个多端口的网桥。确切地说,高端口密度的 Bridge 就称为局域网交换机。
    在这里插入图片描述
    Bridge 有以下特点:

    • Bridge 是二层设备,仅用来处理二层的通讯。
    • Bridge 使用 MAC 地址表来决定怎么转发帧(Frame)。
    • Bridge 会从 host 之间的通讯数据包中学习 MAC 地址。
    • 可以是硬件设备,也可以是纯软件实现(例如:Linux Bridge)。

    以下是一个在 Linux 主机上,多个 VM 使用 bridge 相互通讯的状况:
    在这里插入图片描述
    Linux 主机中可以通过命令行工具 brctl 来查看 Bridge 的配置,该工具可以通过安装软件包 bridge-utils 来获得。

    $ brctl show
    
    bridge name  bridge id          STP enabled  interfaces
    br0          8000.080006ad34d1  no           eth0
                                                 veth0
    br1          8000.080021d2a187  no           veth1
                                                 veth2
    

    Bridge 有可能会遇到二层环路,如有需要,你可以开启 STP 来防止出现环路。

    Macvlan

    Macvlan 有以下特点:

    • 可让使用者在同一张实体网卡上设定多个 MAC 地址。
    • 承上,带有上述设定的 MAC 地址的网卡称为子接口(sub interface);而实体网卡则称为父接口(parent interface)。
    • parent interface可以是一个物理接口(eth0),可以是一个 802.1q 的子接口(eth0.10),也可以是 bonding 接口。
    • 可在parent/sub interface 上设定的不只是 MAC 地址,IP 地址同样也可以被设定。
    • sub interface无法直接与 parent interface 通讯 (带有 sub interface 的 VM 或容器无法与 host 直接通讯)。
    • 承上,若 VM 或容器需要与 host 通讯,那就必须额外建立一个 sub interface 给 host 用。
    • sub interface 通常以 mac0@eth0 的形式来命名以方便区別。

    用张图来解释一下设定 Macvlan 后的样子:
    在这里插入图片描述

    3. Macvlan 的工作模式

    Macvlan 共支持四种模式,分别是:

    VEPA(Virtual Ethernet Port Aggregator)

    在这里插入图片描述
    在 VEPA 模式下,所有从 Macvlan 接口发出的流量,不管目的地全部都发送给父接口,即使流量的目的地是共享同一个父接口的其它 Macvlan 接口。在二层网络场景下,由于生成树协议的原因,两个 Macvlan 接口之间的通讯会被阻塞,这时需要上层路由器上为其添加路由(需要外部交换机配置 Hairpin 支持,即需要兼容 802.1Qbg 的交换机支持,其可以把源和目的地址都是本地 Macvlan 接口地址的流量发回给相应的接口)。此模式下从父接口收到的广播包,会泛洪给 VEPA 模式的所有子接口。

    现在大多数交换机都不支持 Hairpin 模式,但 Linux 主机中可以通过一种 Harpin 模式的 Bridge 来让 VEPA 模式下的不同 Macvlan 接口通信(前文已经提到,Bridge 其实就是一种旧式交换机)。怎么配置呢?非常简单,通过一条命令就可以解决:

    $ brctl hairpin br0 eth1 on
    

    或者使用 iproute2 来设置:

    $ bridge link set dev eth0 hairpin on
    

    如果你的内核是你手工编译升级的,那么可能你的用户态程序并不支持新内核对应的所有特性,也就是说你的 brctl 可能版本过老不支持 hairpin 命令,那么可以 sysfs 来搞定:

    $ echo 1 >/sys/class/net/br0/brif/eth1/hairpin_mode
    

    在 Linux 主机上配置了 Harpin 模式之后,源和目的地址都是本地 Macvlan 接口地址的流量,都会被 br0(假设你创建的 Bridge 是 br0)发回给相应的接口。
    在这里插入图片描述
    如果想在物理交换机层面对虚拟机或容器之间的访问流量进行优化设定,VEPA 模式将是一种比较好的选择。

    VEPA 和 Passthru 模式下,两个 Macvlan 接口之间的通信会经过主接口两次:第一次是发出的时候,第二次是返回的时候。这样会影响物理接口的宽带,也限制了不同 Macvlan 接口之间通信的速度。如果多个 Macvlan 接口之间通信比较频繁,对于性能的影响会比较明显。

    Bridge

    在这里插入图片描述
    此种模式类似 Linux 的 Bridge,拥有相同父接口的两块 Macvlan 虚拟网卡是可以直接通讯的,不需要把流量通过父网卡发送到外部网络,广播帧将会被泛洪到连接在"网桥"上的所有其他子接口和物理接口。这比较适用于让共享同一个父接口的 Macvlan 网卡进行直接通讯的场景。

    这里所谓的 Bridge 指的是在这些网卡之间,数据流可以实现直接转发,不需要外部的协助,这有点类似于 Linux host 内建了一个 Bridge,即用 brctl 命令所做的那一切。但和 Linux bridge 绝不是一回事,它不需要学习 MAC 地址,也不需要 STP,因此效能比起使用 Linux bridge 好上很多。

    Bridge 模式有个缺点:如果父接口 down 掉,所有的 Macvlan 子接口也会全部 down 掉,同时子接口之间也将无法进行通讯。

    Private

    在这里插入图片描述
    此种模式相当于 VEPA 模式的增强模式,其完全阻止共享同一父接口的 Macvlan 虚拟网卡之间的通讯,即使配置了 Hairpin 让从父接口发出的流量返回到宿主机,相应的通讯流量依然被丢弃。具体实现方式是丢弃广播/多播数据,这就意味着以太网地址解析 arp 将不可运行,除非手工探测 MAC 地址,否则通信将无法在同一宿主机下的多个 Macvlan 网卡间展开。之所以隔离广播流量,是因为以太网是基于广播的,隔离了广播,以太网将失去了依托。

    Passthru

    在这里插入图片描述
    此种模式会直接把父接口和相应的MacVLAN接口捆绑在一起,这种模式每个父接口只能和一个 Macvlan 虚拟网卡接口进行捆绑,并且 Macvlan 虚拟网卡接口继承父接口的 MAC 地址。

    此种模式的优点是虚拟机和容器可以更改 MAC 地址和其它一些接口参数。

    4. Macvlan 和 Bridge 的使用场景

    最后我们再来讨论一下 Macvlan 和 Bridge 的各自使用场景。

    使用 Macvlan:

    • 仅仅需要为虚拟机或容器提供访问外部物理网络的连接。
    • Macvlan 占用较少的 CPU,同时提供较高的吞吐量。
    • 当使用 Macvlan时,宿主机无法和 VM 或容器直接进行通讯。

    使用 Bridge:

    • 当在同一台宿主机上需要连接多个虚拟机或容器时。
    • 对于拥有多个网桥的混合环境。
    • 需要应用高级流量控制,FDB的维护。

    5. Macvlan 的局限性

    Macvlan 是将 VM 或容器通过二层连接到物理网络的近乎理想的方案,但它也有一些局限性:

    • Linux 主机连接的交换机可能会限制同一个物理端口上的 MAC地址数量。虽然你可以让网络管理员更改这些策略,但有时这种方法是无法实行的(比如你要去给客户做一个快速的 PoC 演示)。
    • 许多 NIC也会对该物理网卡上的 MAC地址数量有限制。超过这个限制就会影响到系统的性能。
    • IEEE 802.11 不喜欢同一个客户端上有多个 MAC地址,这意味着你的 Macvlan 子接口在无线网卡或 AP中都无法通信。可以通过复杂的办法来突破这种限制,但还有一种更简单的办法,那就是使用 Ipvlan,感兴趣可以自己查阅相关资料。

    6. 总结

    本文主要介绍了 Macvlan 的实现原理,比较了它和 Linux Bridge 模式之间的差异及其使用场景,还详细剖析了 Macvlan 四种模式的工作原理和相关注意项。下一节我们将通过实际演练来模拟 Macvlan 的四种工作模式。

    原文链接:https://cloud.tencent.com/developer/article/1495440

    展开全文
  • macvlan 详解

    千次阅读 2019-09-01 13:51:57
    01 macvlan 简介 前面的文章讲过了几种 Linux 虚拟网络设备:tap/tun、veth-pair、bridge,它们本质上是 Linux 系统 提供的网络虚拟化解决方案,今天要讲的 macvlan 也是其中的一种,准确说这是一种网卡虚拟化的解决...

    01 macvlan 简介

    前面的文章讲过了几种 Linux 虚拟网络设备:tap/tun、veth-pair、bridge,它们本质上是 Linux 系统 提供的网络虚拟化解决方案,今天要讲的 macvlan 也是其中的一种,准确说这是一种网卡虚拟化的解决方案。因为 macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡 ,相当于物理网卡施展了 多重影分身之术 ,由一个变多个。

    02 macvlan 的工作原理#

    macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比较稳定的版本推荐 4.0+。它一般是以内核模块的形式存在,我们可以通过以下方法判断当前系统是否支持:

    Copy
    # modprobe macvlan # lsmod | grep macvlan macvlan 24576 0

    如果第一个命令报错,或者第二个命令没有返回,说明当前系统不支持 macvlan,需要升级内核。

    macvlan 这种技术听起来有点像 VLAN,但它们的实现机制是完全不一样的。macvlan 子接口和原来的主接口是完全独立的,可以单独配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用来划分广播域,而 macvlan 共享同一个广播域。

    通过不同的子接口,macvlan 也能做到流量的隔离。macvlan 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡,虚拟网卡再把包交给上层的协议栈处理。

    03 四种模式#

    根据 macvlan 子接口之间的通信模式,macvlan 有四种网络模式:

    • private 模式
    • vepa(virtual ethernet port aggregator) 模式
    • bridge 模式
    • passthru 模式

    默认使用的是 vepa 模式。

    3.1 private#

    这种模式下,同一主接口下的子接口之间彼此隔离,不能通信。即使从外部的物理交换机导流,也会被无情地丢掉。

    3.2 vepa#

    这种模式下,子接口之间的通信流量需要导到外部支持 802.1Qbg/VPEA 功能的交换机上(可以是物理的或者虚拟的),经由外部交换机转发,再绕回来。

    注:802.1Qbg/VPEA 功能简单说就是交换机要支持 发夹(hairpin) 功能,也就是数据包从一个接口上收上来之后还能再扔回去。

    3.3 bridge#

    这种模式下,模拟的是 Linux bridge 的功能,但比 bridge 要好的一点是每个接口的 MAC 地址是已知的,不用学习。所以,这种模式下,子接口之间就是直接可以通信的。

    3.4 passthru#

    这种模式,只允许单个子接口连接主接口,且必须设置成混杂模式,一般用于子接口桥接和创建 VLAN 子接口的场景。

    3.5 mactap#

    和 macvlan 相似的技术还有一种是 mactap。和 macvlan 不同的是,mactap 收到包之后不是交给协议栈,而是交给一个 tapX 文件,然后通过这个文件,完成和用户态的直接通信。

    04 实践#

    在 Linux 系统下,创建 macvlan 的命令形式如下:

    Copy
    ip link add link DEVICE name NAME type { macvlan | macvtap } mode { private | vepa | bridge | passthru [ nopromisc ] }

    通常,单独使用 macvlan 毫无意义,一般都是结合 VM 和容器来构建网络。下面我们就简单使用 namespace 来看看 Linux 是怎么使用 macvlan 的。

    实验拓扑如下:

    在我的系统中,以接口 enp0s8 为例创建两个 macvlan 子接口(使用 bridge 模式),配置 IP 并将其挂到两个 namespace 中,测试连通性。

    Copy
    # 创建两个 macvlan 子接口 ip link add link enp0s8 dev mac1 type macvlan mode bridge ip link add link enp0s8 dev mac2 type macvlan mode bridge

    # 创建两个 namespace
    ip netns add ns1
    ip netns add ns2

    # 将两个子接口分别挂到两个 namespace 中
    ip link set mac1 netns ns1
    ip link set mac2 netns ns2

    # 配置 IP 并启用
    ip netns exec ns1 ip a a 192.168.56.122/24 dev mac1
    ip netns exec ns1 ip l s mac1 up

    ip netns exec ns1 ip a a 192.168.56.123/24 dev mac2
    ip netns exec ns2 ip l s mac2 up

    注:enp0s8 的 IP 是 192.168.56.110/24,配置的子接口 IP 也必须是同一网段的。

    完了两个子接口 ping 一下:

    Copy
    root@ubuntu:~# ip netns exec ns1 ip a show mac1 9: mac1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1 link/ether 2e:6e:d9:08:c5:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.56.122/24 scope global mac1 valid_lft forever preferred_lft forever inet6 fe80::2c6e:d9ff:fe08:c505/64 scope link valid_lft forever preferred_lft forever root@ubuntu:~# ip netns exec ns1 ping 192.168.56.123 PING 192.168.56.123 (192.168.56.123) 56(84) bytes of data. 64 bytes from 192.168.56.123: icmp_seq=1 ttl=64 time=0.052 ms 64 bytes from 192.168.56.123: icmp_seq=2 ttl=64 time=0.028 ms ^C --- 192.168.56.123 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.028/0.040/0.052/0.012 ms

    可以看到,能够 ping 通,如果把上面的 mode 换成其他模式就行不通了,这个就留给大家去实验了(默认是 vepa 模式)。

    另外,在 docker 中,macvlan 是一种较为重要的跨主机网络模型,这块的内容就留作下篇文章再做讲解了。

    05 总结#

    macvlan 是一种网卡虚拟化技术,能够将一张网卡虚拟出多张网卡。

    macvlan 的四种通信模式,常用模式是 bridge。

    思考一下:

    1. macvlan bridge 和 bridge 的异同点
    2. 还有一种类似的技术,多张虚拟网卡共享相同 MAC 地址,但有独立的 IP 地址,这是什么技术?

    这两个问题大家可以留言互动一下。


    展开全文
  • macvlan亲测

    2021-01-28 15:03:48
    Macvlan 最近做一个项目,需要把container的ip暴露给外面,Google了一下发现使用macvlan或者overlay技术来实现。同时macvlan的配置更简单,并且没有使用docker的bridge,转发效率更高。因此这里就简单对macvlan学习...
  • Linux MAC VLAN实现

    2020-06-11 16:27:34
    1、macvlan是一种网卡虚拟化解决方案,能够将一块物理网卡虚拟成多块虚拟网卡。 2、macvlan 这种技术听起来有点像 VLAN,但它们的实现机制是完全不一样的。macvlan 子接口和原来的主接口是完全独立的,可以单独配置 ...
  • MAC VLAN和IP子网VLAN

    2020-05-23 21:34:55
    基于MAC VLAN配置方法: [H3C]vlan 2 to 255 [H3C]mac-vlan mac-address B00C-D1FF-FFFF mask FFFF-FF00-0000 vlan 10     #将前6位一致划分到vlan10中 [H3C]mac-vlan mac-address B00C-E1FF-...
  • OVH) new created interfaces cannot have random macaddress, you must to assign a predefined one so I added <em>--macvlan_vs_ma</em> to nsjail to be able to set it as required. <p>I think the patch ...
  • docker网络 macvlan

    2019-07-01 10:10:00
    docker 还开发了另一个支持跨主机容器网络的 driver:macvlanmacvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。mac...
  • #lxc profile device set macvlan4-profile eth0 nictype macvlan parent macvlan4 #lxc profile device add macvlan4-profile root 2 path=/ pool=default type=disk </code></pre> <p>5 launch an ...
  • Docker Macvlan

    2018-03-28 16:26:00
    一、Macvlan  交换机的vlan是根据端口来划分的,如果一个PC接入vlan10的端口它就在vlan10中,否则就在其他vlan中。而 MAC VLAN 则可以有效解决这个问题,它根据 终端设备的 MAC 地址来划分 VLAN。这样,即使用户...
  • <div><p>Tested out the macvlan/ipvlan drivers, some comments wrt the UX: - I seem to be able to pass any option to the driver (e.g.<code>-o foo=bar) and it won't ever error out... I would ...
  • Docker 初识 macvlan网络

    2020-08-30 12:42:39
    除了 overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlanmacvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置...
  • docker-macvlan

    2019-10-07 22:59:49
    使用Macvlan网络 某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络。在这种情况下,可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接...
  • Document macvlan scenario

    2021-01-07 08:17:47
    <div><p>It would be extremely handy to document <code>macvlan</code> scenario for accessing containers from the LAN. Without knowing about <code>macvlan</code> it is hard to discover it, and without ...
  • 创建 macvlan 网络

    千次阅读 2017-08-17 11:08:34
    上一节我们准备好了 macvlan 的实验环境,今天在 host1 和 host2 中创建 macvlan 网络 mac_net1: 注意:在 host2 中也要执行相同的命令。 ① -d macvlan 指定 driver 为 macvlan。 ② mac...
  • Support macvlan network

    2020-11-29 06:06:41
    <div><p>I am using a macvlan network on Docker, and I'm getting an error message: <pre><code>` [SERVICE_STARTUP_FAILED] [no bindings available for 4444/tcp] </code></pre> <p>` <p>On a Mac...
  • Macvlan 网络方案实践

    2019-04-01 03:27:01
    原文链接:Macvlan 网络方案实践 通过上篇文章的学习,我们已经知道 Macvlan 四种模式的工作原理,其中最常用的就是 Bridge 模式,本文我们将通过实验来验证 Macvlan Bridge 模式的连通性。 Macvlan 是 linux 内核...
  • H3C-MAC VLAN技术

    2019-01-22 12:00:43
    H3C-MAC VLAN技术
  • <div><p>I need to create macvlan interfaces and patched the module to support these interfaces. It's just 20 lines and it works for me (tm). You can find it here: ...
  • docker_macvlan

    2018-09-09 18:43:00
    macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层(Data Link Layer)进行网络数据转发的,它是比较新的网络虚拟化技术,需要较新的内核支持(Linux kernel v3.9–3.19 and 4.0+...
  • 上一篇文章我们详细介绍了 macvlan 这种技术,macvlan 详解,由于它高效易配置的特性,被用在了 Docker 的网络方案设计中,这篇文章就来说说这个。 01 macvlan 用于 Docker 网络 在 Docker 中,macvlan 是众多 ...
  • docker网络之macvlan

    2018-09-16 17:48:00
    macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作。macvlan有四种模式:VEPA,bridge,Private和Passthru macvlan接口会监听...
  • Docker Macvlan网络部署

    2019-09-28 19:54:51
    Macvlan Bridge模式  节点1创建 docker network create -d macvlan --subnet=172.100.1.0/24 --gateway=172.100.1.1 -o parent=ens33 macvlan_net  网段为172.100.1.0/24 桥接的网卡为ens33 macvlan_net...
  • 准备 macvlan 环境

    2017-08-15 21:48:20
    除了 overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlanmacvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以...
  • Macvlan工作原理: Macvlan是Linux内核支持的网络接口。要求的Linux内部版本是v3.9–3.19和4.0+;通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址。虚拟出来的子接口将直接暴露在...
  • Outside via macvlan

    2020-12-03 01:00:36
    <p>When using multus to start a VM with macvlan, get an ip, but there is a problem that cannot communicate with the outside. This happened because of a configuration issue with the linux bridge ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,016
精华内容 2,006
关键字:

macvlan