MPLS系列之四:MPLS Internet Accress 【访问Internet 三种方
作者:互联网
说明
在之前的MPLS ***中,是一张MPLS的网,现在越来越多的业务需求,所以ISP在提供MPLS ***的服务同时,还提供Router-Intenet的访问,现在ISP把Router-Intenet和MPLS网整合在一块。
在MPLS ***中实现Router-Intenet访问,主要是VRF的路由表跟global的路由表中是独立存在的,所以实现的话 需要把路由泄露进VRF和global,这样达到访问的目的。
主要分为三种
1、分布式访问 :各个分支站点分开实现
2、集中式访问:这个主要是总部有防火墙之类的,要求分部都从总部走。
3、VRF-aware NAT :这个由运营商来完成,而不需要客户来完成。
CE之间运行RIP来完成,MPLS *** 底层用ISIS来构建,每个路由器都有个loopback口。其余的都是基本配置了。
Router-PE1(config)#int s1/0
Router-PE1(config-if)#ip add 12.1.1.1 255.255.255.0
Router-PE1(config-if)#no shut
Router-PE1(config-if)#int lo 0
Router-PE1(config-if)#ip add 1.1.1.1 255.255.255.255
P(config)#int s1/0
P(config-if)#ip add 12.1.1.2 255.255.255.0
P(config-if)#no shut
P(config-if)#int lo 0
P(config-if)#ip add 2.2.2.2 255.255.255.255
P(config-if)#int s1/1
P(config-if)#ip add 23.1.1.1 255.255.255.0
P(config-if)#no shut
Router-PE2(config)#int s1/1
Router-PE2(config-if)#ip add 23.1.1.2 255.255.255.0
Router-PE2(config-if)#no shut
Router-PE2(config-if)#int lo 0
Router-PE2(config-if)#ip add 3.3.3.3 255.255.255.255
Router-PE2(config-router)#int s1/0
Router-PE2(config-if)#ip add 34.1.1.1 255.255.255.0
Router-PE2(config-if)#no shut
Router-Intenet(config)#int s1/0
Router-Intenet(config-if)#ip add 34.1.1.2 255.255.255.0
Router-Intenet(config-if)#no shut
Router-Intenet(config-if)#ip add 5.5.5.5 255.255.255.255
Router-CE1(config)#int f0/0
Router-CE1(config-if)#ip add 192.168.1.1 255.255.255.0
Router-CE1(config-if)#no shut
Router-CE1(config-if)#int lo 0
Router-CE1(config-if)#ip add 1.1.1.1 255.255.255.255
Router-CE2(config)#int lo 0
Router-CE2(config-if)#ip add 2.2.2.2 255.255.255.255
Router-CE2(config-if)#int f0/0
Router-CE2(config-if)#ip add 192.168.2.1 255.255.255.0
Router-CE2(config-if)#no shut
这里注意的是客户路由 1.1.1.1 跟MPLS 内部的不会冲突的。
MPLS路由运行
Router-PE1(config)#int s1/0
Router-PE1(config-if)#ip router isis
Router-PE1(config-if)#router isis
Router-PE1(config-router)#log-adjacency-changes
Router-PE1(config-router)#net 49.0000.0000.0000.0001.00
Router-PE1(config-router)#passive-interface lo0
Router-PE1(config-router)#is-type level-1
P(config-if)#int s1/0
P(config-if)#ip router isis
P(config-if)#int s1/1
P(config-if)#ip router isis
P(config-if)#router isis
P(config-router)#log-adjacency-changes
P(config-router)#net 49.0000.0000.0000.0002.00
P(config-router)#passive-interface lo
P(config-router)#is-type level-1
Router-PE2(config-if)#int s1/1
Router-PE2(config-if)#ip router isis
Router-PE2(config-if)#router isis
Router-PE2(config-router)#log-adjacency-changes
Router-PE2(config-router)#net 49.0000.0000.0000.0003.00
Router-PE2(config-router)#passive-interface lo0
Router-PE2(config-router)#is-type level-1
在ISIS中,默认是level 1-2的路由,这里没必要所以 level1就够了,pass接口除了让这个接口不发送hello以外,还等于宣告ISIS了。
MPLS BGP部署,这里就不重新分配标签了,单域分析起来很简单。
Router-PE1(config)#mpls ldp router-id lo0
Router-PE1(config)#int s1/0
Router-PE1(config-if)#mpls ip
P(config)#mpls ldp router-id lo0
P(config)#int s1/0
P(config-if)#mpls ip
P(config-if)#int s1/1
P(config-if)#mpls ip
Router-PE2(config)#mpls ldp router-id lo0
Router-PE2(config)#int s1/1
Router-PE2(config-if)#mpls ip
Router-PE1(config)#router bgp 1
Router-PE1(config-router)#bgp router-id 1.1.1.1
Router-PE1(config-router)#neighbor 3.3.3.3 remote 1
Router-PE1(config-router)#neighbor 3.3.3.3 upda lo 0
Router-PE1(config-router)#address-family ***v4
Router-PE1(config-router-af)#neighbor 3.3.3.3 activate
Router-PE2(config-if)#router bgp 1
Router-PE2(config-router)#bgp router-id 3.3.3.3
Router-PE2(config-router)#neighbor 1.1.1.1 remote 1
Router-PE2(config-router)#neighbor 1.1.1.1 upda lo 0
Router-PE2(config-router)#neighbor 34.1.1.2 remote 2
Router-PE2(config-router)#address-family ***v4
Router-PE2(config-router-af)#neighbor 1.1.1.1 activate
Router-Intenet(config)#router bgp 2
Router-Intenet(config-router)#bgp router-id 5.5.5.5
Router-Intenet(config-router)#neighbor 34.1.1.1 remote 1
Router-Intenet(config-router)#network 5.5.5.5 mask 255.255.255.25
这里要应用到IPv4的BGP,要做intetnet访问 ,所以就没关闭了。
VRF划分
Router-PE1(config)#ip vrf A
Router-PE1(config-vrf)#rd 1:1
Router-PE1(config-vrf)#route-target 1:1
Router-PE1(config-vrf)#int f0/0
Router-PE1(config-if)#ip vrf forwarding A
Router-PE1(config-if)#ip add 192.168.1.2 255.255.255.0
Router-PE1(config-if)#no shut
Router-PE2(config)#ip vr
Router-PE2(config)#ip vrf A
Router-PE2(config-vrf)#rd 1:1
Router-PE2(config-vrf)#route-target 1:1
Router-PE2(config-vrf)#int f0/0
Router-PE2(config-if)#ip vrf forwarding A
Router-PE2(config-if)#ip add 192.168.2.2 255.255.255.0
Router-PE2(config-if)#no shut
Router-PE1(config-if)#router rip
Router-PE1(config-router)#address-family ipv4 vrf A
Router-PE1(config-router-af)#network 192.168.1.0
Router-PE1(config-router-af)#version 2
Router-PE1(config-router-af)#no auto-summary
Router-CE1(config-if)#router rip
Router-CE1(config-router)#version 2
Router-CE1(config-router)#no auto-summary
Router-CE1(config-router)#network 192.168.1.0
Router-CE1(config-router)#network 1.0.0.0
Router-PE2(config-if)#router rip
Router-PE2(config-router)#address-family ipv4 vrf A
Router-PE2(config-router-af)#network 192.168.2.0
Router-PE2(config-router-af)#version 2
Router-PE2(config-router-af)#no auto-summary
Router-CE2(config-if)#router rip
Router-CE2(config-router)#version 2
Router-CE2(config-router)#no auto-summary
Router-CE2(config-router)#network 3.0.0.0
Router-CE2(config-router)#network 192.168.2.0
PE-CE之间重分布
Router-PE1(config)#router bgp 1
Router-PE1(config-router)#address-family ipv4 vrf A
Router-PE1(config-router-af)#redistribute rip
Router-PE1(config-router-af)#router rip
Router-PE1(config-router)#address-family ipv4 vrf A
Router-PE1(config-router-af)#redistribute bgp 1 metric 1
Router-PE2(config)#router rip
Router-PE2(config-router)#address-family ipv4 vrf A
Router-PE2(config-router-af)#redistribute bgp 1 metric 1
Router-PE2(config-router-af)#router bgp 1
Router-PE2(config-router)#address-family ipv4 vrf A
分布式访问
这里Router-PE2作为与Router-Intenet的出口,也相当于GW的存在。
第一个要解决的就是怎么把客户路由中没有的路由引向global的路由表来转发。
Router-PE1(config)#ip route vrf A 0.0.0.0 0.0.0.0 3.3.3.3 global 这个是global路由向VRF泄露,让VRF没有匹配的路由 直接走global的路由表。
第二个就是怎么让客户知道这条路由,当然最好的办法就是在协议中重分布,而不要客户来手工来添加了,试验环境的话就无所谓了。
Router-PE1(config)#router rip
Router-PE1(config-router)#address-family ipv4 vrf A
Router-PE1(config-router-af)#redistribute static
这时候Router-CE1的缺省已经收过来了, 注意这里Router-CE2是不会收到这条缺省的,因为高级协议 BGP OSPF ISIS这些 默认在收到重分布里面有缺省路由是不会携带的,除非手工敲命令。
这时候测试下internet的访问,把internet的debug ip packet 打开,看下有什么问题
Router-Intenet是收到了关于Router-CE1的访问,但是缺没有路由返回去,路由都是有去有回的,这时候还需要告诉它Router-CE1怎么去。
第一个是实验环境 就直接把Router-CE1的路由通告给Router-Intenet,这样只是实验环境,这个最简单了。
这里就做NAT,然后把指定一条路由给Router-CE1的接口,重分布进BGPv4中,让internet知道怎么返回。
Router-CE1(config)#access-list 1 permit any
Router-CE1(config)#ip nat inside source list 1 interface f0/0 overload
Router-CE1(config)#int f0/0
Router-CE1(config-if)#ip nat inside
Router-CE1(config-if)#int lo 0
Router-CE1(config-if)#ip nat inside
Router-PE1(config)#ip route 192.168.1.1 255.255.255.255 f0/0
Router-PE1(config)#router bgp 1
Router-PE1(config-router)#redistribute static
这条静态是VRF向global泄露,因为f0/0是属于VRF接口,所以这里指定返回192.168.1.1的接口都交给f0/0处理。
通信是正常了,分析下标签怎么走的。
1、Router-PE1收到关于5.5.5.5的数据包,老样子 查看VRF的FIB表,这里明细路由肯定没有5.5.5.5的路由,所以只能匹配0.0.0.0路由转发
这里压入17标签,在最早做MPLS实验的时候,提到过BGPv4会借助关于下一跳的标签。这里是3.3.3.3 标签17,在LFIB表中也是关于3.3.3.3的标签压入17出去。
2、P收到以后肯定是Pop了,3.3.3.3是最后一跳,P作为次莫跳执行Pop动作,原本就一层标签,这下发过去是以IP包发送过去的。
3、Router-PE2收到一个IP包,查看本地路由表是否有去往5.5.5.5的路由。交给下一跳
4、Router-Intenet收到以后,根据192.168.1.1的地址回复数据包,这时候回来到达Router-PE2也是需要压入标签包的,不然就会有路由黑洞了。
这个方式只能存在试验环境,是因为有个很大的缺陷,就是在CE端做了NAT以后,分支过来访问肯定是访问不了内部路由了,因为都被NAT给拒绝了。 可能有解决方案,但是目前还没发现,所以就不涉及了。
第二种和第三种比较实用。
第二种是集中化管理,它一般是企业总部有防火墙等设备做集中化的策略,把所有通过Router-Intenet的流量都从总部经过。
这时候总部需要两个线路或者子接口来划分两个接口,一个是global的,一个是vrf的,用于区分不同路由表的流量。
这时候别忘记把CE端的NAT先取消掉。
Router-CE1(config)#int f0/1
Router-CE1(config-if)#ip add 100.100.100.1 255.255.255.0
Router-CE1(config-if)#no shut
Router-CE1(config)#ip route 0.0.0.0 0.0.0.0 100.100.100.2
Router-PE1(config)#int f0/1
Router-PE1(config-if)#ip add 100.100.100.2 255.255.255.0
Router-PE1(config-if)#speed 100
Router-PE1(config)#no ip route 192.168.1.1 255.255.255.255 FastEthernet0/0 把之前的那条路由no掉
Router-PE1(config)#no ip route vrf A 0.0.0.0 0.0.0.0 3.3.3.3 global 这条也不需要泄露了。
Router-PE1(config)#ip route 100.100.100.1 255.255.255.255 f0/1
这里因为之前做过重分布了,所以这里不需要在做重分布。
Router-PE2(config)#route-map Router-PE1 deny 10
Router-PE2(config)#router bgp 1
Router-PE2(config-router)#neighbor 1.1.1.1 default-originate
Router-PE2(config-router)#neighbor 1.1.1.1 route-map Router-PE2 out
这里用route-map把所有路由拒绝发送个Router-PE1,是因为Router-PE1完全不需要知道明细路由存在,因为它作为连接CE的存在,只需要把路由发送到GW就行了,这里GW就是Router-PE2。所以对1.1.1.1下放一条缺省。
ip nat inside source list 1 interface FastEthernet0/1 overload
Router-CE1(config)#int f0/1
Router-CE1(config-if)#ip nat outside
Router-CE1(config-if)#int f0/0
Router-CE1(config-if)#ip nat inside
Router-CE1(config-if)#int lo 0
Router-CE1(config-if)#ip nat inside
这里Router-CE1是有缺省的,是因为自己指定的,我们需要把这条缺省推送给Router-CE2分支 让也有这条默认路由。
Router-CE1(config)#router rip
Router-CE1(config-router)#redistribute static
这里Router-PE1是收到了关于R的缺省路由,但是需要重分布进BGP中传递给对方Router-PE2,然后在给Router-CE2,但是高级默认情况下不接收缺省的,所以这里需要在BGP中还需要让它接收才能推送出去。
Router-PE1(config)#router bgp 1
Router-PE1(config-router)#address-family ipv4 vrf A
Router-PE1(config-router-af)#default-information originate
Router-CE1和Router-CE2全部访问正常,这里分析下Router-CE2的数据包走向 Router-CE1的也包含在内了。
1、Router-CE2发送去往5.5.5.5的流量,发现没有明细路由,匹配缺省路由出去
2、Router-PE2收到这条路由后,查看VRF,只有匹配了缺省路由的标签信息出去,这里我用的是15.0的IOS,所以标签表达方法不同,这里内层标签是21,外层标签是16,是关于1.1.1.1这个下一跳怎么去的。
3、P收到关于16的标签后执行Pop动作,外层21的标签发送给Router-PE1。
4、Router-PE1收到以后,它是要发送给客户的,所以只能肯定是要执行untagged 把所有标签都弹出来。
5、CE收到一个关于去5.5.5.5的IP数据包,查看本地路由表 从缺省出去。发送给Router-CE1,这时候是从global接口收到的,所以只查看全局的FIB表
6、这条路由是Router-PE2也就是GW发布过来的,它会借用LDP分配的关于Router-PE2的下一跳标签 17,发送给P,P执行Pop动作,传递给Router-PE2,Router-PE2收到以后是一个纯IP数据包,所以只会查看IP路由表。
7、最后到达Router-Intenet,Router-Intenet返回的路由就是交给100.100.100.1 它有返回的路由,只是到达100.100.100.1后,是通过NAT的表项来进行发送给谁。
第三个模型,由运营商做NAT,客户不参与。
把之前的配置都还原,只剩下MPLS ***的模型 和客户之间能通信。
Router-CE1(config)#no ip route 0.0.0.0 0.0.0.0 100.100.100.2
Router-CE1(config)#no ip nat inside source list 1 interface FastEthernet0/1 overload
Router-CE1(config)#int f0/1
Router-CE1(config-if)#no ip nat outside
Router-CE1(config-if)#int lo 0
Router-CE1(config-if)#no ip nat inside
Router-CE1(config-if)#router rip
Router-CE1(config-router)#no re
Router-CE1(config-router)#no redistribute static
Router-PE1(config)# no ip route 100.100.100.1 255.255.255.255 FastEthernet0/1
但是Router-PE2和给Router-PE1的缺省路由不需要no掉。
在Router-PE2上做NAT,可以定义地址池或者是直接使用接口来转发
我们这里只允许 Router-PE1和Router-PE2的loopback能上网,出接口不允许
Router-PE2(config)#access-list 1 permit 1.1.1.0 0.0.0.255
Router-PE2(config)#access-list 1 permit 2.2.2.0 0.0.0.255
定义允许访问的地址
Router-PE2(config)#ip nat inside source list 1 interface s1/0 vrf A overload
Router-PE2(config)#int s1/0
Router-PE2(config-if)#ip nat outside
Router-PE2(config-if)#int s1/1
Router-PE2(config-if)#ip nat inside
Router-PE2(config-if)#int f0/0
Router-PE2(config-if)#ip nat inside
这里NAT跟普通的没有什么区别,就是需要加个vrf参数,它会决定哪个VRF做NAT转换。
Router-PE2(config)#ip route vrf A 0.0.0.0 0.0.0.0 s1/0
Router-PE2(config)#router bgp 1
Router-PE2(config-router)#address-family ipv4 vrf A
Router-PE2(config-router-af)#network 0.0.0.0
Router-PE2(config-router-af)#router rip
Router-PE2(config-router)#address-family ipv4 vrf A
Router-PE2(config-router-af)#redistribute static
这里做global像VRF的路由泄露,把它重分布进MPBGP和RIP中,RIP中是为了让Router-CE2直接收到,而MPBGP中是为了传递给对方Router-PE1,然后传递给Router-CE1。
Router-CE1和Router-CE2都通过自己的直连不通 loopback就能访问Router-Intenet,因为它在运营商中是被允许的。
标签的转换都跟之前一样,但是它回包是给34.1.1.1 ,然后根据NAT的转换项中来进行到低发送给哪个。 所以在GW上,必须有所有客户的路由信息,否则回包会有问题。
本文首发于公众号:网络之路博客
标签:ip,Internet,MPLS,PE1,PE2,Router,之四,router,config 来源: https://blog.51cto.com/ccieh3c/2653191