如何在Linux中为KVM创建和配置桥接网络
在今天的教程中,我们将研究如何在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