随机无法连接到libvirt

时间:2015-10-08 22:52:24

标签: qemu kvm libvirt

我无法可靠地触发这个,虽然如果我一次启动许多vms然后尝试连接到其中一些,我会遇到这种情况:

$ ping 192.168.122.135
PING 192.168.122.135 (192.168.122.135) 56(84) bytes of data.
From 192.168.122.1 icmp_seq=1 Destination Host Unreachable
From 192.168.122.1 icmp_seq=2 Destination Host Unreachable
From 192.168.122.1 icmp_seq=3 Destination Host Unreachable

请注意,我创建和启动的所有虚拟机都不会发生这种情况,只会少数(随机)。

获取ip 192.168.122.135的vm在其域xml中具有以下网络:

<interface type='network'>
  <mac address='52:54:00:3d:72:ab'/>
  <source network='default'/>
  <target dev='vnet0'/>
  <model type='virtio'/>
  <alias name='net0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</interface>

默认网络定义为(是的,当前正在运行22个vms):

<network connections='22'>
  <name>default</name>
  <uuid>69674b8b-f067-4513-b594-3e52360f391b</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

来自vnet0的ifconfig的输出(由VM的网络域xml引用)和virbr0(由default网络使用,如上所示):

$ sudo ifconfig vnet0
vnet0     Link encap:Ethernet  HWaddr fe:54:00:3d:72:ab
          inet6 addr: fe80::fc54:ff:fe3d:72ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:425 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1304 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:57503 (57.5 KB)  TX bytes:67257 (67.2 KB)

$ sudo ifconfig virbr0
virbr0    Link encap:Ethernet  HWaddr fe:54:00:08:e9:a4
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:882508 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2527165 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:93980992 (93.9 MB)  TX bytes:3047773583 (3.0 GB)

以下是ip route list的部分输出:

192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

上面的路由输出让我觉得它应该正在工作。但不是。它有时只会失败,而且大部分时间都有效。

为什么我无法从主机连接到来宾(192.168.122.135)?

我最初使用的是过滤器,但是从VM的域xml中删除过滤器对随机显示的这种情况没有影响。如果我同时启动多个虚拟机,我可以让它发生在很多虚拟机上。有些虚拟机工作得很好,允许我连接。

另外,我使用的是ubuntu 14.04.3:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:        14.04
Codename:       trusty

使用内核3.19.0-30-generic

更多信息 - virsh版本:

$ virsh --version
1.2.2

libvirtd版本:

$ libvirtd --version
libvirtd (libvirt) 1.2.2

4 个答案:

答案 0 :(得分:1)

我没有足够的声誉发表评论......但我对你可以尝试进一步探讨这个问题的建议提出了一些建议。

问题:在vnet0上的192.168.122.X子网中分配IP地址是否可以做任何事情?配置的路由似乎表明您的流量将转到 virbr0 ,因为它具有 192.168.122.1 IP地址。如果您无法ping通该子网中的任何其他设备,那么我怀疑这是问题。

如果这不能让你到处......

  • 主机/虚拟机上的数据包跟踪

    尝试在virbr0和内部VM接口上执行数据包转储。 Ping虚拟机,查看您看到的流量类型。

    sudo tcpdump -n -i virbr0 -v "icmp or arp"

    根据您在那里看到的内容,将有助于缩小问题的根源。如果您甚至没有在该界面上获取ping,那么这是主机上的路由问题。如果ping进入,但VM没有看到它们,那么它就是libvirt网络的网络/路由问题。

    我建议您使用工作虚拟机执行上述操作,因此您可以参考比较流量。

  • 检查ARP缓存

    发生这种情况时,检查主机上的ARP缓存。缓存中是否存在mac地址?也许它变得越来越糟......

    转储arp缓存:

    # arp

  • 检查您的libvirt日志

    如果已配置,libvirt将使用'libvirtd'标记登录syslog。检查配置以确保已启用此配置。这似乎不太可能是一个libvirt问​​题,但打开日志记录也不会有什么坏处。

    启用此设置

    # vi /etc/libvirt/libvirtd.conf

    添加行

    log_outputs_"1:syslog:libvirtd"

    重启libvirt

    # service libvirt-bin restart

答案 1 :(得分:0)

我在CentOS 7主机中具有相同的网络设置和类似问题。最终,事实证明问题是来宾VM的防火墙设置阻止了回应请求和其他外部连接。更改防火墙设置后,问题就解决了。

答案 2 :(得分:0)

我有类似的问题。我只是尝试按照以下命令检查计算机是否正确安装。

lsmod | grep kvm

如果显示的是kvm详细信息,则表明机器已正确安装。

之后重启服务

service libvirtd restart

还使用以下命令检查网关

netstat -rn

答案 3 :(得分:0)

我的情况是,我有一个安装Libvirt的硬件服务器。

在这台服务器上,我在安装libvirt的位置创建了VM,然后我得到了随机的网络中断,并使用192.168.122.1进行ping响应:

From 192.168.122.1 icmp_seq=1 Destination Host Unreachable

我已修复,这是在硬件服务器上删除默认的libvirt网络,如下所示:

virsh net-destroy default
virsh net-undefine default