Virtual Ethernet Port Aggregator。它是HP在虚拟化支持领域对抗Cisco的VN-Tag的技术。
解决了虚拟机之间网络通信的问题,特别是位于同一个宿主机内的虚拟机之间的网络通信问题。
VN-Tag在标准的协议头中增加了一个全新的字段,VEPA则是通过修改网卡驱动和交换机,通过发夹弯技术回注报文。
TUN是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。
TUN设备模拟网络层设备(network layer),处理三层报文,IP报文等,用于将报文注入到网络协议栈。
应用程序(app)可以从物理网卡上读写报文,经过处理后通过TUN回送,或者从TUN读取报文处理后经物理网卡送出。
创建:
创建之后,使用 ip addr 就会看见一个名为”tun-default”的虚拟网卡
可以对tun-default设置IP:
使用open/write等文件 *** 作函数从fd中进行读取 *** 作,就是在收取报文,向fd中写入数据,就是在发送报文。
TAP是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。
不同于TUN的是,TAP设备模拟链路层设备(link layer),处理二层报文,以太网帧等。
TAP设备的创建过程和TUN类似,在ioctl设置的时候,将类型设置为IFF_TAP即可。
TAP设备与TUN设备的区别在于:
有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作方式如下:
MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。单独使用 MACVLAN 好像毫无意义,但是配合之前介绍的 network namespace 使用,我们可以构建这样的网络:
采摘
创建一个基于eth0的名为macv1的macvlan网卡:
macvlan支持三种模式,bridge、vepa、private,在创建的时候设置“mode XXX”:
bridge模式,macvlan网卡和物理网卡直接可以互通,类似于接入到同一个bridge。
vepa模式下,两个macvlan网卡直接不能直接通信,必须通过外部的支持“发夹弯”交换机才能通信。
private模式下,macvlan发出的广播包(arp等)被丢弃,即使接入了支持“发夹弯”的交换机也不能发现其它macvlan网卡,除非手动设置mac。
MACVTAP 是对 MACVLAN的改进,把 MACVLAN 与 TAP 设备的特点综合一下,使用 MACVLAN 的方式收发数据包,但是收到的包不交给 network stack 处理,而是生成一个 /dev/tapX 文件,交给这个文件:
由于 MACVLAN 是工作在 MAC 层的,所以 MACVTAP 也只能工作在 MAC 层,不会有 MACVTUN 这样的设备。
ipvlan和macvlan的区别在于它在ip层进行流量分离而不是基于mac地址,同属于一块宿主以太网卡的所有ipvlan虚拟网卡的mac地址都是一样的。
[图片上传失败...(image-d98b6f-1597455459947)]
veth设备是成对创建的:
创建之后,执行 ip link 就可以看到新创建的veth设备:
注意veth设备前面的ID, 58: 和 59: ,一对veth设备的ID是相差1的,并且系统内全局唯一。可以通过ID找到一个veth设备的对端。
veth设备理解
Intermediate Functional Block device,连接 ifb 中做了很详细的介绍。
现在很多电脑都有不只一块网卡,但是一块网卡出现故障,整个网络都会中断。但是在Linux系统中只要创建Linux虚拟网卡,就不会遇到这种麻烦。本文就来介绍一下Linux下把多个网卡设置成多个虚拟网卡的技巧。以eth0与eth1来虚拟成为bond0为例:------绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。
设置方法
1、创建虚拟网络接口配置文件ifcfg-bond0,并指定网卡IP:vi /etc/sysconfig/ network-scripts/ifcfg-bond0
cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
IPADDR=10.0.11.10
NETMASK=255.255.252.0
GATWAY=10.0.11.1
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
2、分别修改ifcfg-eth0和ifcfg-eth1-----不能设置有关IP,网关,子网掩码等信息。
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
3、安装module
因为虚拟网卡实在内核模块中实现的,所以需要安装有module,在/etc/modules.conf中添加如下内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0。
加入下列两行
alias bond0 bonding
options bond0 miimon=100 mode=0 --- 0表示两块物理网卡是以负载均衡的方式运行。
注:miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都处于active状态。
mode=1表示fault-tolerance (active-backup)提供冗余功能,就是说默认情况下只有一块网卡处于active,另一块做备份。
如果采用此模式则:options bond0 miimon=100 mode=1 primary=eth0---表示eth0为active状态,eth1为备用状态。
bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用
4、在/etc/rc.local中添加如下命令。
cat /etc/rc.local
modprobe bonding miimon=100 mode=0
配置完成重启主机。
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface eth1 OK
以上就是Linux下把多个网卡设置成多个虚拟网卡的技巧了,这样设置完了以后,只要有一块虚拟网卡还能使用,虚拟网卡就能正常工作,就不会断网了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)