在Linux中使用virsh,nmcli和brctl配置KVM网络
KVM主机中的网络配置有很多选择。在本文中,我将引导我们完成两个主要选择来配置KVM网络。考虑在KVM上运行的Guest操作系统的内部网络和外部网络。
配置KVM网络井盖的两种方法是:为KVM来宾使用带有NAT的Linux桥接器为KVM来宾使用Linux桥接器(无NAT)
我们将在本文中介绍的其他配置KVM网络的可用方法是:
在KVM guest虚拟机上使用Open vSwitch网桥在KVM guest虚拟机上使用MacVTap驱动程序
创建基于KVM Linux NAT的网桥网络
此网络配置结合使用Linux网桥和网络地址转换(NAT),使来宾OS能够获得出站连接,而与KVM主机中使用的网络类型(有线,无线,拨号等)无关,而无需需要任何特定的管理员配置。
使用此方法配置KVM网络非常简单明了。
最快的入门方法是利用现有的默认网络配置。使用以下命令转储默认网络xml配置。
$sudo virsh net-dumpxml default > br1.xml
我们可以相应地编辑此文件并使用它来定义新的网络接口
手动创建xml文件
请查看以下文件,以大致了解该文件的外观:
创建一个新文件br1.xml
sudo vim br1.xml
添加网络配置参数。
<network> <name>br1</name> <forward mode='nat'> <nat> <port start='1024' end='65535' </nat> </forward> <bridge name='br1' stp='on' delay='0' <ip address='192.168.10.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.10.10' end='192.168.10.100' </dhcp> </ip> </network>
要从XML文件定义网络而不启动它,请使用:
$sudo virsh net-define br1.xml Network br1 defined from br1.xml
要启动(先前定义的)非活动网络,请使用:
$sudo virsh net-start br1 Network br1 started
要创建无法设置为自动启动的瞬态网络,请使用:
$sudo virsh net-create br1.xml Network br1 created from br1.xml
要将网络设置为自动启动,请使用:
$sudo virsh net-autostart br1 Network br1 marked as autostarted
检查以确认是否将自动启动标志设置为"是"。持久性也应读为"是"。
$sudo virsh net-list --all Name State Autostart Persistent --------------------------------------------------------- br1 active yes yes default active yes yes
要将网络名称转换为先前定义的网络UUID,请使用:
$sudo virsh net-uuid br1 ed90dfcf-c895-4d5c-9d34-bd307f8c3ec0
确认网桥已成功创建
我们可以使用bridge-utils软件包提供的brctl命令来检查Linux系统上可用的网桥
# brctl show br1 bridge name bridge id STP enabled interfaces br1 8000.525400515825 yes br1-nic
检查分配给接口的IP地址
我们可以使用ip
命令:
# ip addr show dev br1 19: br1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:51:58:25 brd ff:ff:ff:ff:ff:ff inet 192.168.10.1/24 brd 192.168.10.255 scope global br1 valid_lft forever preferred_lft forever
将接口连接到VM
在此示例中,将br1
接口添加到将配置为Preboot eXecution Environment服务器的vmpxe
上,这将立即生效,并且NIC将在以后的重新引导中保持不变。
$sudo virsh attach-interface --domain pxe --type bridge \ --source br1 --model virtio --config --live $sudo virsh domiflist pxe Interface Type Source Model MAC ------------------------------------------------------ vnet0 bridge virbr0 virtio 52:54:00:e9:ad:17 vnet1 bridge br1 virtio 52:54:00:47:2f:eb
拆卸与虚拟机相连的接口
$sudo virsh detach-interface --domain pxe --type bridge --mac 52:54:00:47:2f:eb --config $sudo virsh domiflist pxe Interface Type Source Model MAC ------------------------------------------------------ vnet0 bridge virbr0 virtio 52:54:00:e9:ad:17
删除网络
要完全删除网络,请按照以下步骤操作:首先销毁网络以使其处于非活动状态:
$sudo virsh net-destroy br1 Network br1 destroyed
接下来,取消定义网络。
$sudo virsh net-undefine br1 Network br1 has been undefined
确认该网络未列为非活动/活动状态。
$sudo virsh net-list --all Name State Autostart Persistent --------------------------------------------------------- default active yes yes
我们还可以使用brctl
命令来检查:
$sudo brctl show br1 bridge br1 does not exist!
为KVM来宾创建KVM Linux桥接器(无NAT)
使用基于NAT的网络配置KVM网络的替代方法是使用标准的Linux网络桥。
网络桥是一种链路层设备,它根据MAC地址在网络之间转发流量,因此也称为第2层设备。它通过学习通过什么主机连接到每个网络而建立的MAC地址表来做出转发决定。
可以在Linux主机内使用软件桥,以模拟硬件桥,例如在虚拟化应用程序中,用于与一个或者多个虚拟NIC共享NIC。
使用nmcli创建Linux Bridge
Nmcli是NetworkManager的命令行客户端。它允许控制NetworkManager并报告其状态。
要使用nmcli创建一个名为br0的Linux网桥,请运行以下命令:
nmcli con add type bridge con-name br0 ifname br0 autoconnect yes
这个例子演示了添加一个桥主连接和一个从属。第一个命令添加一个主桥连接,将桥接口和配置文件命名为br0
;第二个命令将从属配置文件奴隶化到br0
。从站将与ens3接口绑定。最后一条命令将为br0配置文件禁用802.1D STP。
进一步修改网桥以启用自动连接,添加ipv4地址和网关:
nmcli connection modify br0 ipv4.addresses 192.168.10.5/24 \ ipv4.method manual ipv4.gateway 192.168.10.1 ipv4.dns 8.8.8.8
调出界面:
# nmcli con up br0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) # brctl show br0 bridge namebridge idurlSTP enabledinterfaces br0-slave-18000.000000000000no
使用brctl创建Linux Bridge
如果我们没有安装networkmanager,则可以在安装bridge-utils时使用安装的brctl命令来配置可用于配置KVM网络的Linux桥接器。
创建一个新的桥:
sudo brctl addbr br0
将设备添加到网桥,例如eth0:
sudo brctl addif br0 eth0
分配IP地址:
sudo ip addr add dev br0 192.168.2.4/24 sudo ip route add default via 192.168.2.1 dev br0
显示当前网桥及其连接的接口:
$brctl show
设置桥接设备:
$sudo ip link set up dev br0
删除网桥,我们需要首先将其设置为关闭:
$sudo ip link set dev br0 down $sudo brctl delbr br0 $sudo brctl delbr br0
https://wiki.libvirt.org/page/VirtualNetworkinghttp://www.linux-kvm.org/page/NetworkingIBM KVM Knowledgecenterman 5 nmcli-examples
virsh命令速查表来管理KVM来宾虚拟机