OpenStack入门篇(十九)之网络虚拟化基础
1.Linux Bridge的基本概念
假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是:
如何让 VM1 能够访问外网?
① 给 VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge br0 将 eth0 和 vnet0 连接起来,如下图所示
Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机或者 Hub。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。
在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据;
反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。
现在我们增加一个虚机 VM2,如下图所示
VM2 的虚拟网卡 vnet1 也连接到了 br0 上。
现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。
2.理解virbr0
virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。
virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。
[root@linux-node1 ~]# ifconfig
brqc39c1348-5a: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255
ether :0c::4c:ef: txqueuelen (Ethernet)
RX packets bytes (357.5 MiB)
RX errors dropped overruns frame
TX packets bytes (275.9 MiB)
TX errors dropped overruns carrier collisions eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet6 fe80::20c:29ff:fe4c:ef31 prefixlen scopeid 0x20<link>
ether :0c::4c:ef: txqueuelen (Ethernet)
RX packets bytes (433.6 MiB)
RX errors dropped overruns frame
TX packets bytes (408.2 MiB)
TX errors dropped overruns carrier collisions lo: flags=<UP,LOOPBACK,RUNNING> mtu
inet 127.0.0.1 netmask 255.0.0.0
inet6 :: prefixlen scopeid 0x10<host>
loop txqueuelen (Local Loopback)
RX packets bytes (3.8 GiB)
RX errors dropped overruns frame
TX packets bytes (3.8 GiB)
TX errors dropped overruns carrier collisions tapae04cfac-d0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
ether 6a:ef::f7:c5: txqueuelen (Ethernet)
RX packets bytes (438.0 B)
RX errors dropped overruns frame
TX packets bytes (2.1 MiB)
TX errors dropped overruns carrier collisions virbr0: flags=<UP,BROADCAST,MULTICAST> mtu
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether :::8b:7a: txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions 查看虚拟机
[root@linux-node1 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos 关闭 查看虚拟机网卡信息
[root@linux-node1 ~]# virsh domiflist centos
接口 类型 源 型号 MAC
-------------------------------------------------------
- network default virtio :::e4:: 查看桥接网卡信息,可以看到virbr0-nic桥接到virbr0网卡上
[root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
brqc39c1348-5a .000c294cef31 no eth0
tapae04cfac-d0
virbr0 .5254008b7a13 yes virbr0-nic
启动虚拟机
[root@linux-node1 ~]# virsh start centos
域 centos 已开始 [root@linux-node1 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
centos running
使用TightVNC连接192.168.56.11,查看网卡信息
[root@linux-node1 ~]# ssh 192.168.122.169
root@192.168.122.169's password:
Last login: Tue Dec :: ping外网可通
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) () bytes of data.
bytes from 14.215.177.39: icmp_seq= ttl= time=13.4 ms
bytes from 14.215.177.39: icmp_seq= ttl= time=9.14 ms
bytes from 14.215.177.39: icmp_seq= ttl= time=8.47 ms
bytes from 14.215.177.39: icmp_seq= ttl= time=15.5 ms
bytes from 14.215.177.39: icmp_seq= ttl= time=8.85 ms
bytes from 14.215.177.39: icmp_seq= ttl= time=8.85 ms
^C
--- www.a.shifen.com ping statistics ---
packets transmitted, received, % packet loss, time 5012ms
rtt min/avg/max/mdev = 8.473/10.716/15.538/2.741 ms
没有问题,可以访问外网,说明 NAT 起作用了。
需要说明的是,使用 NAT 的虚拟机 centos可以访问外网,但外网无法直接访问 centos。
因为 centos 发出的网络包源地址并不是 192.168.122.169,而是被 NAT 替换为宿主机的 IP 地址了。
这个与使用 br0 不一样,在 br0 的情况下,centos 通过自己的 IP 直接与外网通信,不会经过 NAT 地址转换。
OpenStack入门篇(十九)之网络虚拟化基础的更多相关文章
- OpenStack入门篇(九)之nova服务(控制节点)的部署与测试
1.Nova介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点 ...
- 无废话ExtJs 入门教程十九[API的使用]
无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...
- Bootstrap入门(十九)组件13:页头与缩略图
Bootstrap入门(十九)组件13:页头与缩略 1.页头 2.默认的缩略图 3.自定义缩略图 页头组件能够为 h1 标签增加适当的空间,并且与页面的其他部分形成一定的分隔.它支持 h1 标签内内嵌 ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...
- VS2010/MFC编程入门之三十九(文档、视图和框架:概述)
前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...
- KVM 网络虚拟化基础
网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...
- O009、KVM 网络虚拟化基础
参考https://www.cnblogs.com/CloudMan6/p/5289590.html 网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源, ...
- python全栈开发从入门到放弃之socket网络编程基础
网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务 ...
- 网络虚拟化基础协议之Geneve
网络虚拟化最基础的技术莫过于分层(Overlay.Underlay),要实现分层有两种手段.一个是映射(Mapping),一个是封装(Encapsulation). 映射,主要思路是转发时替换报文语义 ...
随机推荐
- 什么时候会执行viewDidLoad方法
什么时候会执行viewDidLoad方法 这个博文是为了解释,为何有时候,你给属性赋值,在viewDidLoad方法中却取不到值的原因. 第一种情况,presentViewController会执行被 ...
- UINavigationController便于pop的category
UINavigationController便于pop的category 效果图: 这个category是为了方便UINavigationController用于跳转到指定的控制器当中,用于跳级,如果 ...
- mysql安装--常见
1.安装报如下错: 分析: 你的系统太老了 Win7 \win8啥的吧 这是缺失C++ 依赖包 去MS下一个 补丁安装以后再重新执行就好了 Update for Visual C++ 2013 and ...
- wxpython 编程触发菜单或按钮事件
最近逐步熟悉wxpython,编写了几个小小功能的GUI程序,GUI中免不了会有在代码中触发控件事件的业务需求.在其他Gui界面的语言中有postevent.triggerevent 调用事件名称的函 ...
- HashMap集合特点
>HashMap集合特点 HashMap:是基于哈希表的Map接口实现. 哈希表的作用是用来保证键的唯一性的. 不明白,直接看HashMap的put方法源码 //HashM ...
- mysql的表和约束操作
在创建表是默认为加上数据引擎和字符集,如创建一个student表,代码如下: create table students(id int unsigned zerofill auto_increment ...
- [EffectiveC++]item45:运用成员函数模板接受所有兼容类型
- ZT 二分插入排序也称折半插入排序
二分插入排序也称折半插入排序,基本思想是:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 ...
- HBase搭建部署
基础环境准备 zookeeper集群(参开地址:https://www.cnblogs.com/starzy/p/10376642.html) Hadoop集群(参考地址:https://www.cn ...
- java Math数学工具及Random随机函数
Math类包含用于执行基本数学运算的方法,如绝对值.对数.平方根和三角函数.它是一个final类,其中定义的都是一些常量和静 态方法.常用方法如下:public static double sqrt( ...