加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

什么?网卡也能假造化?

发布时间:2019-04-18 23:13:52 所属栏目:站长百科 来源:CloudDeveloper
导读:01 macvlan 简介 前面的文章讲过了几种 Linux 假造收集装备:tap/tun、veth-pair、bridge,它们本质上是 Linux 体系 提供的收集假造化办理方案,本日要讲的 macvlan 也是个中的一种,精确嗣魅这是一种网卡假造化的办理方案。由于 macvlan 这种技能能将 一块
副问题[/!--empirenews.page--]

 01 macvlan 简介

前面的文章讲过了几种 Linux 假造收集装备:tap/tun、veth-pair、bridge,它们本质上是 Linux 体系 提供的收集假造化办理方案,本日要讲的 macvlan 也是个中的一种,精确嗣魅这是一种网卡假造化的办理方案。由于 macvlan 这种技能能将 一块物理网卡假造成多块假造网卡 ,相等于物理网卡发挥了 多重影两全之术 ,由一个变多个。

什么?网卡也能假造化?

02 macvlan 的事变道理

macvlan 是 Linux kernel 支持的新特征,支持的版本有 v3.9-3.19 和 4.0+,较量不变的版本保举 4.0+。它一样平常是以内核模块的情势存在,我们可以通过以下要领判定当前体系是否支持:

  1. # modprobe macvlan 
  2. # lsmod | grep macvlan 
  3. 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 的呼吁情势如下:

  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 也必需是统一网段的。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读