Loading

虚拟化技术:网络管理(八)

八、网络管理

1. qemu-kvm支持的网络

1.1 基于NAT

image-20230314110721094


1.2 基于桥接(网桥)

image-20230314111739161


1.3 基于用户自定义的隔离网络

image-20230314111901205


1.4 基于直通网卡的网络

本文不实验此类型!


1.5 支持的网卡类型

image-20230314112025885

通常主流就是用RTL8139、e1000,还有用的较多的是virtio。因为virtio作为半虚拟化方式,能减少一定开销。


2. virsh管理网络的命令

virsh
    net-autostart                  自动开始网络
    net-create                     从一个 XML 文件创建一个网络
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    销毁(停止)网络
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    XML 中的网络信息
    net-edit                       为网络编辑 XML 配置
    net-event                      Network Events
    net-info                       网络信息
    net-list                       列出网络
    net-name                       把一个网络UUID 转换为网络名
    net-start                      开始一个(以前定义的)不活跃的网络
    net-undefine                   undefine a persistent network
    net-update                     更新现有网络配置的部分
    net-uuid                       把一个网络名转换为网络UUID
    net-port-list                  list network ports
    net-port-create                create a network port from an XML file
    net-port-dumpxml               network port information in XML
    net-port-delete                delete the specified network port

3. 了解KVM的默认网络

下面通过网桥管理命令查看现有的网桥情况,KVM默认的网络模式是NAT,让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机。

image-20230314112912552


在libvirt目录中能看到网络配置的详细情况。

image-20230314113209006


通过ifconfig -a看到这个网络内的详细信息,在1.1里面的图中,virbr0还充当着dhcp、dns、网关的角色,所以它是需要有IP的。

image-20230314113327539

Tips:virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。


如何理解呢?通过NAT方式与外面相通,在虚拟机层面会有一个虚拟网卡eth0,此时这个虚拟网卡eth0实则对应的就是宿主机的vnet0网卡。virbr0充当虚拟交换机,同时virbr0-nic是一个桥接器,相当于接收此NAT网络下的所有流量(从1.1的图可以看出)。从下图可以看出,虚拟接口和物理接口之间没有连接关系。

img


那数据是如何到达外网的呢?

1.首先需要开启ipv4转发功能

2.数据从虚拟机虚拟网卡vnet经过虚拟交换机virbr0与virbr0-nic的网桥通道

3.然后再经iptable进行处理从宿主机网卡转发出去


下面是iptables的策略

image-20230314114841887


宿主机的路由表信息,宿主机的默认路由走的eth1(我的环境是eth1可以访问外网)

image-20230314114308393


那么从虚拟机进行一个ping外网看看是如何,数据包的目的地址114.114.114.114得走默认路由,同时iptables有相关转发策略,那么宿主机会对数据包进行解封装,将源地址替换为eth1的ip地址,实现虚拟机与外网通信。那么外网回包到宿主机再经iptables进行处理后匹配路由规则就能转发到响应的网桥通道,到达相应的虚拟网卡(也就是虚拟机里面啦)

image-20230314115442346


4. 创建基于NAT的网络

从libvirt中复制一份网络配置,进行修改。主要修改bridge name,ip、dhcp范围和删除uuid、mac。

image-20230314140608586


将网络配置的xml文件通过virsh net-define进行加载到libvirt中,再启动网络池和设置自启动。

image-20230314140749892


下面通过在线添加虚拟网卡看看

image-20230314141123239


查看虚拟机的网卡信息

image-20230314141136596


已经看到有两个网卡,同时禁用第一张网卡进行ping测试,确保是从新添加的网卡出去。

image-20230314141300994


卸载网卡

image-20230314141459517


5. 创建基于桥接(网桥)的网络

先看看桥接网络的基本原理,Bridge方式即虚拟网桥的网络连接方式,桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。

img


首先确定哪张网卡要用来做桥接,比如说用宿主机的eth0做桥接。那么下面需要先备份网卡配置文件,然后再进行修改。

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0.bak
[root@localhost network-scripts]# vim ifcfg-eth0
[root@localhost network-scripts]# vim ifcfg-br0

#此配置就是将eth0桥接到br0
[root@localhost network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0

#br0网卡的配置
[root@localhost network-scripts]# cat ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.15.15
NETMASK=255.255.255.0
GATEWAY=192.168.15.2
STP="on"
DELAY="0.0"

#检查好后进行重启网络
[root@localhost network-scripts]# systemctl restart network

查看网卡信息

image-20230314143317679


下面通过virsh添加网络

image-20230314150219149


查看window7虚拟机,是有新的网卡,由于我vmware没有开启该网络dhcp分配,所以虚拟机获取不了IP,手工改一下,然后从物理机ping到虚拟机里面,实现物理机与vmware的KVM虚拟机中的window7虚拟机互通。

image-20230314150541991


成功互通,实则KVM主机中的window虚拟机网络桥接在KVM主机eth0上,但KVM主机的eth0是vmware中的虚拟网络,我物理机自然也有vmware的虚拟网络,这样实现的互通。

image-20230314150632553

image-20230314150728723


6. 创建基于用户自定义的隔离网络

这个网络就比较好理解,只有在同一个虚拟网络中才能进行互通。下面继续编辑网络xml文件,然后进行添加虚拟网络。

[root@localhost ~]# cd /etc/libvirt/qemu/networks/
[root@localhost networks]# cat isolation.xml
<network>
  <name>isolation</name>
  <bridge name='virbr2' stp='on' delay='0'/>
  <domain name='isolation'/>
  <ip address='172.16.1.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='172.16.1.128' end='172.16.1.254'/>
    </dhcp>
  </ip>
</network>

#如果不需要dhcp,直接下面配置即可。
<network>
  <name>isolation</name>
  <bridge name='virbr2' stp='on' delay='0'/>
  <domain name='isolation'/>
</network>

通过virsh进行添加虚拟网络并启动和设置自启动。

image-20230314152415882


下面通过一台linux和window虚拟机连接在isolation这个虚拟网络上。

image-20230314153556704

image-20230314153647040


posted @ 2023-09-17 09:21  YinJayChen  阅读(143)  评论(0编辑  收藏  举报