libvirt 网络问题:主机无法访问互联网(而客人可以!)

libvirt 网络问题:主机无法访问互联网(而客人可以!)

我运行一台 Ubuntu 机器,它通过 libvirt 托管多个客户虚拟机(也是 Ubuntu)。客户虚拟机可以访问互联网,而主机只能访问本地网络,包括网关。这似乎很奇怪,我不知道根本原因是什么。

我不记得这个问题是在哪里第一次发生的,或者哪个变化触发了它。所以我只是根据一些配置和输出来描述当前的情况:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         a.b.c.1    0.0.0.0         UG    0      0        0 eth0
a.b.c.0    0.0.0.0         255.255.255.0   U     0      0        0 br0
a.b.c.0    0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 br0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

这似乎基本表达的是相同的意思:

$ ip route show
default via a.b.c.1 dev eth0  proto static 
a.b.c.0/24 dev br0  scope link 
a.b.c.0/24 dev eth0  proto kernel  scope link  src a.b.c.38  metric 1 
169.254.0.0/16 dev br0  scope link  metric 1000 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 

在/etc/网络/接口:

auto lo
iface lo inet loopback

auto br0 
iface br0 inet static
    address a.b.c.38
    netmask 255.255.255.0
    network a.b.c.0
    broadcast a.b.c.255
    gateway a.b.c.1
    dns-nameserver XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX
    bridge_ports all
    bridge_stp yes
    bridge_fd 0
    post-up /sbin/ethtool -s eth0 wol g
    post-down /sbin/ethtool -s eth0 wol g

该命令失败:

$ sudo ifdown eth0 && sudo ifup eth0
ifdown: interface eth0 not configured
Ignoring unknown interface eth0=eth0.   

另一个有关桥梁的命令:

$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.14dae9726e93       no              eth0
                                                        vnet0
                                                        vnet1
                                                        vnet2
virbr0          8000.000000000000       yes

这看起来很可疑:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
a.b.c.50                    (incomplete)                              eth0
a.b.c.63                    (incomplete)                              eth0
a.b.c.1             ether   00:00:0c:07:ac:3d   C                     br0
a.b.c.63            ether   4c:72:b9:8f:b8:6c   C                     br0
a.b.c.50                    (incomplete)                              br0
a.b.c.40            ether   52:54:00:2f:79:ac   C                     br0
a.b.c.39            ether   00:25:90:7c:f8:94   C                     br0
a.b.c.1                     (incomplete)                              eth0
a.b.c.48            ether   3c:07:54:13:7c:55   C                     br0
a.b.c.2             ether   f0:f7:55:2a:15:00   C                     br0

答案1

首先,/etc/network/interfaces定义了一个br0接口,但不是eth0接口,因此您当然会ifup eth0失败。您可以尝试。考虑到您的配置,ifdown br0; ifup br0您会看到系统上的默认路由出去br0,而不是。eth0

eth0不应分配任何 IP 地址。

请注意,关闭和打开桥接器可能会中断虚拟机的互联网访问,因此需要重新启动虚拟机(我不确定是否会这样做,但目前我无法测试)。

答案2

似乎有外部原因。交换网络配置为不运行 STP(生成树协议),因此断开了发送 STP 数据包的端口。网络配置bridge_stp yes导致发送这些数据包。但是,目前尚不清楚 VM 客户机如何仍能与外部 Internet 通信。无论如何,问题现在解决了 - 谢谢!

相关内容