什么?网卡也能虚拟化?

什么?网卡也能虚拟化?

作者:CloudDeveloper 2019-04-17 18:04:10

云计算

虚拟化 今天要讲的 macvlan 也是其中的一种,准确说这是一种网卡虚拟化的解决方案。因为 macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡 ,相当于物理网卡施展了 多重影分身之术 ,由一个变多个。

 01 macvlan 简介

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

[[262804]]

 

02 macvlan 的工作原理

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

  1. # modprobe macvlan 
  2. # lsmod | grep macvlan 
  3. macvlan                 24576 

如果***个命令报错,或者第二个命令没有返回,说明当前系统不支持 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 的命令形式如下:

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

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

实验拓扑如下:

 

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

  1. # 创建两个 macvlan 子接口  
  2. ip link add link enp0s8 dev mac1 type macvlan mode bridge 
  3. ip link add link enp0s8 dev mac2 type macvlan mode bridge 
  4.  
  5. # 创建两个 namespace  
  6. ip netns add ns1 
  7. ip netns add ns2 
  8.  
  9. # 将两个子接口分别挂到两个 namespace 中 
  10. ip link set mac1 netns ns1 
  11. ip link set mac2 netns ns2 
  12.  
  13. # 配置 IP 并启用 
  14. ip netns exec ns1 ip a a 192.168.56.122/24 dev mac1 
  15. ip netns exec ns1 ip l s mac1 up 
  16. ip netns exec ns1 ip a a 192.168.56.123/24 dev mac2 
  17. ip netns exec ns2 ip l s mac2 up 

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

完了两个子接口 ping 一下:

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

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

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

05 总结

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

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

思考一下:

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

本文转载自微信公众号「 Linux云计算网络(ID:cloud_dev)」,公众号主要专注在 Linux、云计算、网络方面的技术分享,可以通过以下二维码关注。转载本文请联系 Linux云计算网络 公众号。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/306506.html<

(0)
运维的头像运维
上一篇2025-05-26 16:47
下一篇 2025-05-26 16:49

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注