在上篇博客中我们完成了 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. 二十五、JavaScript之查找字符串中的字符串indexOf和lastIndexOf的用法

    一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...

  2. python函数-迭代器&生成器

    python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...

  3. javascript如何获取复选框中的值?

    思路:获取checkbox对象→循环checkbox数组,根据checked属性判断是否选中→使用value属性获取选中项的值.实例演示如下: 1.HTML结构 <form> <in ...

  4. 从零开始Windows环境下安装python+tensorflow

    从零开始Windows环境下安装python+tensorflow 2017年07月12日 02:30:47 qq_16257817 阅读数:29173 标签: windowspython机器学习te ...

  5. schema 文件约束

    1. 在javaproject 中创建一个.xsd 文件 <?xml version="1.0" encoding="UTF-8" ?> <! ...

  6. android——TextView默认文字开发时显示运行时隐藏

    根布局添加属性: xmlns:tools="http://schemas.android.com/tools" textview添加属性: tools:text="默认文 ...

  7. C语言:大数求和

    点击获取题目 1410: [蓝桥杯]高精度加法 时间限制: 1 Sec  内存限制: 256 MB提交: 28  解决: 20[状态] [提交] [命题人:外部导入] 题目描述 输入两个整数a和b,输 ...

  8. php和js的小区别

    1.今天看了下php的api感觉还可以,不是很难,可能没看到深入的地方, (1)和js很相似 目前感觉它和js的最大区别 js的  点  被替换成 -> function setCate($pa ...

  9. LVS三种模式区别

    参考文档 http://www.magedu.com/65436.html 名词:CIP 客户端IP地址   VIP:即DS服务器上的代理IP地址,也是客户端访问的执行IP地址 1.NAT模式 ①.客 ...

  10. Maven:org.apache.maven.archiver.MavenArchiver.getManifest错误

    Eclipse导入maven多模块工程时报错org.apache.maven.archiver.MavenArchiver.getManifestorg.apache.maven.archiver.M ...