网络虚拟化-- linux虚拟网络基础

linux虚拟网络基础
1 Device
在linux里面devic(设备)与传统网络概念里的物理设备(如交换机、路由器)不一样,Linux所说的设备,其背后指的是一个相似于数据结构、内核模块或设备驱动这样的含义。就是说device可能只是软件系统里的一个驱动,一个函数接口。
2 Tap
Tap位于二层数据链路层,tun位于三层网络层,二者在linux里的函数结构几乎一致,除了一个flag值区分tap/tun。在linux中二层特指以太网(Ethernet)(传统网络里二层分Ethernet,P2P,HDLC,FR,ATM),所以有时tap也叫“虚拟以太设备”。有意思的是linux建立tap须要用到tun模块。Linux建立tap/tun都使用tun模块。linux

3 Namespace
Namespace相似传统网络里的VRF,与VRF不一样的是:VRF作的是网络层三层隔离。而namespace隔离的更完全,它作的是整个协议栈的隔离,隔离的资源包括:UTS(UnixTimesharing System的简称,包含内存名称、版本、 底层体系结构等信息)、IPS(全部与进程间通讯(IPC)有关的信息)、mnt(当前装载的文件系统)、PID(有关进程ID的信息)、user(资源配额的信息)、net(网络信息)。
从网络角度看一个namespace提供了一份独立的网络协议栈(网络设备接口、IPv4/v六、IP路由、防火墙规则、sockets等),而一个设备(Linux Device)只能位于一个namespace中,不一样namespace中的设备能够利用vethpair进行桥接。
网络虚拟化-- linux虚拟网络基础
4 veth pair
veth pair不是一个设备,而是一对设备,以链接两个虚拟以太端口。操做vethpair,须要跟namespace一块儿配合,否则就没有意义。如图
网络虚拟化-- linux虚拟网络基础
5 Bridge
在Linux的语境里,Bridge(网桥)与Switch(交换机)是一个概念。由于一对veth pair只能链接两台device,所以若是须要多台设备互联则须要bridge。
如图:4个namespace,每一个namespace都有一个tap,每一个tap与网桥vb1的tap组成一对veth pair,这样,这4个namespace就能够二层互通了。
网络虚拟化-- linux虚拟网络基础
6 Router
Linux建立Router并无像建立虚拟Bridge那样,有一个直接的命令brctl,并且它间接的命令也没有,不能建立虚拟路由器……由于它就是路由器(Router) !
如图:咱们须要在router(也就是咱们的操做系统linux上增长去往各NS的路由)。
网络虚拟化-- linux虚拟网络基础
7 tun
tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能。Linux原生支持的三层隧道。支持隧道状况:ipip(ipv4 in ipv4)、gre(ipv4/ipv6 over ipv4)、sit(ipv6 over ipv4)、isatap(ipv6/ipv4隧道)、vti(ipsec接口)。
学过传统网络GRE隧道的人更容易理解,如图:
NS1的tun1的ip 10.10.10.1与NS2的tun2的ip 10.10.20.2创建tun
NS1的tun的ip是10.10.10.1,隧道的外层源ip是192.168.1.1,目的ip是192.168.2.1,是否是跟GRE很像。
网络虚拟化-- linux虚拟网络基础
8 iptable
咱们一般把iptable说成是linux的防火墙,实际上这种说法并不许确。实际上iptable只是一个运行在用户空间的命令行工具,真正实现防火墙功能的是内核空间的netfilter模块。
这里咱们先知道防火墙执行模块netfilter位于内核空间,命令行iptable位于用户空间。咱们在经过iptable配置的防火墙策略(包括NAT)会在netfilter执行。
iptables有5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
 PREROUTING:报文进入网络接口还没有进入路由以前的时刻;
 INPUT:路由判断是本机接收的报文,准备从内核空间进入到用户空间的时刻;
 FORWARD:路由判断不是本机接收的报文,须要路由转发,路由转发的那个时刻;
 OUTPUT:本机报文须要发出去 通过路由判断选择好端口之后,准备发送的那一刻;
 POSTROUTING:FORWARD/OUTPUT已经完成,报文即将出网络接口的那一刻。
DNAT用的是PREROUTING,修改的是目的地址,SNAT用的是POSTROUTING,修改的是源地址。
Iptable有5个表:filter,nat,mangle,raw, security,raw表和security表不经常使用。主流文档都是说5链4表,没有包括security表。
 Raw表——决定数据包是否被状态跟踪机制处理
 Mangle表——修改数据包的服务类型、TTL、而且能够配置路由实现QOS
 Nat表——用于网络地址转换(IP、端口)
 filter表——过滤数据包
 security 表(用于强制访问控制网络规则,例如:SELinux)
4个表的优先级由高到低的顺序为:raw-->mangle-->nat-->filter。RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即再也不作地址转换和数据包的连接跟踪处理了。RAW表能够应用在那些不须要作nat的状况下,以提升性能。如大量访问的web服务器,可让80端口再也不让iptables作数据包的连接跟踪处理,以提升用户的访问速度。
下面讲下数据包流向与处理:web

  1. 若是是外部访问的目的是本机,好比用户空间部署了WEB服务,外部来访问。数据包从外部进入网卡----->PREROUTING处理----->INPUT处理----->到达用户空间程序接口,程序处理完成后发出----->OUTPUT处理----->POSTROUTING处理。每一个处理点都有对应的表,表的处理顺序按照raw-->mangle-->nat-->filter处理。
  2. 若是用户访问的目的不是本机,linux只是一个中转(转发)设备,此时须要开启ip forward功能,数据流就是进入网卡-----> PREROUTING处理-----> FORWARD处理-----> POSTROUTING处理。
    网络虚拟化-- linux虚拟网络基础8.1 NATNetfilter中的NAT有三个点作处理,(1) NAT-PREROUTING (DNAT)数据报文进入PREROUTING,NAT模块就会处理,好比用户空间的WEB服务私网地址192.168.0.1,对外提供公网ip是220.1.1.1。当外部ip访问220.1.1.1时,PREROUTING接受数据包,NAT模块处理将目的ip 220.1.1.1转换为私网ip192.168.0.1,这就是DNAT。(2) NAT-POSTROUTING (SNAT)用户空间应用程序访问外部网络,好比用户空间应用程序访问114.114.114.144,私网ip 192.168.0.1,此时数据包流经POSTROUTING,NAT模块会处理,将192.168.0.1转换为220.2.2.2,对于目的ip114.114.114.114来讲,就是220.2.2.2访问它,这就是SNAT。(3) NAT-OUTPUT (DNAT)咱们把内核空间想象成一台防火墙,防火墙自身对外发送报文访问外部时,就在OUTPUT作DNAT,此时不须要再POSTROUTING点再作NAT。由于此时从OUTPUT出来的源IP已是公网地址了8.2 Firewall防火墙根据规则执行accept/reject动做,防火墙规则的元素以下:入接口、出接口、协议、源地址/子网、目的地址/子网、源端口、目的端口。Netfilter中的Firewall会在这三个点进行处理:INPUT/FORWARD/OUTPUT8.3 Manglemangle表主要用于修改数据包的ToS( Type of Service,服务类型)、 TTL(Time to Live,生存周期)以及为数据包设置Mark标记,以实现QoS(Qualityof Service,服务质量)调整以及策略路由等应用。Netfilter每一个点均可以作mangle。9 总结tap、tun、vethpair在Linux中都被称为设备,可是在与平常概念的类比中,经常被称做接口。而bridge和router这些平常称为设备的再linux中反而不称为设备。linux利用namespace作隔离,Bridge提供二层转发功能,Router提供三层转发功能。Router还经常借助iptable提供SNAT/DNAT功能。Bridge也经常借助iptable提供Firewall功能。
相关文章
相关标签/搜索