在Linux中使用virsh,nmcli和brctl配置KVM网络

时间:2020-02-23 14:31:22  来源:igfitidea点击:

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-examplesvirsh命令速查表来管理KVM来宾虚拟机