鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

配置网络(桥接模式)

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

配置网桥

  1. 查看网络。
    ip a

    找一个网卡状态为UP且已配置IP的网口(IP地址根据实际情况配置),本测试目标是将KVM虚拟机桥接到enp5s0所在网段(192.168.100.XXX,子网掩码是255.255.255.0)。

  2. 查看网桥,确认没有网桥br0。
    1
    brctl show
    
  3. 停止NetworkManager服务,防止后面修改的配置被意外生效。
    1
    systemctl stop NetworkManager
    
  4. 创建网桥br0。
    1. 打开文件ifcfg-br0。
      1
      vi /etc/sysconfig/network-scripts/ifcfg-br0
      
    2. 添加如下内容后,保存退出。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      DEVICE=br0
      ONBOOT=yes
      TYPE=Bridge
      NM_CONTROLLED=yes
      BOOTPROTO=static
      IPADDR=192.168.100.2
      NETMASK=255.255.255.0
      GATEWAY=192.168.100.1
      STP=on
      DELAY=0.0
      

      如果使用如下操作创建网桥,在宿主机重启后会失效。

      1
      2
      3
      4
      5
      6
      brctl addbr br0
      brctl addif br0 enp5s0
      ifconfig br0 192.168.100.2/24
      service network restart
      brctl show
      ip a
      
  5. 修改文件ifcfg-enp5s0,使enp5s0网卡连接br0网桥。
    1. 备份文件ifcfg-enp5s0。
      1
      mv /etc/sysconfig/network-scripts/ifcfg-enp5s0 /home/
      
    2. 打开文件ifcfg-enp5s0。
      1
      vi /etc/sysconfig/network-scripts/ifcfg-enp5s0
      
    3. 添加如下内容后,保存并退出。
      1
      2
      3
      4
      5
      6
      HWADDR=24:a5:2c:17:bb:39
      DEVICE=enp5s0
      TYPE=Ethernet
      ONBOOT=yes
      NM_CONTROLLED=yes
      BRIDGE=br0
      

      查看enp5s0的HWADDR值,回显中ether后面的mac地址值就是HWADDR值。

      ip a
  6. 使ifcfg-br0和ifcfg-enp5s0生效。
    • CentOS系统:
      1
      systemctl restart network
      
    • openEuler系统:
      1
      systemctl restart NetworkManager
      

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

  7. 查看网络。
    1
    ip a
    

    确认br0和enp5s0的配置已经生效。

  8. 查看网桥。
    1
    brctl show
    

    br0的interfaces下出现了enp5s0,则网桥配置成功。

配置虚拟机

  1. 修改虚拟机配置。
    1. 打开虚拟机配置文件。
      1
      2
      3
      vi /etc/libvirt/qemu/vm1.xml
      或者
      virsh edit vm1
      
    2. <devices>标签下找到<interface>标签,将br1修改为br0,保存退出。

      若不存在<interface>标签,则直接在<devices>标签下添加如下内容:

      1
      2
      3
      4
      5
      6
      <interface type='bridge'>
            <mac address='52:54:00:7a:95:48'/>
            <source bridge='br1'/>
            <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网桥连接。
  2. 生效虚拟机配置。
    1
    systemctl restart libvirtd
    
  3. 关闭虚拟机。
    1
    virsh list --all
    
    1
    virsh shutdown vm1
    
    1
    virsh list --all
    

    确认虚拟机State为shut off。

  4. 启动虚拟机。
    1
    virsh start vm1
    
    1
    virsh list --all
    

  5. 查看网桥。
    1
    brctl show
    

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

  6. 登录虚拟机。
    1
    virsh list --all
    
    1
    virsh console vm1 --force
    
  7. 配置网卡。
    1. 查看网络。
      1
      ip a
      
    2. 修改网卡配置。
      • CentOS系统:
        1. 编辑ifcfg-eth0文件。
          1
          vi /etc/sysconfig/network-scripts/ifcfg-eth0
          
        2. 修改如下内容后(通常只需要修改黑色加粗部分,IPADDR配置为与宿主机同网段的未被使用的IP地址),保存退出。
           1
           2
           3
           4
           5
           6
           7
           8
           9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          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.100.3
          NETMASK=255.255.255.0
          GATEWAY=192.168.100.1
          
      • openEuler系统:
        1. 编辑ifcfg-enp1s0文件。
          1
          vi /etc/sysconfig/network-scripts/ifcfg-enp1s0
          
        2. 修改如下内容后(通常只需要修改黑色加粗部分,IPADDR配置为与宿主机同网段的未被使用的IP地址),保存退出。
           1
           2
           3
           4
           5
           6
           7
           8
           9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          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.100.13
          NETMASK=255.255.255.0
          GATEWAY=192.168.100.1
          
  8. 生效网卡。
    • CentOS系统:
      1
      systemctl restart network
      
      1
      ip a
      

    • openEuler系统:
      1
      systemctl restart NetworkManager
      
      1
      ifdown enp1s0
      
      1
      ifup enp1s0
      
      1
      ip a
      

验证网络

  1. 虚拟机与宿主机互ping。
  2. 虚拟机与局域网内其他主机互ping。
  3. 宿主机与局域网内其他主机互ping。
    • 若无法ping通,尝试在宿主机对网桥br0抓包,然后分析问题。
      1
      yum -y install tcpdump
      
      1
      tcpdump -i br0
      
    • 若都可ping通即表示桥接配置完成。
    • 若虚拟机只与宿主机可以互通,虚拟机与局域网内其他主机无法互通,则可能需要关闭宿主机的网络过滤器。
    1. 禁用网络过滤器。
      1. 编辑sysctl.conf文件。
        1
        vim /etc/sysctl.conf
        
      2. “i”进入编辑模式,在文件中添加如下配置。
        1
        2
        3
        net.bridge.bridge-nf-call-ip6tables = 0
        net.bridge.bridge-nf-call-iptables = 0
        net.bridge.bridge-nf-call-arptables = 0
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    2. 重新加载kernel参数使配置生效。
      1
      sysctl -p