概念:
网桥是数据链路层的设备,基于MAC地址进行转发。KVM在实现虚拟化的时候,需要在一个宿主机内部共享一个物理网卡实现多个虚拟网卡,所以需要掌握linux网桥的实现方法。
CentOS配置网桥常用方法
1、命令行
2、nmtui:networkmanager的文本用户接口
3、nmcli:networkmanager的命令行工具
4、图形界面管理工具
qemu-kvm支持的网络
1、虚拟机的网络模式:
>基于NAT的虚拟网络
>基于网桥的虚拟网络
>用户自定义的隔离的虚拟网络
>直接分配网络设备(VT-d,SR-IOV)
2、虚拟机的网卡:
>RTL8139、e1000
>virtio
宿主机的网络配置
默认情况下
宿主机KVM1安装libvirt后会自动创建一个default虚拟网络,配置文件在
cat /etc/libvirt/qemu/networks/default.xml
/etc/libvirt/qemu/networks下有一个autostart文件夹,当有网络的配置文件放到该目录下,就会自动启用。
linux自带网桥的工具brctl
brctl show
会显示一个已有的网桥,stp是生成树算法,这里的virbr0并不是一个纯二层的东西,它是有ip地址的。默认的接口叫virbr0-nic,如果此时有虚拟机启动中,会有额外的vnet
ifconfig可以看到virbr0
在宿主机linux层面上,看到的是一个网络接口,也可以看成是一个虚拟交换机
而virbr0-nic隐藏起来了
ifconfig -a
虚拟机网络配置
打开win2k3,ipconfig
可以看到网关,DNS服务器,DHCP服务器都是192.168.122.1,也就是virbr0
win2k3通过virbr0,linux操作系统自身的NAT功能做了转发,通过地址转换到外部,pingKVM1192.168.160.132是可以ping通的,但由于没有做映射,外部网络ping NAT内部的win2k3是不行的。
kvm的NAT模式
当虚拟机启动时,虚拟网络default会自动给它们分配虚拟网卡vnet,虚拟机的ip地址是由virbr0分配的。对外部通过NAT组件iptables做转发,eth0也就是KVM1的以太网卡口。
iptables -L -t nat
可以看到有很多规则
这些规则是由libvirtd启动的时候根据现在的配置向iptables添加的规则。
如果将iptable服务stop,那么内部的虚拟机就无法向外部访问,
这时候重启iptables.service,但nat链表里策略已经都没有了,内部虚拟机还是无法连接。
systemctl restart libvirtd
这时libvirtd会向iptables添加策略,访问恢复
向虚拟机添加虚拟机网络
1、通过virt-manager添加网卡就行
2、通过virshXML文件用attach-device
3、attach-interface挂接新的网络
因为win2k3安装过qemu guest agent,可以在外部host通过virsh domifaddr win2k3里面的ip地址
同时virbr0也具有DNS和DHCP服务器功能。