【银河麒麟】virt-manager虚拟机之间网络不通问题

【概述】

在两个银河麒麟V10服务器系统上分别通过virt-manager创建一个V4虚拟机,其网络为桥接模式。问题情况为:虚拟机能ping通宿主机、网关和另一台服务器,但虚拟机之间无法相互ping通;且宿主机在ping其中一台虚拟机的同时,无法ping通另一台。本文通过tcpdump抓包的方式分别对这两种问题现象进行分析,最终定位为两个虚拟机的mac地址冲突导致。


【分析过程】

现象一:虚拟机互 Ping不通

1. 操作步骤

第一步:在虚拟机A(192.168.1.200)上ping 192.168.1.201

复制代码
ping  192.168.1.201

第二步:在虚拟机B(192.168.1.201)上抓包

复制代码
tcpdump -i enp3s0 icmp or arp -e -nn > /tmp/vm_b_capture.txt

2. 抓包日志分析:

  • 时间点: 10:52:18.240056 附近
  • 过程:
    • 请求: 虚拟机 .200...39)询问:"谁有 .201?"
    • 自问自答: 由于 .200 错误地认为自己就是 .201,它立刻回复:".201 在我这(MAC: ...39)"。
    • 死循环: 当流量真正发给 .201 时,.200 收到了包,发现自己既是发送方又是接收方,导致逻辑混乱,无法正确回包。
  • 现象: 直接导致 Destination Host Unreachable 报错。
  • **结论:**虚拟机mac地址冲突

现象二:宿主机在ping其中一台虚拟机的同时,无法ping通另一台

1. 操作步骤

第一步:宿主机(192.168.1.100)同时打开三个终端

第二步:第一个终端负责抓包,抓取 ARP 协议(看谁在应答)和 ICMP 协议(看 Ping 包去了哪里)

复制代码
tcpdump -i br0 arp or icmp -e -nn > /tmp/host_ping_conflict-1.pcap
# -i: 指定网桥接口 ( br0)
# -e: 显示链路层头信息(关键!能看到源MAC和目的MAC)
# -n: 不解析域名

第三步:第二和第三个终端同时分别ping虚拟机A(192.168.1.200)和虚拟机B(192.168.1.201)

2. 抓包日志分析:

查看抓包日志cat /tmp/host_ping_conflict-1.txt,发现192.168.1.200和192.168.1.201两个虚拟机的mac地址冲突了,都为52:54:00:be:7f:39

【解决方法】

1、查看虚拟机名称、mac地址:确认mac地址冲突

2、关闭一台虚拟机,修改其mac地址即可(这里将末位39改为33)