在上篇博客中我们完成了 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. 《新标准C++程序设计》3.6-3.7(C++学习笔记9)

    一.成员对象和封闭类 (1)定义 一个类的成员变量如果是另一个类的对象,就称之为“成员对象”. 包含成员对象的类叫封闭类. (2)封闭类构造函数的初始化列表 在构造函数中添加初始化列表的写法: 类名: ...

  2. SQL分组后获取其中一个字段最大值的整条记录

    SELECT * FROM( SELECT id,name,counts,createDate,row_number() OVER(partition BY name ORDER BY createD ...

  3. Flutter如何引用第三方库并使用

    Flutter如何引用第三方库并使用 https://www.jianshu.com/p/bbda7794345e Flutter官网点击访问Flutter教程(一)Flutter概览Flutter教 ...

  4. Essay引用如何最大限度的降低抄袭率

    今天要说到让无数人恨得要死.为了降重改的哭天喊地的“Paraphrase”.毕竟引用不是打两个引号复制粘贴就能凑字数完事的,无论国内外,都有查重率这个大敌在等着你.想要引用别人的论点论据,就少不了需要 ...

  5. 干货分享:学术Essay写作流程及写作技巧详解

    Academic essay是指留学生作业中的一种,其范围非常广泛,可以是任何一种话题.而学术essay主要是指其中比较正式的.客观的话题,有明确的研究目的与研究对象.例如“Research on t ...

  6. RDD转为Dataset如何指定schema?

    与RDD进行互操作 Spark SQL支持两种不同方法将现有RDD转换为Datasets.第一种方法使用反射来推断包含特定类型对象的RDD的schema.这种基于反射的方法会导致更简洁的代码,并且在编 ...

  7. 第十四篇Django-model进阶(中介模型,查询优化,extra,整体插入)

    Django-model进阶(中介模型,查询优化,extra,整体插入) 阅读目录(Content) 中介模型 查询优化 extra 整体插入 中介模型 处理类似搭配 pizza 和 topping ...

  8. Day 19:Properties配置文件类、打印流(printStream) 、 编码与解码

    Properties(配置文件类): 主要用于生产配置文件与读取配置文件的信息. Properties要注意的细节:  1. 如果配置文件的信息一旦使用了中文,那么在使用store方法生成配置文件的时 ...

  9. Mysql: if 结构

    if结构 语法 if  条件1  then  语句1; elseif   条件2   then  语句2; ... else 语句n;   # 可以不写 应用场合:应用在begin end 中 SEL ...

  10. AVCodec 结构体

    typedef struct AVCodec { // 标示Codec 的名字, 比如,"h264" "h263" 等. const char *name; / ...