Neutron的两种实现方式

OpenStack Neutron实现

 

最早期的实现是单一平面,路由器使用的还是物理路由器,代表一个共享网络必须在同一个网段 ,相当于实现了一个二层交换机功能

 

 

 到现在能够支持多租户隔离,多平面等功能,路由器和交换机都实现了虚拟化

 

Neutron + SDN 实现

 

 

 因为单纯的虚拟化路由器和交换机在效率上还是不能和硬件相比,还有硬件厂商也不同意不然自家设备卖不出去,便一起出了这款模型,SDN控制器负责对物理设备进行管理,SDN控制面负责定义规则,数据面负责根据规则进行转发

 

虚拟网络基础

tap设备 : 虚拟网卡,绑定给虚机

 

 

namespace : 和C++的namespace一样的作用,目的是将资源隔离,比如进程

 

 

veth pair : 一对 tap设备,用于两台虚机通信

Bridge : 用于多台机器间通信,因为多台机器如果只用veth pair的话需要建立很多对,就用了一个交换机坐中间点

 

 Router : 本身就是一个路由器

 

 

 

tun 设备:目的是将不同地方的二层网络汇合成为一个大二层网络

 

 

 

 

iptables : 实现防火墙 NAT功能 , iptables内置三张表  filter (防火墙),nat(NAT), mangle(流量整形,修改数据包内容)

 

 

 

 

 

 NAT:C类地址公网地址短缺,将私有IP映射到公网IP上获得上网的功能

静态NAT: 一个私有ip 对应 一个公网ip,对应关系是确定的

动态NAT: 用于私有ip数量> 公网ip数量的情况,但是同时上线的私有ip数量<=公网ip数量的情况,之间的对应关系是动态不确定的

端口多路复用/PAT:用于只有一个公网IP的情况下,利用端口来区分不同的私有IP

SNAT/DNAT:

  SNAT 内部地址要访问公网,内部地址自动转换为公有IP 

  DNAT 内部对外提供服务,外部访问内网时候,公网IP代为接收消息,然后内部再做地址转换

 

Firewall:根据规则拦截放行包

 

 

 mangle