LISP协议
LISP协议,即Locator/ID Separation Protocol,位置身份分离协议。它将传统的地址分拆为表明位置的RLOCs(Routing Locators,路由标识符)和表明身份的EIDs(Endpoint Identifiers,节点标识符),也就是位置和身份分离机制。
传统园区网的拓扑基于地址和路由,地址就是拓扑或者位置,它基于vlan和子网,或者说一个地址既代表了一个设备的位置,又代表了该设备的身份。如图12-1所示,位于园区网站点1的10.1.0.1基于vlan,即子网表明了位置和身份,20.1.0.5也如此。
图12-1 传统网络中IP地址集身份和位置于一体
我们再来认识一下图12-2中实施完毕LISP协议之后的拓扑图,读者可以看到在站点1和站点2中同时可能同时存在10.1.0.1的设备,但是它们却具有不同的RLOC,这说明其身份没有变化,但是却有很好的移动,这完全符合现代虚拟化的需求。好吧,读者还不知道什么是RLOC,没关系,后边我们一一作出解释,但读者对比12-1至少会发现站点1用1.1.1.1标识,没错1.1.1.1就代表RLOC。正如前文描述,LISP分离标识符和身份符,在图12-2中,左边站点1.1.1.1代表了位置符,而10.1.0.1代表了身份符,读者觉得右边哪些代表身份符,哪些代表位置符呢?
图12-2 LISP协议中身份和位置分离-设备10.1.0.1可以方便的移动
12.1 什么是LISP协议
在LISP网络中,不同于传统网络架构,它的路由基于RLOC,地址主机基于EID,映射EID到RLOC。表12-1解释了LISP协议中一系列的名称和术语
简写 | 名称 | 简要作用 |
ITR | Ingress Tunnel Router,入向隧道路由器 | 从面向站点接口收到报文 |
ETR | Egress Tunnel Router,出向隧道路由器 | 从面向核心的接口收到报文 |
MR | map resolver 映射解析器 | 从ITR出收到映射请求 |
MS | map server 映射服务器 | LISP站点的ETR在MS注册它们的EID前缀 |
EID | endpoint ID 终点身份符 | 通信终端,现今网络的主机 |
RLOC | Routing Locator路由位置符 | LISP路由器的地址 |
表12-1 LISP术语解释
对于LISP的这些术语,读者可以参看图12-3,LISP站点内的设备即EID需要和其他站点的EID通信,会把数据包发送到xTR设备(流量是双向的,所以该设备是ITR或者ETR),在ITR或者ETR设备上进行LISP的封装或者解封装,没错,是封装,就是我们认识的传统的基于UDP的封装,EID的IP被封装到了内层,而RLOC的地址被封装到了外层,所以只要RLOC地址的可以通过路由查找找到其他EID的RLOC即可,但问题在于我们的最终目的地是其他的EID,而不是RLOC,所以此时还有一个重要的设备,即MS/MR,映射服务器/映射解析器,很多时候它们两个角色处于同1个设备,它的作用就如图中右上角绿色和红色地址的映射。在图12-3中还存在非LISP站点,当然LISP站点照样可以和他们进行通信,在该场景下存在PxTR,即代理xTR设备。
图12-3 LISP整体示意图
我们来了解一下LISP系统中的映射系统,该功能非常类似于DNS(域名解析)系统,DNS为URL解析IP地址,它解决了“谁是”的问题,入图12-4中DNS服务器解析了lisp.cisco.com的地址是153.16.5.29.
LISP把身份标识符解析为位置,即回答了在哪里的问题,如图12-4所示,LISP路由器请求153.16.5.29在哪里,LISP映射系统解析:地址符位于128.107.81.169。
图12-4 LISP映射系统和DNS系统的类似功能
映射系统是LISP协议的控制设备。整个LISP的映射系统(MS)分为映射服务器(MS)和映射解析器(MR)。
映射解析器MR:从ITR出收到映射请求,转发映射请求到映射系统MS;对非LISP站点的请求不发送映射回应。
映射服务器MS:LISP站点的ETR在MS注册它们的EID前缀,请求配置LISP站点策略和认证;通过映射系统收到映射请求,会把它转发到已经注册的ETR。图12-5为MR/MS的示意图,注意此时数据流量的方向为192.168.1.0/24到192.168.2.0/24
图12-5 映射系统示意图
LISP协议的数据转发设备为ITR和ETR,ITR,从面向站点接口收到报文,会把这些报文封装转发到远程的LISP站点或者发送原始报文转发到非LISP站点。ETR,从面向核心的接口收到报文,解封装发送到位于LISP站点的EID。如图12-6所示,从LISP站点1的EID 192.168.1.0/24网络到LISP站点2的192.168.2.0/24网络的数据到达xTR-1,xTR-1封装数据包,外层IP报文的目标地址为远端ETR即,xTR-3;数据到达xTR-3之后,会解封装,此时内层报文的目标地址为原始的192.68.2.0/24网络,故而会到达最终的EID。
图12-6 LISP中的报文转发
在刚才的描述中,我们提到了LISP的封装,那么我们来看一下LISP的封装报文,在RPF6830中,定义了LISP的报头格式,如图12-7所示,外层报头的源目地址为RLOC的地址,而内层地址为EID的地址。中间部分为UDP头部和LISP的头部。
图12-7 LISP报文结构
LISP不仅仅支持IPv4还可以支持多种封装的报文转发,诸如IPv4上的IPv4,IPv4上的IPv6,IPv6上的IPv6,以及IPv6上的IPv4等。图12-8描述了IPv6 over IPv4的转发过程,读者可以看到原始的报文为IPv6地址,在到达RLOC 1.1.1.1之后被LISP封装了头部以及外层IPv4的RLOC地址1.1.1.1到2.1.1.1,该报文到达2.1.1.1.之后解封装为IPv6报文转发到最终的EID 2001:10:2:0::1.
图12-8 IPv6 over IPv4的LISP转发过程
一个EID可能对应多个RLOCs。每一条EID与不同RLOCs的对应关系都带有优先级(Priority)和权重(Weight)两个属性。优先级表明ITR应该优先使用哪个RLOCs,权重说明了怎样在多个目的EID相同的RLOCs之间分配流量。如果一个EID对应每个RLOCs的优先级和权重值都一样,那么流量将在通往所有RLOCs的链路上被均匀分配。
12.2 LISP实现
图12-9 LISP协议实现拓扑
我们在图12-9实现LISP协议,其中EID设备为10.1.0.1和10.2.0.1,R3和R6为xTR,R4为映射系统。
12.2.1 完成路由层面的基础工作
xTR设备之间以及同MS之间需要通信,那么路由是必须的,我们在本例中采用Eigrp协议,EID同其他站点的EID通信,那么可以通过默认路由指向xTR设备即可
R3、R4和R6的基础路由配置:
R3-SITE1(config)#router eigrp 90
R3-SITE1(config-router)# network 33.0.0.0
R3-SITE1(config-router)# network 34.1.1.3 0.0.0.0
!
R4-MS(config)#router eigrp 90
R4-MS(config-router)# network 0.0.0.0
!
R6-SITE2(config)#router eigrp 90
R6-SITE2(config-router)# network 46.1.1.6 0.0.0.0
R6-SITE2(config-router)# network 66.1.1.1 0.0.0.0
R6-SITE2(config-router)#
验证基础的Eigrp邻居和通过Eigrp得到的路由
R4-MS#show ip eigrp neighbors
EIGRP-IPv4 Neighbors for AS(90)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 46.1.1.6 Et0/3 14 00:18:07 10 100 0 4
0 34.1.1.3 Et1/1 11 00:18:07 5 100 0 4
R6-SITE2#show ip route eigrp
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2
i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
ia – IS-IS inter area, * – candidate default, U – per-user static route
o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
a – application route
+ – replicated route, % – next hop override
Gateway of last resort is not set
33.0.0.0/32 is subnetted, 1 subnets
D 33.1.1.1 [90/435200] via 46.1.1.4, 00:17:38, Ethernet0/2
34.0.0.0/24 is subnetted, 1 subnets
D 34.1.1.0 [90/307200] via 46.1.1.4, 00:17:41, Ethernet0/2
44.0.0.0/32 is subnetted, 1 subnets
D 44.1.1.1 [90/409600] via 46.1.1.4, 00:17:38, Ethernet0/2
R6-SITE2#ping 34.1.1.3 //验证数据报文的发送,RLOC之间可以通信
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 34.1.1.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/5 ms
R6-SITE2#ping 44.1.1.1 //验证数据报文的发送,RLOC可以和MS通信
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 44.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
接下来我们需要完成EID的路由实施
RP/0/0/CPU0:XR1-EID#sh run router static
Wed Nov 23 12:54:56.583 UTC
router static
address-family ipv4 unicast
0.0.0.0/0 10.1.0.254
!
R5:
R5-EID(config)#ip route 0.0.0.0 0.0.0.0 10.2.0.254
R5-EID(config)#
读者配置完毕,EID之间并不能通信,因为此时xTR上并没有路由到达EID。只有在完成LISP之后才可以通信
12.2.2 实施LISP协议
我们的配置对象主要涉及R3、R4和R6,各个设备的角色已经在图12-9中表明。
R3-SITE1(config)#router lisp //启动LISP协议
R3-SITE1(config-router-lisp)# eid-table default instance-id 0 //设置EID表默认的实例ID为0,在没有实施VRF的情况下,实施0即可
R3-SITE1(config-router-lisp-eid-table)# database-mapping 10.1.0.0/24 34.1.1.3 priority 1 weight 100 //设置EID和RLOC的映射关系,优先级值越小则该RLOC的优先级越高,该值的范围是0到255,该值为255时表明不能单播转发,如果存在多个RLOC,且优先级相同则负载均衡。权重值取值范围为0到100,该值代表了RLOC如何实现单播报文的负载比例。
R3-SITE1(config-router-lisp-eid-table)# exit
R3-SITE1(config-router-lisp)# !
R3-SITE1(config-router-lisp)# ipv4 itr map-resolver 44.1.1.1 //配置ITR的映射解析器为44.1.1.1
R3-SITE1(config-router-lisp)# ipv4 itr //本设备为ITR设备
R3-SITE1(config-router-lisp)# ipv4 etr map-server 44.1.1.1 key ender //配置ETR的映射服务器为44.1.1.1,认证密码为ender
R3-SITE1(config-router-lisp)# ipv4 etr //本设备为ETR设备
R3-SITE1(config-router-lisp)#
!
R6-SITE2(config)#router lisp
R6-SITE2(config-router-lisp)# eid-table default instance-id 0
R6-SITE2(config-router-lisp-eid-table)# database-mapping 10.2.0.0/24 46.1.1.6 priority 1 weight 100
R6-SITE2(config-router-lisp-eid-table)# exit
R6-SITE2(config-router-lisp)# !
R6-SITE2(config-router-lisp)# ipv4 itr map-resolver 44.1.1.1
R6-SITE2(config-router-lisp)# ipv4 itr
R6-SITE2(config-router-lisp)# ipv4 etr map-server 44.1.1.1 key ender
R6-SITE2(config-router-lisp)# ipv4 etr
!
配置映射系统:
R4-MS(config)#router lisp
R4-MS(config-router-lisp)# site SITE1 //设置站点,命名为SITE1
R4-MS(config-router-lisp-site)# authentication-key ender //设置认证的密码
R4-MS(config-router-lisp-site)# eid-prefix 10.1.0.0/24 //设置该站点的EID前缀
R4-MS(config-router-lisp-site)# exit
R4-MS(config-router-lisp)# !
R4-MS(config-router-lisp)# site SITE2
R4-MS(config-router-lisp-site)# authentication-key ender
R4-MS(config-router-lisp-site)# eid-prefix 10.2.0.0/24
R4-MS(config-router-lisp-site)# exit
R4-MS(config-router-lisp)# !
R4-MS(config-router-lisp)# ipv4 map-server //该设备为映射服务器
R4-MS(config-router-lisp)# ipv4 map-resolver //该设备为映射解析器
R4-MS(config-router-lisp)
验证LISP的实施和状态
R3-SITE1#show ip lisp 0
Instance ID: 0 //配置的LISP 实例
Router-lisp ID: 0
Locator table: default
EID table: default
Ingress Tunnel Router (ITR): enabled //该设备为ITR
Egress Tunnel Router (ETR): enabled //该设备为ETR
Proxy-ITR Router (PITR): disabled
Proxy-ETR Router (PETR): disabled
NAT-traversal Router (NAT-RTR): disabled
Mobility First-Hop Router: disabled
Map Server (MS): disabled
Map Resolver (MR): disabled
Delegated Database Tree (DDT): disabled
Map-Request source: 3.3.3.3
ITR Map-Resolver(s): 44.1.1.1 //映射解析器为44.1.1.1
ETR Map-Server(s): 44.1.1.1 (00:00:48) //映射解析器为44.1.1.1
xTR-ID: 0x679FC9FE-0x397B5F24-0x575124BC-0xC3844226
site-ID: unspecified
ITR Solicit Map Request (SMR): accept and process
Max SMRs per map-cache entry: 8 more specifics
Multiple SMR suppression time: 20 secs
ETR accept mapping data: disabled, verify disabled
ETR map-cache TTL: 1d00h
Locator Status Algorithms:
RLOC-probe algorithm: disabled
LSB reports: process
IPv4 RLOC minimum mask length: /0
IPv6 RLOC minimum mask length: /0
Static mappings configured: 0
Map-cache size/limit: 1/1000
Imported route count/limit: 0/1000
Map-cache activity check period: 60 secs
Total database mapping size: 1
static database size/limit: 1/5000
dynamic database size/limit: 0/1000
Persistent map-cache: interval 01:00:00
Earliest next store: 00:08:12
Location: unix:LISP-MapCache-IPv4-00000000-00003
R3-SITE1#show ip lisp database //验证LISP的数据库
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x1, 1 entries
10.1.0.0/24
Locator Pri/Wgt Source State
34.1.1.3 1/100 cfg-addr site-self, reachable //针对EID10.1.0.0/24的RLOC为34.1.1.3,状态为可达的
R3-SITE1#show ip lisp forwarding eid local //验证本地转发EID
Prefix
10.1.0.0/24
R5-EID#ping 10.1.0.1 //此时通过RLOC封装之后,数据包可以到达其他站点的EID 10.1.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.0.1, timeout is 2 seconds:
..!!!
Success rate is 60 percent (3/5), round-trip min/avg/max = 2/2/3 ms
R3-SITE1#show ip lisp map-cache //查看LISP映射缓存信息
LISP IPv4 Mapping Cache for EID-table default (IID 0), 2 entries
0.0.0.0/0, uptime: 01:05:04, expires: never, via static send map-request
Negative cache entry, action: send-map-request
10.2.0.0/24, uptime: 00:06:46, expires: 23:53:59, via map-reply, complete
Locator Uptime State Pri/Wgt
46.1.1.6 00:06:46 up 1/100 //到达远端的RLOC 46.1.1.6的信息
此时EID之间已经可以完成通信。我们来看一个真实的通过LISP转发的报文情况,如图12-10所示,读者可以从中看到UDP报头,也可以看到源端口号为1283,目的端口号为标准的4341,UDP报文承载了LISP数据(并没有看到和标准的LISP一样的LISP报头和IP报头)。
在做好实验之后,我们可以考虑一下LISP的扩展性问题。
可扩展性是衡量一个网络协议的基本指标之一,一个能处理好10个节点通信的网络不一定能够应对100个节点之间的数据交互,这其中增加的难度往往不止是将处理能力提高10倍这么简单。LISP在计算数据包的目的路由时需要找到EID与RLOCs的对应关系,由于EID和RLOCs是两个独立的地址空间,它们之间可能没有任何规律,因此EID和RLOCs之间是一个近似Full Mesh(全网状)的对应关系,一个LISP网络的边缘路由器即XTR需要知道对应每一个站点EID的RLOCs是多少,才能够正确地转发数据包。随着LISP网络的扩张,这张对应关系表变得越来越长,当收到新的数据包时,每次查找所用的时间也越来越长。当网络规模达到一定程度时,在一个路由器”肚子”里装下整张大网的拓扑关系就显得不太现实了,传统的动态路由协议如OSPF、IS-IS利用了IP地址空间的层级关系,将一个网段内的地址合并为一条路由,配合链路状态值,大大缩减了路由器需要了解的路由表长度。但在LISP中,EID和RLOCs之间没有层级关系,传统的方法不再起作用,需要新思路来解决新问题。
LISP给出的答案是LISP-ALT(LISP-Alternative-Topology LISP替代拓扑),它是一个架构在基础网络上的虚拟拓扑,专门用来找出EID与RLOCs的对应关系。凡是LISP的ITR和ETR都加入到LISP-ALT中,它们之间形成EBGP(External BGP–外部边界网关)邻居关系,所有的BGP(Border Gateway Protocol–边界网关路由协议)信令都通过GRE协议封装,这些ITR和ETR就利用BGP交换EID的可达信息。换句话说,LISP节点之间运行封装的BGP协议,在现有网络上形成一个叠加的网络,ITR和ETR通过这个叠加的网络学习EID和RLOCs的对应关系。在传统的路由协议中没有地方可供LISP传递EID和RLOCs的对应关系,有了LISP-ALT之后,LISP的节点就有了一个专用渠道交换EID的可达信息。
新的IP包头和LISP-ALT构成了LISP协议的精髓,正是这两个要素保证了一个IP数据包能够通过一种完全不同的方式被安全送到目的地。当一个ITR收到一个节点发送过来的数据包后,它首先查看自己的缓存内是否有目的节点的EID-RLOCs对应关系,如果这个关系存在,则ITR为数据包加上外层包头,写入找到的RLOCs并转发出去,对应的ETR收到IP包后,发现目的RLOCs正好是自己,于是去掉外层包头,将原始数据包送给目的站点。
在LISP网络内可以配置一组专门用于路由查询的路由器。如果ITR在缓存内找不到目的EID与RLOCs的对应关系,则会在外层包头里写入目的站点的EID,然后通过LISP- ALT发送给一个指定的LISP路由器,这个路由器被授权完成EID-RLOCs的对应工作,保存有比较完整的EID-RLOCs信息。当指定的路由器收到这个数据包后,发现外层包头和内层包头都是同样的EID,于是它判断出这是一个查询报文,于是,它首先将数据包去除外层包头并送往目的站点,然后向ITR发送一条应答报文,说明目的EID和RLOCs的对应关系,ITR收到这条报文之后会将这个EID-RLOCs关系缓存下来,接下来收到的IP包就可以直接发送给对应的ETR了。
通过这样一个过程,在LISP网络中只需要设置几个指定的路由器保存比较完整的EID-RLOCs关系,其他ITR和ETR只需要保存常用的对应关系;如果碰到不认识的EID,只需要向指定的路由器发起查询即可