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,只需要向指定的路由器发起查询即可.