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