---
title: 如何定位虚拟机网络问题
description: "在使用虚拟机的过程中，出现了虚拟机网络不通的问题。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengqemukvm_03_0013.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengqemukvm_03_0013.html
indexId: 9ff581e538663197f434726be1d402af9cdd867df6a710238727de35edc1238c75
---
# 如何定位虚拟机网络问题


#### 问题现象描述

在使用虚拟机的过程中，出现了虚拟机网络不通的问题。


#### 关键过程、根本原因分析

定位虚拟机网络不通的问题是一个多步骤的过程，需要系统地检查网络配置的各个方面。


#### 结论、解决方案及效果

请遵循以下操作步骤系统地排查虚拟机网络不通的问题，从基本的网络配置到系统参数结合抓包，逐步定位并最终找到解决方案。

1. 检查虚拟机内的网络配置。
  仔细核对IP地址、网关和子网掩码，确保它们配置正确且没有网段冲突。

2. 检查防火墙和iptables规则。
防火墙和iptables规则可能会阻止网络通信。

  a. 开关防火墙后，需要重启libvirtd服务以使更改生效，命令为：

```
systemctl restart libvirtd.service
```


  b. 如果宿主机同时运行Docker，可能需要添加特定的iptables规则来保证虚拟机与Docker容器共存场景的网络通信正常。例如添加如下iptables规则以允许virbr0网桥内的流量转发。

```
iptables -I FORWARD -i virbr0 -o virbr0 -j ACCEPT
```


3. 检查系统参数。

  a. 检查ip_forward配置，即检查“net.ipv4.ip_forward”参数的配置是否已经开启，值为“1”时表示开启。

```
sysctl -a|grep ip_forward
```


  b. 开启ip_forward。

    - 通过命令临时设置。

```
sysctl -w net.ipv4.ip_forward=1
```


    - 通过修改配置永久设置。
      在/etc/sysctl.conf中添加或修改“net.ipv4.ip_forward”参数值，改为net.ipv4.ip_forward=1。

4. 针对OVS + DPDK的特殊配置。
  如果使用Open vSwitch（OVS）与DPDK，需要配置内存大页并开启共享内存。该配置的虚拟机XML配置文件内容参考如下：

  1 2 3 4 5 6 7 8 9 10 11 12 <memoryBacking> <hugepages> <pagesize unit="KiB">1048576</pagesize> </hugepages> </memoryBacking> …… <cpu mode="host-passthrough" check="none"> <topology sockets="1" dies="1" clusters="1" cores="8" threads="1"/> <numa> <cell id="0" cpus="0-7" memory="33554432" unit="KiB" memAccess="shared"/> </numa> </cpu>

5. 使用tcpdump进行抓包定位。
结合ping命令排查ICMP的数据包在网络中的传输路径并定位网络问题。

  a. 使用ping命令判断网络连通性。
    ping命令是初步判断网络问题的有效工具，结合抓包工具可以帮助确定具体是哪一层网络不通。

  b. 安装tcpdump工具，用于捕获和分析网络数据包。

```
yum install tcpdump
```


  c. 侦听特定接口上的ICMP数据包，从而帮助定位问题。

```
tcpdump -i eth0 icmp
```


6. 检查VLAN配置。

  a. 如果需要配置VLAN，请确保接入的交换机已正确配置并允许相应的VLAN通过。
  b. 虚拟机内部的网卡也需要正确配置VLAN。
