我无法可靠地触发这个,虽然如果我一次启动许多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
答案 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