KVM:虚拟访客没有网络连接

KVM:虚拟访客没有网络连接

我已将虚拟访客设置为使用虚拟桥接接口 (virbro),但没有网络连接。主机运行Alma 8.6。

以下是主机系统上当前网络连接的列表:

# nmcli con show
NAME    UUID                                  TYPE      DEVICE
enp3s0  e41b3cfe-222d-49c1-8636-6457b0b71ade  ethernet  enp3s0
virbr0  970bbdf5-05de-4906-98c8-11d867dcf143  bridge    virbr0
vnet0   6aa2549a-8770-40d4-8545-60387c365436  tun       vnet0

这里是系统上当前配置的设备:

# nmcli device show
GENERAL.DEVICE:                         enp3s0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         B8:AE:ED:D9:02:10
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     enp3s0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         172.29.225.10/24
IP4.GATEWAY:                            172.29.225.254
IP4.ROUTE[1]:                           dst = 172.29.225.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 172.29.225.254, mt = 100
IP4.DNS[1]:                             172.29.240.3
IP4.DNS[2]:                             172.29.240.1
IP4.DNS[3]:                             172.29.240.2
IP6.ADDRESS[1]:                         fe80::baae:edff:fed9:210/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

GENERAL.DEVICE:                         virbr0
GENERAL.TYPE:                           bridge
GENERAL.HWADDR:                         FE:54:00:42:C4:1B
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     virbr0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
IP4.ADDRESS[1]:                         192.168.122.1/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.122.0/24, nh = 0.0.0.0, mt = 425
IP6.ADDRESS[1]:                         fe80::fc54:ff:fe42:c41b/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 256

GENERAL.DEVICE:                         vnet0
GENERAL.TYPE:                           tun
GENERAL.HWADDR:                         FE:54:00:42:C4:1B
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected (externally))
GENERAL.CONNECTION:                     vnet0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
IP4.GATEWAY:                            --
IP6.ADDRESS[1]:                         fe80::fc54:ff:fe42:c41b/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 256

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            --
IP6.ADDRESS[1]:                         ::1/128
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = ::1/128, nh = ::, mt = 256

brctl 显示一座桥

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.fe540042c41b       yes             vnet0

列出虚拟网络时,默认处于非活动状态:

# virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

这是访客的IP配置

$ ifconfig
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.29.225.11  netmask 255.255.255.0  broadcast 172.29.225.255
        inet6 fe80::5054:ff:fe42:c41b  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:42:c4:1b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 117  bytes 8644 (8.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我无法 ping 通主机或网关。

答案1

根据您为访客选择的 IP 地址,您似乎正在寻找桥接的适用于您的虚拟机的网络连接解决方​​案。

由于物理网络接口未连接到网桥,并且您的系统未配置为路线enp3s0和之间的流量virbr0,您的虚拟机无法与外界通信。

启用路由需要与 VM 使用不同的 IP 地址段,或者在 VM 的主机上使用 NAT/伪装,而您为 VM 选择的 IP 地址意味着您可能不希望这样做。

(如果您熟悉 VMware 虚拟化,可以将网桥视为虚拟交换机。)

您需要在主机上创建一个新的桥接接口,将主机系统的物理enp3s0接口分配给该桥接,并将主机的 IP 配置从该enp3s0接口移至该桥接接口。然后,您可以告诉 KVM 将虚拟机的虚拟网络接口也连接到该网桥,而不是virbr0.

在网桥上而不是在物理接口上配置主机的 IP 地址,允许主机在与外部物理网络和主机内部的虚拟机通信时使用相同的 IP 地址。当主机的 IP 地址直接在接口上配置时enp3s0,该 IP 地址只能用于外部物理网络 - 并且当接口enp3s0连接到网桥时,它可能会停止工作。

假设您没有任何ebtables阻止桥接通信的规则,则虚拟机将能够访问物理网络(以及彼此之间和主机)。


因此,virbr0配置了 RHEL 8 风格的默认设置:在网段中拥有虚拟机192.168.122.0/24,并仅允许 NAT 模式下的传出网络连接。显然这不是你想要的。因此,第一步是创建一个新的网桥并让它控制您的物理网络接口:

nmcli c add type bridge con-name bridge0 ifname bridge0
nmcli c modify enp3s0 master bridge0  # this will break host's network connectivity!

然后将您的主机 IP 配置重新应用到网桥。我假设你使用的是静态IP;如果您使用 DHCP,则需要对此进行修改。

nmcli c mod bridge0 ipv4.addresses 172.29.225.10/24
nmcli c mod bridge0 ipv4.gateway 172.29.225.254
nmcli c mod bridge0 ipv4.dns 172.29.240.3,172.29.240.1,172.29.240.2
nmcli c mod bridge0 ipv4.dns-search domain.example
nmcli c mod bridge0 ipv4.method manual
nmcli c up bridge0        # this should restore host's network connectivity

现在,主机的物理网络连接应该像以前一样工作(但是您可能需要更新防火墙规则),而且bridge0还可以作为虚拟机的连接点,允许传入和传出连接。

然后修改您的虚拟机以使用以下bridge0命令virbr0

virt-xml your-VM --edit --network bridge=bridge0
virsh start your-VM

现在brctl应该将物理enp3s0和虚拟都显示vnet0为 的成员bridge0。还ip link show master bridge0应该显示enp3s0vnet0,并且ip link show master virbr0不应该显示任何内容。

vnet0是虚拟机的主机可见的“后端” enp1s0。)

您的虚拟机现在应该具有传入和传出连接的完整连接。

相关内容