---
title: （可选）配置虚拟机网络
description: "虚拟机安装完成后，为了可以从局域网的其他PC访问到KVM虚拟机上的服务，一种可行的方法是将KVM虚拟机（GUEST）以桥接方式与宿主机（HOST）连接，使虚拟机可以获得局域网中一个独立的IP地址。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengkvm_03_0017.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengkvm_03_0017.html
indexId: 8874a8e24be370f2ba76319ee633a56aeb718cc3464c8ea10d2653ccf715a16671
---
# （可选）配置虚拟机网络

虚拟机安装完成后，为了可以从局域网的其他PC访问到KVM虚拟机上的服务，一种可行的方法是将KVM虚拟机（GUEST）以桥接方式与宿主机（HOST）连接，使虚拟机可以获得局域网中一个独立的IP地址。

如果没有从局域网的其他PC访问KVM虚拟机的需求，则无需进行网络配置。

#### 配置网桥

1. 查看网络。

```
ip a
```


  本示例目标是将KVM虚拟机桥接到enp3s0所在网段（192.168.224.XXX，子网掩码是255.255.255.0）。

2. 查看网桥，确认没有网桥br0。
  1 brctl show

3. 停止NetworkManager服务，防止后面修改的配置被意外生效。
  1 systemctl stop NetworkManager

4. 创建网桥br0。

  a. 打开文件ifcfg-br0。
    1 vi /etc/sysconfig/network-scripts/ifcfg-br0

  b. 按“i”进入编辑模式，添加如下内容：

```
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.224.2
NETMASK=255.255.255.0
GATEWAY=192.168.224.1
STP=on
DELAY=0.0
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
- 示例中的IPADDR、NETMASK和GATEWAY按实际情况修改。
- 如果使用如下操作创建网桥，在宿主机重启后会失效，示例中的IP地址请按实际情况修改。

```
brctl addbr br0
brctl addif br0 enp3s0
ifconfig br0 192.168.224.2/24
ifconfig br0 up
```


5. 修改文件ifcfg-enp3s0，使enp3s0网口连接br0网桥。

  a. 打开文件ifcfg-enp3s0。
    1 vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

  b. 按“i”进入编辑模式，将BOOTPROTO设置为none，ONBOOT设置为yes，注释掉原有的IP、掩码、网关，添加如下内容。

```
BRIDGE=br0
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
6. 使ifcfg-br0和ifcfg-enp3s0生效。

  - CentOS系统
    1 systemctl restart network

  - openEuler系统
    1 systemctl restart NetworkManager

    重启网络服务后，若配置仍未生效，一方面需要检查以上操作配置是否正确，另一方面可尝试重启宿主机然后再重启网络服务。

7. 查看网络。
  1 ip a

8. 查看网桥。
  1 brctl show

  br0的interfaces下出现了enp3s0，则网桥配置成功。


#### 配置虚拟机

1. 修改虚拟机配置。

  a. 打开虚拟机配置文件。
    1 vi /etc/libvirt/qemu/vm1.xml

    或

    1 virsh edit vm1

  b. 在<devices>标签下找到<interface>标签。
    若不存在<interface>标签，则直接在<devices>标签下添加如下内容： 1 2 3 4 5 6 <interface type='bridge'> <mac address='52:54:00:7a:95:48'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <interface type='bridge'>表示虚拟机将使用桥接模式。 <mac address='52:54:00:7a:95:48'/>中的MAC地址在安装虚拟机后自动生成，将被用作虚拟机网卡eth0的MAC地址，通常情况不需要修改，若修改需要确认不能和网桥br0的MAC地址相同。 <source bridge='br0'/>表示将与宿主机中的br0网桥连接。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
2. 使虚拟机配置生效。
  1 systemctl restart libvirtd

3. 关闭虚拟机。

  a. 查看虚拟机状态。
    1 virsh list --all

  b. 关闭虚拟机。
    1 virsh shutdown vm1

  c. 确认虚拟机是否已关闭。
    1 virsh list --all

4. 启动虚拟机。

```
virsh start vm1
virsh list --all
```


5. 查看网桥。
  1 brctl show

  若br0的interfaces下出现“vnet0”，则表示虚拟机vm1成功连接网桥，只有vm1.xml配置生效且vm1启动成功，vnet0才存在。

6. 登录虚拟机。
  1 2 virsh list --all virsh console vm1 --force

7. 配置网卡。

  a. 查看网络。

```
ip a
```


  b. 修改网卡配置。

    - CentOS系统

      1. 编辑ifcfg-eth0文件。
        1 vi /etc/sysconfig/network-scripts/ifcfg-eth0

      2. 按“i”进入编辑模式，修改如下内容。
        只需要修改少许部分，IPADDR配置为与宿主机同网段的未被使用的IP地址，请按实际情况填写。

```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=aca69508-f4c7-4ff2-9cc5-668ac45e429e
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.224.3
NETMASK=255.255.255.0
GATEWAY=192.168.224.1
```


      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。

    - openEuler系统

      1. 打开ifcfg-enp1s0文件。
        1 vi /etc/sysconfig/network-scripts/ifcfg-enp1s0

      2. 按“i”进入编辑模式，修改如下内容。

```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp1s0
UUID=dedf1652-5eff-3fb4-be23-c658b834774f
DEVICE=enp1s0
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
IPADDR=192.168.224.13
NETMASK=255.255.255.0
GATEWAY=192.168.224.1
```


        IPADDR配置为与宿主机同网段的未被使用的IP地址，请按实际情况填写。

      3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
8. 生效网卡。

  - CentOS系统

```
systemctl restart network
ip a
```


  - openEuler系统

```
systemctl restart NetworkManager
ifdown enp1s0
ifup enp1s0
ip a
```


#### 验证网络

1. 验证网桥是否配置完成，分别在虚拟机与宿主机、虚拟机与局域网内其他主机、宿主机与局域网内其他主机进行互ping。

  - 若均无法ping通，则需要对网桥br0进行问题分析，进入    2
继续操作。
  - 若虚拟机只与宿主机可以互通，虚拟机与局域网内其他主机无法互通，则可能需要关闭宿主机的网络过滤器，进入    4
继续操作。
  - 都可以ping通，表示网桥连接已配置完成，则结束验证操作，忽略以下步骤。
2. 定位问题。

  a. 在宿主机对网桥br0抓包。

```
yum -y install tcpdump
tcpdump -i br0
```


  b. 根据抓包信息进行问题定位并修复。
3. 再次执行1。
4. 禁用网络过滤器。

  a. 编辑“sysctl.conf”文件。
    1 vim /etc/sysctl.conf

  b. 按“i”进入编辑模式，在文件中添加如下配置。

```
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 重新加载kernel参数使配置生效。
    1 sysctl -p

5. 再次执行1。
