1、网络拓扑
2、实验需求:
(1)SiteA两个站点跨域能正常通信(PC1 ping 通 PC3)
(2)SiteB两个站点跨域能正常通信(PC2 ping 通 PC4)
(3) 不同站点不能互相通信
(4)数据转发使用MPLS标签进行转发
3、实验解析:
(1)各站点路由器按要求配置路由协议,使站点路由能通过路由协议告知PE(SiteA-1运行 OSPF,SiteB-1运行IS-IS,SiteA-2运行BGP 100,SiteB-2运行BGP 200)
(2)各AS内配置IGP协议使内部互通,配置MPLS/MPLS LDP使能标签转发
(3) PE-1与PE-2建立MP-EBGP对等体,交换VPNv4路由
(4)PE-1与ASBR-1、PE-2与ASBR-2建立IBGP对等体关系,使能BGP对等体发布带标签路由能 力
(5)2台ASBR建立EBGP对等体关系,引入各自到PE的路由到BGP中,并使能BGP对等体发布带标签路由能力
(6) 两个PE设置的RT需要相匹配,才能正确识别同一站点的路由
核心思想:PE与PE之间建立多跳MP-EBGP邻居关系,互相交换VPNv4路由,但是PE与PE之间没有可达地址,所以需要通过ASBR来通告PE的可达路由
4、配置步骤:(AS 123内)
4.1 SiteA-1配置
#
interface GigabitEthernet0/0/0
ip address 192.168.100.1 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 172.16.1.254 255.255.255.0
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 172.16.1.254 0.0.0.0
network 192.168.100.1 0.0.0.0
#
4.2 SiteB-1配置
#
isis 1
network-entity 49.0001.0002.0002.0002.00
#
interface GigabitEthernet0/0/1
ip address 192.168.100.1 255.255.255.0
isis enable 1
#
interface GigabitEthernet0/0/2
ip address 192.168.1.254 255.255.255.0
isis enable 1
#
4.3 PE-1配置
#
interface LoopBack0
ip address 10.1.1.1 255.255.255.255
#
ip vpn-instance SiteA //创建VPN实例SiteA,实例名称本地有效,本地唯一即可,用于与SiteA站点对接
ipv4-family
route-distinguisher 1:1 //配置RD值,RD:IP 形成VPNv4地址,用于解决不同用户的地址冲突问题,建议全局唯一
vpn-target 100:1 export-extcommunity //配置RT值,路由通告时,出方向携带该属性,用于匹配同站点路由
vpn-target 100:1 import-extcommunity
#
ip vpn-instance SiteB //创建VPN实例SiteB,用于与SiteB站点对接
ipv4-family
route-distinguisher 1:2
vpn-target 100:2 export-extcommunity
vpn-target 100:2 import-extcommunity
#
mpls lsr-id 10.1.1.1 //配置lsr id,唯一标识一台LSR路由器,建立LDP会话时,LDP协商的Transport地址默认为该地址,建议使用某Loopback接口地址,且该地址AS内可达
#
mpls //全局使能MPLS
#
mpls ldp //全局使能LDP
#
interface GigabitEthernet0/0/0 //接口绑定VPN实例SiteA
ip binding vpn-instance SiteA
ip address 192.168.100.2 255.255.255.0
#
ospf 100 router-id 10.1.1.1 //创建OSPF进程绑定VPN实例,与SiteA-1对接,接收站点路由
area 0.0.0.0
network 10.0.12.1 0.0.0.0
network 10.1.1.1 0.0.0.0
#
isis 1 vpn-instance SiteB //创建IS-IS进程绑定VPN实例,与SitEB-1对接,接收站点路由
network-entity 49.0001.0010.0001.0001.00
#
interface GigabitEthernet0/0/1 //接口绑定VPN实例SiteB
ip binding vpn-instance SiteB
ip address 192.168.100.2 255.255.255.0
isis enable 1 //接口激活IS-IS进程
#
interface GigabitEthernet0/0/2 //AS互联接口
ip address 10.0.12.1 255.255.255.0
mpls //使能MPLS
mpls ldp //使能LDP
#
ospf 100 router-id 10.1.1.1 //OSPF进程,为AS内路由器互通
area 0.0.0.0
network 10.0.12.1 0.0.0.0 //通告接口
network 10.1.1.1 0.0.0.0 //通告LoopBack接口
#
4.4 P-1配置
#
interface LoopBack0
ip address 10.2.2.2 255.255.255.255
#
mpls lsr-id 10.2.2.2
#
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
ip address 10.0.23.2 255.255.255.0
mpls
mpls ldp
#
interface GigabitEthernet0/0/2
ip address 10.0.12.2 255.255.255.0
mpls
mpls ldp
#
ospf 100 router-id 10.2.2.2 //OSPF进程,AS内路由器互联
area 0.0.0.0
network 10.0.12.2 0.0.0.0
network 10.0.23.2 0.0.0.0
network 10.2.2.2 0.0.0.0
#
4.5 ASBR-1配置
#
interface LoopBack0
ip address 10.3.3.3 255.255.255.255
#
mpls lsr-id 10.3.3.3
#
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
ip address 10.0.23.3 255.255.255.0
mpls
mpls ldp
#
interface GigabitEthernet0/0/1
ip address 10.10.10.1 255.255.255.0
mpls
#
ospf 100 router-id 10.3.3.3
area 0.0.0.0
network 10.0.23.3 0.0.0.0
network 10.3.3.3 0.0.0.0
#
4.6 PE-1与ASBR-1建立IBGP对等体
4.6.1 PE-1上配置:
#
bgp 123
router-id 10.1.1.1 //RID
peer 10.3.3.3 as-number 123 //IBGP对等体
peer 10.3.3.3 connect-interface LoopBack0 //使用loopback接口作为连接源
peer 10.3.3.3 label-route-capability //使能对等体标签路由能力(BGP发布IPv4路由给对等体时,同时携带BGP为该路由分配的标签)
#
ipv4-family vpn-instance SiteA //VPN实例地址族
import-route ospf 1 //引入ospf路由
#
ipv4-family vpn-instance SiteB
import-route isis 1 //引入isis路由
#
ospf 1 router-id 10.1.1.1 vpn-instance SiteA
import-route bgp //将BGP路由引入到OSPF
#
isis 1 vpn-instance SiteB
import-route bgp
#
4.6.2 ASBR-1上配置:
#
bgp 123
router-id 10.3.3.3
peer 10.1.1.1 as-number 123
peer 10.1.1.1 connect-interface LoopBack0
peer 10.1.1.1 label-route-capability //使能对等体发送标签路由能力
#
4.6.3 查看对等体是否建立
PE-1上查看
5、配置步骤:(AS 456内)
5.1 SiteA-2配置:
#
interface GigabitEthernet0/0/0
ip address 192.168.200.1 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 172.16.2.254 255.255.255.0
#
bgp 100 //使用BGP 100与PE-2对接
router-id 3.3.3.3
peer 192.168.200.2 as-number 456
peer 192.168.200.2 connect-interface GigabitEthernet0/0/0
network 172.16.2.0 24
network 192.168.200.0 24
#
5.2 SiteB-2配置:
#
interface GigabitEthernet0/0/1
ip address 192.168.2.254 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 192.168.200.1 255.255.255.0
#
bgp 200 //使用BGP 200与PE-2对接
router-id 4.4.4.4
peer 192.168.200.2 as-number 456
peer 192.168.200.2 connect-interface GigabitEthernet0/0/2
network 192.168.2.0
network 192.168.200.0
#
5.3 PE-2配置:
#
interface LoopBack0
ip address 20.1.1.1 255.255.255.255
#
mpls lsr-id 20.1.1.1 //配置lsr id ,用于唯一标识一台LSR路由器,LDP会话建立时的transport地址默认使用该地址建立,建议使用某loopback接口,且AS内互通
# //执行命令mpls ldp transport-address { interface-type interface-number | interface },配置LDP传输地址为指定接口的IP地址
mpls //全局使能MPLS
#
mpls ldp //全局使能LDP
#
ip vpn-instance SiteA //创建VPN实例SiteA,实例名称本地有效,本地唯一即可
ipv4-family
route-distinguisher 2:1 //配置RD值,与IP前缀结合使用形成 RD:IP 格式的VPNv4地址,用于区分不同站点的路由,建议全局唯一
vpn-target 100:1 export-extcommunity //配置RT值,通告VPNv4路由时携带该属性,以BGP团体属性标识
vpn-target 100:1 import-extcommunity //配置RD值,收到的VPNv4路由与该RT值匹配,一致的认为属于同一个站点
#
ip vpn-instance SiteB //创建VPN实例SiteB
ipv4-family
route-distinguisher 2:2
vpn-target 100:2 export-extcommunity
vpn-target 100:2 import-extcommunity
#
interface GigabitEthernet0/0/0 //接口绑定VPN实例SiteA
ip binding vpn-instance SiteA
ip address 192.168.200.1 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.1.12.1 255.255.255.0
mpls
mpls ldp
#
interface GigabitEthernet0/0/2 //接口绑定VPN实例SiteB
ip binding vpn-instance SiteB
ip address 192.168.200.2 255.255.255.0
#
ospf 100 router-id 20.1.1.1 //OSPF 100,用于AS内互联
area 0.0.0.0
network 10.1.12.1 0.0.0.0 //接口地址
network 20.1.1.1 0.0.0.0 //loopback地址
#
bgp 456 //BGP
router-id 20.1.1.1
#
ipv4-family unicast
undo synchronization
#
ipv4-family vpn-instance SiteA //VPN实例SiteA地址族,与SiteA-2对接,接收来自SiteA的路由
peer 192.168.200.1 as-number 100
peer 192.168.200.1 connect-interface GigabitEthernet0/0/0
#
ipv4-family vpn-instance SiteB //VPN实例SiteB地址族,与SiteB-2对接,接收来自SiteB的路由
peer 192.168.200.1 as-number 200
peer 192.168.200.1 connect-interface GigabitEthernet0/0/2
#
5.4 P-2配置:
#
interface LoopBack0
ip address 20.2.2.2 255.255.255.255
#
interface GigabitEthernet0/0/0
ip address 10.1.23.2 255.255.255.0
mpls
mpls ldp
#
interface GigabitEthernet0/0/1
ip address 10.1.12.2 255.255.255.0
mpls
mpls ldp
#
ospf 100 router-id 20.2.2.2
area 0.0.0.0
network 10.1.12.2 0.0.0.0
network 10.1.23.2 0.0.0.0
network 20.2.2.2 0.0.0.0
#
5.5 ASBR-2配置:
#
interface LoopBack0
ip address 20.3.3.3 255.255.255.255
#
mpls lsr-id 20.3.3.3
#
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
ip address 10.1.23.3 255.255.255.0
mpls
mpls ldp
#
interface GigabitEthernet0/0/1 //与其它AS直连的接口启用mpls即可
ip address 10.10.10.2 255.255.255.0
mpls
#
ospf 100 router-id 20.3.3.3
area 0.0.0.0
network 10.1.23.3 0.0.0.0
network 20.3.3.3 0.0.0.0
#
5.6 PE-2与ASBR-2建立IBGP对等体
5.6.1 PE-2上配置:
#
bgp 456
peer 20.3.3.3 as-number 456
peer 20.3.3.3 connect-interface LoopBack0
peer 20.3.3.3 label-route-capability //使能对等体发送标签路由能力
#
5.6.2 ASBR-2上配置:
#
bgp 456
router-id 20.3.3.3
peer 20.1.1.1 as-number 456
peer 20.1.1.1 connect-interface LoopBack0
peer 20.1.1.1 label-route-capability //使能对等体发送标签路由能力
#
5.6.3 查看对等体是否建立:
PE-2上查看
7、验证OSPF邻居、MPLS LDP会话、MPLS LSP是否正常
7.1 P-1上验证:
7.2 P-2上验证:
8、PE-1与PE-2建立多跳MP-EBGP对等体
PE-1与PE-2之间建立MP-EBGP关系,目的是为了直接交换VPNv4路由, 且不需要经过其它路由器传递VPNv4路路由
8.1 PE-1上配置:
#
bgp 123
peer 20.1.1.1 as-number 456
peer 20.1.1.1 connect-interface LoopBack0
peer 20.1.1.1 ebgp-max-hop //建立多跳EBGP邻居(默认EBGP对等体为1跳)
#
ipv4-family vpnv4 //VPNv4地址族
policy vpn-target
peer 20.1.1.1 enable //使能对等体VPNv4能力
#
8.2 PE-2上配置:
bgp 456
peer 10.1.1.1 as-number 123
peer 10.1.1.1 connect-interface LoopBack0
peer 10.1.1.1 ebgp-max-hop //建立多跳EBGP邻居(默认EBGP对等体为1跳)
#
ipv4-family vpnv4
peer 10.1.1.1 enable
#
此时,由于PE-1和PE-2都没有到达对方的路由,所以EBGP邻居关系是建立不起来的
9、ASBR-1与ASBR-2建立EBGP邻居关系
ASBR-1与ASBR-2建立EBGP邻居关系,目的是将到达本PE设备的路由传递给对端,再由ASBR通过IBGP传递给PE;
这样,双方的PE设备都学习到了对方PE的路由,PE之间的多跳EBGP对等体就能建立起来了
9.1 ASBR-1上配置:
#
bgp 123
peer 10.10.10.2 as-number 456 //建立EBGP邻居关系,因为是直连,所以不需要配置多跳
peer 10.10.10.2 connect-interface GigabitEthernet0/0/1
peer 10.10.10.2 label-route-capability //使能对端标签路由的能力(为数据转发时路由器使用标签转发)
network 10.1.1.1 32 //以network 方式将到达PE-1的路由引入BGP,使ASBR-2能知晓到达PE-1的路由下一跳为ASBR-1
#
9.2 ASBR-2上配置:
#
bgp 456
peer 20.1.1.1 as-number 456
peer 20.1.1.1 connect-interface LoopBack0
peer 10.10.10.1 label-route-capability
network 20.1.1.1 32 //以network 方式将到达PE-2的路由引入BGP,使ASBR-1能知晓到达PE-2的路由下一跳为ASBR-2
#
9.3 验证ASBR是否学习到PE路由
ASBR-1上查看:
ASBR-1已经学习到PE-2的路由
此时收到的BGP路由更新并没有分配标签,只是普通的BGP路由
ASBR-2上查看:
ASBR-2已经学习到PE-1的路由
此时收到的BGP路由更新并没有分配标签
问题(1):
根据BGP路由传递规则,从EBGP对等体学习到的路由更新给IBGP时,下一跳不变
所以,PE-1和PE-2虽然收到ASBR更新的路由,但下一跳不可达,路由无效
问题(2):
在ASBR上修改下一跳属性:peer 10.1.1.1 next-hop-local ,是否能解决问题?
答:不能
因为ASBR修改下一跳为自身连接源地址后,PE-1去往对端PE的路径将是:PE-1--->P-1---->ASBR-1--->ASBR-2...,是以纯IPv4路由进行,
但是P-1路由器并没有到达对端PE路由,所以数据在P-1时被丢弃
解决方法:ASBR为PE路由分配标签,全程进行标签转发
9.4 ASBR上配置为IPv4路由分配标签
9.4.1 ASBR-1上配置:
#
route-policy ForPE permit node 10 //定义路由策略,名称ForPE
if-match mpls-label //定义匹配条件:如果路由是携带了mpls标签
apply mpls-label //定义执行语句:分配mpls标签
#
route-policy ForASBR permit node 10 //定义路由策略,名称ForASBR
apply mpls-label //没有定义匹配条件,直接定义执行语句:分配mpls标签
#
bgp 123
peer 10.1.1.1 route-policy ForPE export //对10.1.1.1 对等体发布路由时执行路由策略ForPE
peer 10.10.10.2 route-policy ForASBR export //对10.10.10.2 对等体发布路由时执行路由策略ForASBR
#
9.4.2 ASBR-2上配置:
#
route-policy ForPE permit node 10
if-match mpls-label
apply mpls-label
#
route-policy ForASBR permit node 10
apply mpls-label
#
bgp 456
peer 10.10.10.1 route-policy ForASBR export
peer 20.1.1.1 route-policy ForPE export
9.4.3 配置完成后抓包查看:
9.4.3.1 ASBR-1向ASBR-2发布PE-1的路由:
9.4.3.2 ASBR-2向PE-2发布PE-1的路由:
9.4.3.2 在ASBR-2查看验证关于10.1.1.1/32路由,接收到的标签为1028,分配的标签为1028
9.4.3.3 同理,在ASBR-1上查看关于20.1.1.1/32的路由:
9.5 路由传递示意图(控制层面):
解析:
1和2:SiteA-1和SiteB-1将路由通过OSPF、IS-IS协议通告给PE-1
3:ASBR-1以Network 方式将PE-1的路由通过EBGP协议通告给ASBR-2,路由传递的同时携带了分配的标签(对等体使能标签路由能力并部署路由策略)
4:ASBR-2收到ASBR-1发送的路由后,将收到的路由通过IBGP协议通告给PE-2,路由传递的同时携带了分配的标签(对等体使能标签路由能力并部署路由策略),此时PE-2有了到达PE-1的路由
(同理,PE-1以同样的方式获取到达PE-2的路由)
5:PE-1和PE-2建立多跳MP-EBGP,相互传递VPNv4路由(SiteA和SiteB站点的路由)
6:PE-2经过RT值匹配,将属于SiteA站点的路由传递给SiteA-2(同理,PE-1将属于SiteA的路由传递给SiteA-1)
7:PE-2经过RT值匹配,将属于SiteB站点的路由传递给SiteB-2(同理,PE-1将属于SiteB的路由传递给SiteB-1)
至此,VPN路由传递完成
10、验证全网:
10.1 验证PE之间的多跳EBGP对等体:
10.1.1 在PE-1上查看:
10.1.2 在PE-1上查看路由:
10.1.3 在PE-2上查看路由:
10.2 在SiteA-1上查看路由:
已学习到SiteA-2的路由:
10.3 在SiteA-2上查看路由:
已学习到SiteA-1的路由:
10.4 Ping 测试
10.4.1 PC1 ping PC3 (同站点SiteA互ping)
10.4.2 PC2 ping PC4(同站点SiteB互ping)
11、PC1 ping PC3数据层面分析全程:
11.1 SiteA-1接收到PC1发出的ICMP报文,SiteA-1解析目的地址为172.16.2.1,查找转发表:
匹配到转发表项中目的地址172.16.2.0/24,下一跳192.168.100.2,出接口G0/0/0,SiteA-1将数据发往PE-1
11.2 PE-1收到SiteA-1发送的ICMP报文,解析目的地址为172.16.2.1,查找转发表:
由于是从绑定了VPN实例的接口收到报文,路由器查找VPN实例路由表:
匹配到转发表项中目的地址172.16.2.0/24,下一跳10.3.3.3,出接口G0/0/2,Tunnel ID:0x8(不为0,表示数据需要隧道转发或MPLS转发)
PE-1路由器根据Tunnel ID,查看NHLFE(下一跳标签转发表项),根据表项数据需要进行LSP隧道转发,且去往172.16.2.1的数据需要到20.1.1.1
下一跳为10.3.3.3,出标签1029(此时的出标签是LDP协议为20.1.1.1分配的)
PE-1根据出标签1029,查看ILM(入标签映射表),1029标签动作为push,Outing token这个参数是MPLS报文最终需要转发的接口ID(重要参数)
PE-1由于10.3.3.3并不是直连路由,需要继续查找路由转发表:
匹配到10.3.3.3的路由,出接口G0/0/2,Tunnel ID为0x3(不为0需要隧道转发或mpls转发)
根据Tunel ID,查找NHLFE,ILM:
查找的NHLFE
查找的IML,此时PE-1得知,到达10.3.3.3,出标签1025,标签动作:push,出接口G0/0/2,下一跳10.0.12.2(直连路由)
目的地址172.16.2.1匹配SiteA这个VPN实例中路由,故PE-1还需要添加BGP为VPN分配的标签
PE-1总结上边的查询结果:
PE-1根据数据规则:
最内层为VPN标签(1028),用于区分数据属于哪个VPN实例
中间为到达20.1.1.1(对端PE-2)标签(1029)
外层为到达10.3.3.3(本AS的ASBR)标签(1025)
封装为MPLS数据,从接口G0/0/2发出
11.3 P-1收到3层标签的MPLS数据,只解析最外层标签
外层标签为1025,P-1路由器查找ILM,根据表项可知,出标签为3(隐式空标签)
根据PHP特性,P-1路由器弹出外层1025标签,将剩余2层标签的MPLS数据从G0/0/0
11.4 ASBR-1收到2层标签的MPLS数据,根据外层标签查找IML
根据外层标签1029,ASBR-1得知入标签为1029,出标签为1029,动作为SWAPPUSH,隧道类型为BGP协议构建的隧道
构建的隧道协议为BGP,查看BGP为IPv4路由分配的标签,下一跳为10.10.10.2(直连路由),故数据从G0/0/1发出
ASBR-1将1029标签替换成1029后,将数据从G00/0/1接口发出
11.5 ASBR-2收到2层MPLS标签数据
根据外层标签1029,查找IML
根据表项,出标签NULL,目标地址20.1.1.1,标签动作:POPGO(弹出,并将报文转发至另一条隧道),此时报文先弹出外层标签
(下表是从H3C官方文档找到的,华为没有.....)
查看MPLS LSP隧道,匹配20.1.1.1,得出出标签为1024,出接口G0/0/0。(路由器应该是直接根据Outing Token值匹配隧道)
根据Outing Token(数据最终转发接口ID),也可以知道出标签、出接口
根据出标签1024,查找ILM,标签动作为PUSH
ASBR-2路由器添加外层标签1024,从G0/0/0口发出
11.6 P-2收到2层标签MPLS数据:
根除外层标签查看ILM,出标签为3(隐式空标签),出接口G0/0/1
P-2路由器根据PHP特性,弹出外层标签,将仅剩一层标签的MPLS数据从G0/0/1口发出
11.7 PE-2收到1层MPLS数据
PE-2根据标签1028查看ILM,由下表可知接收到的数据属于VPN实例SiteA,标签动作POP
PE-2路由器弹出标签,查看数据目的地址为172.16.2.1,查找SiteA的转发表:
匹配到路由条目,下一跳192.168.200.1,出接口G0/0/0,PE-2将IPv4报文从接口转发出去
11.8 SiteA-2接收到数据报文,根据目的地址查找转发表:
匹配到路由条目,将数据从G0/0/1口发出,数据到达PC3
11.9 回程过程同理
总结:
1、在OPtionC-1解决方案中,PE与PE之间直接交换VPNv4路由,但PE与PE可能跨越了多个AS域,需要在ASBR上通告各自AS的PE路由,并使能标签路由功能,以便数据转发时全程标签转发(包括PE与PE建立MP-EBGP对等体关系时发送的TCP连接)
2、ASBR收到其它AS更新的PE路由后,需要进行标签转换动作,即将BGP分配的标签替换为LDP分配的标签,再发给本AS的PE
3、ASBR收到去往本AS的PE的MPLS数据时,查看外层标签查找对应标签项,标签动作为POPGO,需要将外层标签(BGP分配)替换为LDP分配的标签
(下图为PE与PE建立MP-EBGP的数据抓包,都是封装在MPLS标签中)