在上篇博客中我们完成了 KVM 虚机的安装,但是我发现虚机内的网络是不通的(当然了,在写这篇博客的时候已经把上篇博客中的配置文件修改好了,网络也是通的了,嘻嘻),所以这篇博客总结了一下虚机的网络连接方式及其配置。在虚机中,常见的虚拟机的连网方式有两种,一种是 NAT 方式,另一种是 bridge (桥接模式),其它的模式比如 host-only 模式在这里就不讨论了。

前置知识

  当我们安装了 KVM 之后,如果你用 ifconfig 看一下,其实发现我们的宿主机上已经多了一块虚拟网络接口,这是因为 libvirt 启动后会在 host 上生成一个 virbr0(虚拟网桥),host 上面的所有虚拟机都是通过这个 virbr0 连接起来。默认情况下 virbr0 使用的是 NAT 模式,所以这种情况下,guest 只能通过 host 才能访问外部。

对于 virbr0 产生的作用和默认连接方式,我截取下方参考博客中的一张图片来说明:

有的小伙伴可能纳闷了,为什么 virbr0 中的 inet(IP地址) 为上图中红色方框中的呢?让我们来看一下主机中的虚拟网络(虚机的网络连接)情况,如下图所示:

我们发现有一个名称为 default 的虚拟网络,让我们打开一下它的配置文件看一下,输入下面命令进行查看:

注:该 default 网桥的配置文件 default.xml 可通过 sudo find / -name default.xml 命令进行查找,我的在: /etc/libvirt/qemu/networks 目录下,如果找不到,新建即可,内容如下图。

查看结果(一般下图中的配置文件名称要和网桥名相同,这样用 brctl show 命令和用 virsh net-list 命令查看就一样了):

NAT模式连接

  这下明白了吧,这个配置文件是默认安装的时候已经写死的,这里面的 ip 地址就是我们在 ipconfig 命令中看到的;上篇博客中的 centos_config.xml 虚拟机配置文件中有关网络部分中指定了 source 选项为 default 的原因明白了吧,就是把虚拟机开启后生成的虚拟网卡绑定到这个网桥上面(虚机在配置文件中指定了 mac 地址,当此网桥文件开启后,此服务会启动一个 dhcp 服务,该服务是 libvirt 模拟实现的,客户可通过 dhcp 服务在该配置中指定的 ip 地址范围内随机分配一个 ip)。从上图中可以看出该配置模式为 mode='nat',这样就可以通过主机进行与外网进行通信了。当然我们也可以自己定义自己的上述配置文件从而生成另外一个网卡,然后通过 在主机网络配置文件中 修改 source 中填上你新建的网络名称就可以进行绑定了,前提是你定义的网桥必须要跑起来(virsh net-define 命令定义一个网桥,virsh net-start 网桥名 命令进行网桥服务开启,可通过 virsh net-list 命令进行查看网桥状态,像上图中所示,如果 State 为 active 表示已开启成功,具体操作可以类比下面的桥接网络的操作过程)。

  我们登录进去客户机之后可以 用命令 ip a 查看(类似于 Ubuntu ifconfig),发现网络 ens3 并没有被分配 ip 地址:

此时我们可以用命令 dhclient 进行向 dhcp 服务器申请 IP地址,然后再次进行查看:

此时测试网络是否是能和外网连通的:

桥接模式

  如果你想通过 ssh 连接你的客户机,可能就需要通过 桥接模式进行连接了,下图是桥接模式的大概方式,首先建立一个网桥,然后虚拟机的虚拟网卡都挂载(插入)到该网桥上,另一端接到物理网卡上,这样根据 网桥的二层转发的工作模式,就可以把帧转发到各个虚拟机所在的网桥插口上了。那如果我们虚拟机想要通过网桥进行连接,则需要三步:

step 1: 建立一个网桥:

  编辑一个网桥配置文件,命名为:demo0.xml ,内容如下图所示

  定义这个网桥:

  开启这个网桥:

查看是否已经开启(可以看到已经开启):

用 ifconfig 查看一下:

用 brctl show 命令看一下:

step 2: 首先开启虚拟机(再做上述操作之前,我已经把虚拟机 undefine 了,然后修改了配置文件,把网络部分的配置 source 的名称改为了 demo0,下图只截取了虚拟机配置文件中部分,完整版本请看上篇博客):

  重新定义并且开启虚拟机:

  此时用 brctl show 命令看一下(可以看到 虚拟机开启后产生的虚拟网卡已经插入了demo0 网桥):

step 3: 把物理网卡也插入网桥(通过上述 ifconfig 命令可以看到我的物理网卡名称为  ens33):

  此时,虚拟机就能和物理机一样的访问外网了,我们进入虚机试一下(如果看不到 虚拟机的网络有 ip 地址,和上面一样执行 dhclient 命令即可):

注:从上图中可以看到 此时虚拟机的 IP 地址是和 物理机的 IP 地址是同一网段的,具体原因请搜索 网桥和NAT 连接的方式进行查看。

  查看一下是否能通外网:

至此,我们就完成了虚机和客户机的网络连接了!

参考资料:

https://blog.csdn.net/hzhsan/article/details/44653403

https://www.linuxidc.com/Linux/2013-08/88720.htm

https://www.linuxidc.com/Linux/2013-08/88517.htm

VMware 虚拟网络拓扑图讲解:

https://blog.51cto.com/wangchunhai/381225

另外也感谢同事 振浩 的热情讲解!

  

KVM---虚拟机网络管理的更多相关文章

  1. kvm虚拟机网络管理

    一.Linux Bridge网桥 管理 # brctl show 显示当前网桥连接状态 # brctl addbr br1vlan-10 添加网桥 # brctl delbr br1vlan-10 删 ...

  2. KVM -> 虚拟机磁盘管理_03

    1.KVM磁盘管理 1.KVM qcow2.raw.vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162 raw: ...

  3. OpenStack入门篇(四)之KVM虚拟机介绍和管理

    1.查看虚拟机,启动虚拟机 [root@linux-node1 ~]# virsh list --all Id Name State --------------------------------- ...

  4. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  5. QEMU/KVM虚拟机安装配置

    1.安装相关组件: [root@KVM ~]# yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v ...

  6. kvm虚拟机静态和动态迁移

    一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储 ...

  7. zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡

    安装完zabbix服务器之后 只有两个探索规则模版,挂载点探索和网卡探索 场景描述:想使用zabbix监控kvm虚拟机的网卡的流量情况, 获取虚拟机和网卡对应关系 虚拟机 S-1 virsh domi ...

  8. Centos7下搭建KVM虚拟机

    PRE-INSTALL ============================================================= kvm相关安装包及其作用 qemu-kvm 主要的K ...

  9. 11.安装KVM虚拟机

    安装KVM虚拟机是一大难题,不按照虚拟机物理机128G内存和强劲的CPU无法充分利用.也不便于后面的jenkins自动部署.安装KVM虚拟机过程我是借鉴了网上下载的马哥linux   KVM那块的内容 ...

  10. 如何克隆kvm虚拟机

    关于如何使用kvm虚拟化技术创建虚拟机,这里有一系列博客讲的已经非常清楚了,这里不再赘述,不过其中有些小坑可能需要大家注意: 0. 写在创建虚拟机之前(即教程的系列三之前) 1. 确认防火墙是否关闭, ...

随机推荐

  1. Flink Task 并行度

    并行的数据流 Flink程序由多个任务(转换/运算符,数据源和接收器)组成,Flink中的程序本质上是并行和分布式的. 在执行期间,流具有一个或多个流分区,并且每个operator具有一个或多个ope ...

  2. HTML5 新增元素梳理

    HTML5新增元素如下图: <canvas> 新元素 <canvas> 标签定义图形,比如图表和其他图像,该标签基于javascript的绘图api 新多媒体元素 <au ...

  3. 每天一点点之vue框架开发 - vue-router路由在循环中携带参数

    场景:要实现一个标签云,通过循环把标签渲染,然后单击标签的时候实现跳转,跳转路由一样,通过唯一参数来实现请求不同的数据 因此,就需要在for循环中来携带参数,本节所讲的是路由使用对象的形式(别名)来实 ...

  4. Mybatis实体类的映射文件中select,insert语句使用

    id:在命名空间中唯一的标识符,可以被用来引用这条语句. parameterType:设置传入这条语句的参数的数据类型,如int,String...... resultType:设置从这条语句中返回数 ...

  5. POJ1833 & POJ3187 & POJ3785

    要是没有next_permutation这个函数,这些题觉得还不算特别水,不过也不一定,那样可能就会有相应的模板了.反正正是因为next_permutation这个函数,这些题包括之前的POJ1226 ...

  6. redis性能测试方法

    redis本身设计为单线程服务器,性能本身并不随着多核而提高,但是会随着cpu本身而改变,AMD的可能只有Intel一半的性能,Intel是最好的选择. 性能会随着连接数的增多而下降,30000大概只 ...

  7. 面试官,不要再问我“Java虚拟机类加载机制”了(转载)

    关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...

  8. 微信小程序手绘地图实现之《Canvas》

    环境:微信SDK2.9+   + uniapp (可切换直接使用.map.js不限制环境) 正题: 先创建一个地图组件 <template> <view class="cu ...

  9. 海外Essay写作如何减少重复用词

    很多海外留学生在Essay写作时往往不善于对单词进行变化,不能将同一个意思用不同的方式表达出来,使得Essay显得单调乏味最终拿不到高分.小编建议大家应该尽量减少Essay写作中的重复用词.本文将为大 ...

  10. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的配置及常用属性

    作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦.这一切都离不 ...