如何在Linux中为KVM创建和配置桥接网络

时间:2020-02-23 14:32:39  来源:igfitidea点击:

在今天的教程中,我们将研究如何在Linux中为KVM创建和配置桥接网络 - Rhel/CentOS/Ubuntu/Debian/Arch Linux 等在KVM中使用时的Linux桥梁,允许虚拟机访问虚拟环境之外的外部网络和服务。

有各种方式可以在Linux中配置桥联网以用于KVM。
在KVM中推出的虚拟机使用的默认网络是NAT Network.with NAT网络,为访问者计算机创建虚拟网络,然后将其映射到主机网络以提供Internet连接。

配置和使用桥接网络时,客户机操作系统访问外部网络直接连接到主机。
可以通过直接编辑网络脚本或者使用Linux网络管理工具使用Virth Machinal Manager使用Virtual Machinal Manager使用虚拟机管理器来创建桥梁。

方法1:使用虚拟机管理器创建桥接网络。

请按照以下步骤从虚拟机管理器(GUI)创建Linux桥。
我们需要在系统上安装KVM。

如何在Rhel/CentOS 8,Fedora,Arch Linux,CentOS,Ubuntu/Debian,Sles上安装KVM

打开虚拟机管理器,然后转到编辑>连接详细信息>虚拟网络

单击窗口底部的+配置新的网络接口。
为虚拟网络提供名称。

在下一个窗口中单击"转发"按钮,提供虚拟网络信息。

单击"向前",然后选择启用IPv6.

选择网络类型和转发策略。

完成设置并保存配置。
新的虚拟网络应在概述页面上显示。

自动为网络创建主机系统上的桥梁。

$brctl show virbr4      
bridge name	bridge id		STP enabled	interfaces
virbr4		8000.525400c2410a	yes		virbr4-nic

方法2:使用virsh命令创建KVM桥。

创建一个新的桥XML文件。

vim br10.xml

将桥接详细信息添加到文件中。

<network>
  <name>br10</name>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'
    </nat>
  </forward>
  <bridge name='br10' stp='on' delay='0'
  <ip address='192.168.30.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.30.50' end='192.168.30.200'
    </dhcp>
  </ip>
</network>

要从XML文件定义网络而不启动它,请使用:

$sudo virsh net-define  br10.xml
Network br1 defined from br10.xml

要启动(以前定义的)非活动网络,请使用:

$sudo virsh net-start br10
Network br10 started

将网络设置为AutoStart AT服务启动:

$sudo virsh net-autostart br10
Network br10 marked as autostarted

检查是否转向AutoStart标志 yes- 持续应该读数是。

$sudo virsh net-list --all
 Name              State    Autostart   Persistent
---------------------------------------------------
 br10              active   yes         yes
 default           active   yes         yes
 docker-machines   active   yes         yes
 fed290            active   no          yes
 vagrant-libvirt   active   no          yes

确认桥接创建和IP地址。

$ip addr show dev br10
28: br10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:94:00:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.1/24 brd 192.168.30.255 scope global br10
       valid_lft forever preferred_lft forever

方法3:通过编辑网络脚本创建桥梁(CentOS/Rhel/Fedora):

下面的脚本将创建一个名为BR10的桥梁。

$sudo vim /etc/sysconfig/network-scripts/ifcfg-br10

和:

DEVICE=br10
STP=no
TYPE=Bridge
BOOTPROTO=none
DEFROUTE=yes
NAME=br10
ONBOOT=yes
DNS1=8.8.8.8
DNS2=192.168.30.1
IPADDR=192.168.30.3
PREFIX=24
GATEWAY=192.168.30.1

Eth0接口的配置,即我桥接将是:

$cat /etc/sysconfig/network-scripts/ifcfg-eno1 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br10

重新启动网络守护程序。

sudo systemctl disable NetworkManager && sudo systemctl stop NetworkManager
sudo systemctl restart network.service

方法4:通过编辑网络脚本创建桥梁(Debian/Ubuntu):

配置桥接界面:

$sudo vim  /etc/network/interfaces
auto br10 
iface br10 inet static
address 192.168.1.10
network 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0
bridge_stp off

禁用ETH0接口部分上的所有行,查看如下所示:

auto eth0
iface eth0 inet manual

重新启动网络服务。

sudo systemctl restart networking.service

方法5:使用NMCLI工具

使用 nmcli网络管理命令行工具在所需接口上创建Linux桥。
让我们首先列出所有可用的连接。

$sudo nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
enp1s0              498869bb-0d88-4a4c-a83a-c491d1040b0b  ethernet  enp1s0 
Wired connection 1  0977f29f-fa2e-3d7f-831c-6f41f8782be3  ethernet  enp7s0

由于我的桥梁将在第二个设备上创建 enp7s0,我将删除现有连接,然后使用此设备创建一个桥。

$sudo nmcli connection delete 0977f29f-fa2e-3d7f-831c-6f41f8782be3
Connection 'Wired connection 1' (0977f29f-fa2e-3d7f-831c-6f41f8782be3) successfully deleted.

1.将桥接相关信息保存到变量。

BR_NAME="br10"
BR_INT="enp7s0"
SUBNET_IP="192.168.30.10/24"
GW="192.168.30.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

其中:br_name:要创建的桥的名称.BR_INT:要用作Bridge Slave.subnet_ip:分配给桥的IP地址和子网的物理网络设备已创建.gw:默认gatewaydns1和dns2的IP地址:要使用的DNS服务器的IP地址。 2.定义新的桥接连接。

sudo nmcli connection add type bridge autoconnect yes con-name ${BR_NAME} ifname ${BR_NAME}
Connection 'br0' (be6d4520-0257-49c6-97c2-f515d6554980) successfully added.

3.修改桥梁以添加IP地址,网关和DNS

sudo nmcli connection modify ${BR_NAME} ipv4.addresses ${SUBNET_IP} ipv4.method manual
sudo nmcli connection modify ${BR_NAME} ipv4.gateway ${GW}
sudo nmcli connection modify ${BR_NAME} ipv4.dns ${DNS1} +ipv4.dns ${DNS2}

4.将网络设备添加为Bridge Slave。

sudo nmcli connection delete ${BR_INT}
sudo nmcli connection add type bridge-slave autoconnect yes con-name ${BR_INT} ifname ${BR_INT} master ${BR_NAME}

示例输出。

Connection 'enp7s0' (f033dbc9-a90e-4d4c-83a9-63fd7ec1cdc1) successfully added.

检查连接。

$sudo nmcli connection show 
NAME    UUID                                  TYPE      DEVICE 
br0     be6d4520-0257-49c6-97c2-f515d6554980  bridge    br0    
enp1s0  498869bb-0d88-4a4c-a83a-c491d1040b0b  ethernet  enp1s0 
enp7s0  f033dbc9-a90e-4d4c-83a9-63fd7ec1cdc1  ethernet  enp7s0

第2步:带上网络桥

一旦创建了网络桥接连接,请带上它。

$sudo nmcli connection up br10
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

通过运行查看桥接详细信息。

sudo nmcli connection show br10

ip addr命令应给出类似于下面的输出。

$ip ad
3: enp7s0:  mtu 1500 qdisc fq_codel master br10 state UP group default qlen 1000
     link/ether 52:54:00:a2:f6:a8 brd ff:ff:ff:ff:ff:ff
 4: br10:  mtu 1500 qdisc noqueue state UP group default qlen 1000
     link/ether 52:54:00:a2:f6:a8 brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.10/24 brd 192.168.122.255 scope global noprefixroute br10
        valid_lft forever preferred_lft forever
     inet6 fe80::4f2f:ce6d:dc6b:2101/64 scope link noprefixroute 
        valid_lft forever preferred_lft forever