KVM---虚拟机网络管理
在上篇博客中我们完成了 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---虚拟机网络管理的更多相关文章
- kvm虚拟机网络管理
一.Linux Bridge网桥 管理 # brctl show 显示当前网桥连接状态 # brctl addbr br1vlan-10 添加网桥 # brctl delbr br1vlan-10 删 ...
- KVM -> 虚拟机磁盘管理_03
1.KVM磁盘管理 1.KVM qcow2.raw.vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162 raw: ...
- OpenStack入门篇(四)之KVM虚拟机介绍和管理
1.查看虚拟机,启动虚拟机 [root@linux-node1 ~]# virsh list --all Id Name State --------------------------------- ...
- 基于本地存储的kvm虚拟机在线迁移
基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...
- QEMU/KVM虚拟机安装配置
1.安装相关组件: [root@KVM ~]# yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v ...
- kvm虚拟机静态和动态迁移
一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储 ...
- zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡
安装完zabbix服务器之后 只有两个探索规则模版,挂载点探索和网卡探索 场景描述:想使用zabbix监控kvm虚拟机的网卡的流量情况, 获取虚拟机和网卡对应关系 虚拟机 S-1 virsh domi ...
- Centos7下搭建KVM虚拟机
PRE-INSTALL ============================================================= kvm相关安装包及其作用 qemu-kvm 主要的K ...
- 11.安装KVM虚拟机
安装KVM虚拟机是一大难题,不按照虚拟机物理机128G内存和强劲的CPU无法充分利用.也不便于后面的jenkins自动部署.安装KVM虚拟机过程我是借鉴了网上下载的马哥linux KVM那块的内容 ...
- 如何克隆kvm虚拟机
关于如何使用kvm虚拟化技术创建虚拟机,这里有一系列博客讲的已经非常清楚了,这里不再赘述,不过其中有些小坑可能需要大家注意: 0. 写在创建虚拟机之前(即教程的系列三之前) 1. 确认防火墙是否关闭, ...
随机推荐
- 用 Python监控了另一半的每天都在看的网站,我发现了一个秘密
阅读文本大概需要 5 分钟. ! 需求: (1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中 (2)将这个txt文件发送给指定的邮箱地址(你的邮 ...
- JAVA作用域和排序算法介绍
一.作用域 1.作用域的概念 所谓的作用域是指引用可以作用到的范围. 一个引用的作用域是从引用定义位置到包裹它的最近的大括号的结束位置.只有在作用域范围内才可以访问到引用,超出作用域无法访问引用. 定 ...
- YAML的基本使用
YAML 在Python中的应用 https://www.cnblogs.com/shaosks/p/7344771.html
- mount(挂载)
拷贝文件到优盘 sdcm@sdcm:/mnt$ sudo fdisk -l Disk /dev/sdc: 15.5 GB, 15529279488 bytes255 heads, 63 sectors ...
- 堆栈 pop push
1.什么是堆栈 1.1堆栈 堆栈可以看作程序的心脏 所有重要的数据都会在这个里面体现(比如运算一道算术题,虽然还没算出最终答案,但是你在算出最终结果前的一些过程值可以放进堆栈) 堆栈这块内存比较特殊, ...
- JS页面校验
结构: 1.导入正则表达式校验包:https://blog.csdn.net/weixin_44718300/article/details/88726653 2.页面校验.HTML <!DOC ...
- C#应用程序结构
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- SQL约束攻击
本文转载自https://blog.csdn.net/kkr3584/article/details/69223010 目前值得高兴的是,开发者在建立网站时,已经开始关注安全问题了--几乎每个开发者都 ...
- Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch
今天向大家介绍的是多线程开发中的一些辅助类,他们的作用无非就是帮助我们让多个线程按照我们想要的执行顺序来执行.如果我们按照文字来理解Semaphore.CyclicBarrier.CountDownL ...
- Day 10:浅谈正则表达式
正则表达式 以检验扣扣号是否合法为例引入正则表达式 要求:校验QQ号,要求:必须是5~15位数字,0不能开头. 1.没有正则表达式 public class Demo1 { public static ...