1 概念
1.1 基本操作
查看网卡硬件信息 : #lspci
查看网络配置信息 :
#ln -s /usr/libexec/qemu-kvm /usr/bin
//做一个软连接,以便可以使用qemu-kvm命令
#qemu-kvm -net nic,model=?
#virt-install --network=?
1.2 QEMU支持的网卡模式
OpenStack中一般就使用网桥模式与NAT模式:
1)基于网桥(bridge)的虚拟网卡;
2)基于NAT(Network Address Translation)的虚拟网络;
3)内置用户模式网络(user mode networking),用的很少;
4)直接分配网络设备的网络(VT-d,SR-IOV)
1.3 网卡类型的查看
看看默认添加的网卡类型是什么,不同网卡的吞吐量不同
1)rtl8139 Realtek公司10/100M网卡(qemu-kvm)
2)e1000 Intel e1000(纯qemu)
#lspci | grep Ethernet
#ethtool -i eth0
在虚拟机里查看 (qemu) info network
在物理机里查看 virsh#qemu-monitor-command Z_D --hmp info 网卡/cpu
2 网桥模式
网桥模式,耗ip地址且容易产生地址冲突。当时网桥模式搭建好了之后不用任何策略就可以直接内访外、外访内。将物理机的网卡em2映射到一个创建的虚拟网桥br0上,然后把虚拟机的网卡也添加到这块网桥上,这样虚拟机和物理机就可以正常通信了。这个虚拟的网桥相当于就是交换机。virbr0也可以桥接使用。
#lsmod | grep tun //查看设备是否支持,必须得有tun模块才能做网桥
2.1 创建网桥设备
方法1:
#brctl show //查看网卡
#brctl addbr br0 //添加br0网桥
#brctl addif br0 eth0 //向网桥里添加网卡eth0
#brctl stp br0 on //stp是生成树协议,开启stp用于拒绝回路,
#ifconfig eth0 0 //清除ip,远程连接千万别使
#dhclient br0 //这个我们实验不用,我们有固定ip
#ping -c 3 8.8.8.8
#dmesg | grep eth0 //查看网卡信息
方法2:修改配置文件,推荐使用这种方法
第一步 copy一个网卡的配置文件,修改桥接设备br0配置文件,把br0添加到网卡
#cd / etc/sysconfig/network-scripts/
#cp ifcfg-em1 ifcfg-br0
#vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge //更改类型为桥接
UUID=d2d68553-f97e-7549-7a26-b34a26f29318 //这个要删除
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes //开机启动网卡
IPADDR=172.19.9.252 //地址要与物理机网卡ip地址相同
PREFIX=16 //子网掩码,不用改
GATEWAY=172.19.0.1
DNS1=172.19.0.1 //这个没有的话也可以不写,有的话就不要改
DNS2=119.29.29.29 //这个没有的话也可以不写,有的话就不要改
STP=yes //添加这行,STP叫做生成树协议,是用于避免环路的
DEFROUTE=yes
IPV4_FAILURE_FATAL=no //这个可以不写,有的话直接删掉
IPV6INIT=no //这个可以不写,有的话直接删掉
第二步 修改网卡配置文件
#vim /etc/sysconfig/network-scripts/ifcfg-em1
TYPE=Ethernet
NAME=em1
DEVICE=em1
ONBOOT=yes
BRIDGE=br0
第三步 重启服务 #systemctl restart network
验证是否成功 #brctl show 和 #ifconfig
从结果可以看见,已经成功!!!
方法3:用nmcli命令做
nmcli与nmtui都是被network与network-manager管理的,network-manager的功能比network的全面,可以管理WiFi、蓝牙等设备,但是由于服务器用不到WiFi、蓝牙等功能,所以只用network服务就够了。而network服务与libvirtd服务是有冲突的,network配置文件中不能有virbr0设备信息,否则就会出现管辖冲突。
这是因为用nmtui给virbr0配置了ip地址,这时候就会在 /etc/sysconfig/network/ 目录下自动产生virbr0文件。
出现管辖冲突时,虚拟机就会无法启动,这时要删掉 /etc/sysconfig/network/ 目录下面的virbr0文件,并且重新启动 #virsh net-start default。
network配置文件中只有物理设备网卡与网桥信息,剩下都是libvirtd自动写入进去的,但是network配置文件中的内容与libvirt文件中的内容不能有重复,否则会出现管辖冲突。
#nmcli connection add type bridge con-name br0 ifname br0
#nmcli connection add type bridge-slave con-name br0-eth0 ifname eth0 master br0
#nmcli connection modify br0 ipv4.method manual
#nmcli connection mpdify br0 ipv4.address "192.168.1.1/24" 192.168.1.254
#nmcli connection modify br0 ipv4.dns 192.168.1.10
#nmcli connection modify br0 ipv4.gateway 192.168.1.10
#nmcli connection modify br0 connection.autoconnect yes
#nmcli connection up br0
3 NAT(网络地址转换)模式
由于ipv4地址不够用所以产生了NAT技术,SNAT(源网络地址转换)把多个私网ip转化几个公网ip,这几个公网ip代替私网ip进行外网访问,当iptables设置了SNAT之后,内网就可以访问外网,默认情况下,只要物理机与虚拟机是可以ping通,不设置iptables规则,NAT模式的网卡也可以直接访问外网的。
但是外网访问内网需要设置iptables的DNAT(目的网络地址转换,又称端口映射)策略,但是策略中只能写一个ip地址,不能写某个网络段。
伪装(masquerade),公网ip不断变化时,会自动给私网ip切换而不会被客户发现。宽带拨号连接时会用到。
DMZ:不用路由器,直接插网线,然后宽带拨号连接,这样就相当于得到了公网ip,但是公网ip在NAT地址转化时也要使用,这就产生了ip地址冲突。所以需要做DMZ主机,作为一个专门的直接连接外网的主机,ip地址是与之绑定的。
1)查看NAT模式下,自动分配网络参数信息的dnsmasq服务的状态:
#ps aux | grep dnsmasq
#ps -elf | grep dnsmasq
2)创建NAT虚拟网络
看网卡状态之后再启动libvirtd服务,会发现多了一个virbr0网卡。这个网卡的作用就是,规定了虚拟机自动获取网址的默认规则是——有192.168.122.xxx的话就用192.168.124.xxx,没有122.xxx的话就用192.168.122.xxx 。
自己新创建个NAT模式的虚拟网卡virbr1,创建好了之后再创建虚拟机就可以不使用默认规则下的地址,而是使用这个段的地址了。
创建好之后,使用 #ifconfig 就会产生这个网卡信息:
也可以通过更改配置文件添加虚拟NAT网卡:
#vim /etc/libvirt/qemu/networks/virbr1.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit virbr2
or other application using the libvirt API.
-->
<network>
<name>virbr2</name>
<uuid>f3b4de5e-8ad5-4117-9f66-9335d2188ecb</uuid>
<forward mode='nat'/>
<bridge name='virbr2' stp='on' delay='0'/>
<mac address='52:54:00:f2:50:ec'/>
<ip address='172.16.0.1' netmask='255.255.255.0'>
<dhcp>
<range start='172.16.0.128' end='172.16.0.254'/>
</dhcp>
</ip>
</network>
#virsh net-list //列出虚拟网络
#virsh net-dumpxml 选项
#virsh domiflist 虚拟机名
4 bond 和 team
网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。在应用部署中是一种常用的技术,我们公司基本所有的项目相关服务器都做了bond。
1)bond模式:
Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合。
Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)
Mode=3(broadcast) 表示所有包从所有interface发出,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。
Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)
Mode=5(balance-tlb) 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
Mode=6(balance-alb) 在5的tlb基础上增加了rlb。
2)team
在redhat7.0以上版本中网络方面的相关服务被NetworkManager所接管,所以在配置多网卡绑定时,redhat专门提供了team工具来实现多网卡的绑定。在 linux 中, centos7之前都是使用bond机制来实现多网络绑定同一个IP 地址,来对网络提供访问,并按不同的模式来负载均衡或者轮回接替管理处理数据。而到了contos7之后,提供了一种强大的工具,nmcli工具命令,使用此工具,将会根据命令参数的配置来重新生成特定的配置文件来供网络接口使用,方便而又灵活。在linux不再使用bond机制定义,而是使用网路组 team 机制,把 team 组当作一个设备。
team :也是链路聚合 最多支持8块网卡,Team 不需要手动加载相应内核模块
支持模式:
broadcast 广播容错
roundrobin 轮询
activebackup 主备
loadbalance 负载均衡
转载请注明出处,谢谢!