前言
这次做了很多的准备来写一下域内MPLS VPN , 增加了一些关于自己的理解。 能力有限, 如有错误 还望指正
mpls目的在于解决遍历过大路由表造成的延迟问题,mpls将去往相同目的地址或者相同转发路径的数据包归位一类,在转发数据包时,只考虑标签,而不是考虑三层ip地址。从而实现数据包快速转发。
MPLS基本知识
- MPLS技术实现原理
-
MPLS网络 MPLS网路可以在普通网络上实现,但需要路由器支持MPLS功能
- 标签交换路由器(LSR) 具有标签分发能力和标签交换能力的设备 是MPLS网络的基本构成单位
- MPLS网络由入节点、中间节点、和出节点组成
-
入节点 负责检查进入的IP数据包 将数据包按照 转发等价类 (目的地址、相同转发路径...)进行分类 产生MPLS包头并分配初始标签 【类似于快递按照地区进行分类 然后对包裹进行打包 (打标签)】
-
中间节点 也称为传输节点 负责按照标签转发MPLS数据包
-
出节点 负责拆除报文的标签并转发给目的网络 【撕标签】
-
-
转发等价类(FEC) 将具有相同转发处理方式(如相同目的地、相同转发路径等)的数据包归为一类 相同的数据包在MPLS中做相同的处理
-
标签转发路径(LSP) MPLS只在入节点进行查询路由表,最长匹配等过程 通过FEC建立LSP。 LSP是入节点到出节点的路径 LPS是单向的 一条标签转发路径可以有一个或者多个中间节点,但有且只有一个入节点和出节点。
-
MPLS基本配置
- 配置LSR-ID 用来在MPLS中标识设备,要求在MPLS中是唯一的。通常选用Loopback地址为LSR-ID
[Router]mpls lsr-id <ipv4-address> // 在系统视图下 配置lsr-id
- 开启MPLS和LDP
[Router]mpls ldp // 启用ldp
- 在接口下开启MPLS和LDP
[Router-GigabitEthernet0/0]mpls enable // 接口视图下开启mpls
[Router-GigabitEthernet0/0]mpls ldp enable // 接口视图下开启ldp
- 查看LDP会话建立情况
[Router]display mpls ldp peer
Total number of peers: 1
Peer LDP ID State Role GR MD5 KA Sent/Rcvd
172.16.0.1:0 Non Existent Active Off Off 0/0
MPLS VPN基本知识
-
MPLS VPN的网络构成
-
CE设备 用户网络边缘设备 与服务提供商直接相连 可以是主机、交换机、路由器等 CE感知不到VPN的存在 也不需要必须支持MPLS
-
PE路由器 服务提供商边缘路由器 是与用户的CE设备直接相连 对VPN的处理全在PE上 作为入节点或出节点
-
P路由器 服务提供商网络的骨干路由器 只负责基本的MPLS转发能力 不能与CE设备相连 作为MPLS的传输节点
-
总结1 CE通常为路由器 将本站点的VPN路由发送给PE,并从PE学习到远端的VPN路由 CE与PE之间可以用BGP/IGP交换路由信息,也可以用静态路由。
-
总结2 PE路由器学到CE本地路由后,通过BGP与其他PE交换VPN信息 PE只维护与它相连的VPN路由信息 不维护服务商所有的VPN路由信息
-
总结3 P路由器只维护到PE的路由,不需要连接VPN信息
-
-
多VRF技术
-
地址空间重叠 解决同一个设备多个VPN路由信息导致的私网地址重复问题
-
VPN实例 在MPLS中 不同的VPN之间的路由隔离通过VPN实例 PE为每一个直接相连的VPN站点建立专门的VPN实例 保证VPN的独立性与安全性 VPN实例管理信息包括路由标识符(RD)、路由过滤策略、成员接口列表等。
-
-
路由标识符(RD)
-
命名规则
- Type为0时 RD与AS号有关 16位自治系统号:32位用户自定义数字 如100:1
- Type为1时 RD与IP地址有关 32位IP地址 32位IP地址号:16位用户自定义数字 如172.1.1.1:1
- Type为2时 32位自治系统号:16位用户自定义数字 如65536:1
-
RD全局唯一 作用是添加一个特定的ipv4前缀 RD只有本地意义 在于让路由器独立出不同的VPN
-
-
VPN Target属性 RT
-
当VPN数据包RT值与本地相同,就会学习这条路由 VPN隧道两端RT值相同
-
Export Target属性 本地PE从CE学习到站点的VPN路由后 会打上标签(Export Target) 再发送给其他PE
-
Import Target属性 PE接收的其他PE上的VPN路由时 判断是否与自己的Import Target相同 相同就撕标签并加入自己的VPN路由表 不同则丢弃
-
VPN Target 三种格式
- 16位自治系统号:32位用户自定义数字 如100:1
- 32位IP地址:16位用户自定义数字 如172.1.1.1:1
- 32位自治系统号:16位用户自定义数字 如65536:1
-
MPLS VPN基本配置
-
配置公网隧道
- 配置LSR ID [系统视图]
mpls lsr-id <ip-address>- 使能MPLS/LDP [系统视图]
mpls ldp // 启用ldp- 接口下使能MPLS/LDP [接口视图] 【PE/P设备的公网接口】
mpls enable // 接口视图下开启mpls mpls ldp enable // 接口视图下开启ldp -
配置本地VPN
- 创建VPN实例 [系统视图]
ip vpn-instance <vpn-instance-name>- 配置RD与RT [VPN实例视图]
route-distinguisher <RD> vpn-target <RT> {both|export-extcommunity|import-extcommunity}- VPN实例与接口绑定 [接口视图]
ip binding vpn-instance <vpn-instance-name>- 配置PE与CE之间的路由协议 [系统视图]
ospf [process-id|router-id <router-id>] vpn-instance <vpn-instance-name> // precess-id 进程id
MPLS VPN配置步骤
-
PE设备使能某种IGP协议 确保PE设备之间的连通性
-
PE设备和P设备使能MPLS/LDP协议 完成公网隧道建立
-
PE设备建立本地VPN 设计VPN互访关系
-
PE设备建立BGP/MP-BGP邻居 传递私网路由
域内MPLS VPN配置

CE1配置基本配置
[CE1]int g0/1
[CE1-GigabitEthernet0/1]ip address 10.0.1.2 24
[CE1-GigabitEthernet0/1]qu
[CE1]ip route-static 0.0.0.0 0 10.0.1.1 // 配置缺省路由
CE2配置基本配置
[CE2]int g0/1
[CE2-GigabitEthernet0/1]ip address 10.0.3.2 24
[CE2-GigabitEthernet0/1]qu
[CE2]ip route-static 0.0.0.0 0 10.0.3.1
PE3配置基本配置与公网隧道
// 首先配置IP地址
[PE3]int g0/1
[PE3-GigabitEthernet0/1]ip address 10.0.1.1 24
[PE3-GigabitEthernet0/1]qu
[PE3]int g0/0
[PE3-GigabitEthernet0/0]ip address 10.0.2.1 24
[PE3-GigabitEthernet0/0]qu
[PE3]int LoopBack 0
[PE3-LoopBack0]ip address 172.16.0.1 32
[PE3-LoopBack0]qu
// 配置OSPF
[PE3]router id 172.16.0.1
[PE3]ospf 1
[PE3-ospf-1]area 0
[PE3-ospf-1-area-0.0.0.0]network 172.16.0.1 0.0.0.0
[PE3-ospf-1-area-0.0.0.0]network 10.0.2.0 0.0.0.255
[PE3-ospf-1-area-0.0.0.0]qu
[PE3-ospf-1]qu
// 配置公网隧道 开启MPLS与LDP
[PE3]mpls lsr-id 172.16.0.1
[PE3]mpls ldp
[PE3-ldp]qu
[PE3]int g0/0
[PE3-GigabitEthernet0/0]mpls enable
[PE3-GigabitEthernet0/0]mpls ldp enable
[PE3-GigabitEthernet0/0]qu
PE4配置基本配置与公网隧道
// 首先配置IP地址
[PE4]int g0/0
[PE4-GigabitEthernet0/0]ip address 10.0.2.2 24
[PE4]int g0/1
[PE4-GigabitEthernet0/1]ip add 10.0.3.1 24
[PE4-GigabitEthernet0/1]qu
[PE4]int LoopBack 0
[PE4-LoopBack0]ip add 172.16.0.2 32
[PE4-LoopBack0]qu
// 配置OSPF
[PE4]router id 172.16.0.2
[PE4]ospf 1
[PE4-ospf-1]area 0
[PE4-ospf-1-area-0.0.0.0]network 172.16.0.2 0.0.0.0
[PE4-ospf-1-area-0.0.0.0]network 10.0.2.0 0.0.0.255
[PE4-ospf-1-area-0.0.0.0]qu
[PE4-ospf-1]qu
// 配置公网隧道 开启MPLS与LDP
[PE4]mpls lsr-id 172.16.0.2
[PE4]mpls ldp
[PE4-ldp]qu
[PE4]int g0/0
[PE4-GigabitEthernet0/0]mpls enable
[PE4-GigabitEthernet0/0]mpls ldp enable
[PE4-GigabitEthernet0/0]qu
PE3查看LDP会话建立情况 【故障排除一】
[PE3]dis mpls ldp peer
Total number of peers: 1
Peer LDP ID State Role GR MD5 KA Sent/Rcvd
172.16.0.2:0 Operational Passive Off Off 17/17
[PE3] // State 状态 Operational 为正常
PE3查看公网隧道建立情况 【故障排除二】
[PE3]dis mpls ldp lsp
Status Flags: * - stale, L - liberal, B - backup, N/A - unavailable
FECs: 2 Ingress: 1 Transit: 1 Egress: 1
FEC In/Out Label Nexthop OutInterface/LSINDEX
172.16.0.1/32 3/-
-/24128(L)
172.16.0.2/32 -/3 10.0.2.2 GE0/0
24128/3 10.0.2.2 GE0/0
[PE3] // 隧道是单向的 检查 In/Out 和 出接口
PE3建立本地VPN
// 创建VPN实例
[PE3]ip vpn-instance vpn1
[PE3-vpn-instance-vpn1]route-distinguisher 100:1
[PE3-vpn-instance-vpn1]vpn-target 1:1 export-extcommunity
[PE3-vpn-instance-vpn1]vpn-target 1:1 import-extcommunity
[PE3-vpn-instance-vpn1]qu
// 将VPN实例绑定到接口
[PE3]int g0/1
[PE3-GigabitEthernet0/1]ip binding vpn-instance vpn1
Some configurations on the interface are removed.
[PE3-GigabitEthernet0/1]ip address 10.0.1.1 24
[PE3-GigabitEthernet0/1]qu
PE4建立本地VPN
// 创建VPN实例
[PE4]ip vpn-instance vpn1
[PE4-vpn-instance-vpn1]route-distinguisher 100:1
[PE4-vpn-instance-vpn1]vpn-target 1:1 export-extcommunity
[PE4-vpn-instance-vpn1]vpn-target 1:1 import-extcommunity
[PE4-vpn-instance-vpn1]qu
[PE4]
// 将VPN实例绑定到接口
[PE4]int g0/1
[PE4-GigabitEthernet0/1]ip binding vpn-instance vpn1
Some configurations on the interface are removed.
[PE4-GigabitEthernet0/1]ip address 10.0.3.1 24
[PE4-GigabitEthernet0/1]qu
[PE4]
PE3建立BGP/MP-BGP邻居
// 建立BGP/MP-BGP邻居
[PE3]bgp 100
[PE3-bgp-default]router-id 172.16.0.1
[PE3-bgp-default]peer 172.16.0.2 as-number 100
[PE3-bgp-default]peer 172.16.0.2 connect-interface LoopBack 0
[PE3-bgp-default]address-family ipv4
[PE3-bgp-default-ipv4]peer 172.16.0.2 enable // 建立BGP邻居
[PE3-bgp-default-ipv4]qu
[PE3-bgp-default]address-family vpnv4
[PE3-bgp-default-vpnv4]peer 172.16.0.2 enable // 建立MP-BGP邻居
[PE3-bgp-default-vpnv4]qu
// 配置传递的VPN路由信息
[PE3-bgp-default]ip vpn-instance vpn1 // 进入VPN实例配置视图
[PE3-bgp-default-vpn1]address-family ipv4 // 进入ipv4地址簇视图
[PE3-bgp-default-ipv4-vpn1]import-route direct // 导入静态路由
[PE3-bgp-default-ipv4-vpn1]qu
[PE3-bgp-default-vpn1]qu
[PE3-bgp-default]qu
[PE3]
PE4建立BGP/MP-BGP邻居
// 建立BGP/MP-BGP邻居
[PE4]bgp 100
[PE4-bgp-default]router-id 172.16.0.2
[PE4-bgp-default]peer 172.16.0.1 as-number 100
[PE4-bgp-default]peer 172.16.0.1 connect-interface LoopBack 0
[PE4-bgp-default]address-family ipv4
[PE4-bgp-default-ipv4]peer 172.16.0.1 enable
[PE4-bgp-default-ipv4]qu
[PE4-bgp-default]address-family vpnv4
[PE4-bgp-default-vpnv4]peer 172.16.0.1 enable
[PE4-bgp-default-vpnv4]qu
// 配置传递的VPN路由信息
[PE4-bgp-default]ip vpn-instance vpn
[PE4-bgp-default-vpn1]address-family ipv4
[PE4-bgp-default-ipv4-vpn1]import-route direct
[PE4-bgp-default-ipv4-vpn1]qu
[PE4-bgp-default-vpn1]qu
[PE4-bgp-default]qu
[PE4]
PE3查看BGP/MP-BGP邻居建立情况 【故障排除三】
[PE3]dis bgp peer ipv4 // 查看BGP邻居
BGP local router ID: 172.16.0.1
Local AS number: 100
Total number of peers: 1 Peers in established state: 1
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
172.16.0.2 100 22 27 0 0 00:15:49 Established
[PE3]
[PE3]dis bgp peer vpnv4 // 查看MP-BGP邻居
BGP local router ID: 172.16.0.1
Local AS number: 100
Total number of peers: 1 Peers in established state: 1
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
172.16.0.2 100 23 29 0 1 00:16:44 Established
[PE3]
PE3查看VPN路由表 【故障排查四】
[PE3]dis ip routing-table vpn-instance vpn1
Destinations : 11 Routes : 11
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
10.0.1.0/24 Direct 0 0 10.0.1.1 GE0/1
10.0.1.1/32 Direct 0 0 127.0.0.1 InLoop0
10.0.1.255/32 Direct 0 0 10.0.1.1 GE0/1
10.0.3.0/24 BGP 255 0 172.16.0.2 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[PE3]
测试连通性 CE1 PING CE2
// CE1 ping CE2
[CE1]ping 10.0.3.2
Ping 10.0.3.2 (10.0.3.2): 56 data bytes, press CTRL+C to break
56 bytes from 10.0.3.2: icmp_seq=0 ttl=253 time=0.791 ms
56 bytes from 10.0.3.2: icmp_seq=1 ttl=253 time=0.659 ms
56 bytes from 10.0.3.2: icmp_seq=2 ttl=253 time=1.051 ms
56 bytes from 10.0.3.2: icmp_seq=3 ttl=253 time=1.037 ms
56 bytes from 10.0.3.2: icmp_seq=4 ttl=253 time=0.774 ms
--- Ping statistics for 10.0.3.2 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.659/0.862/1.051/0.155 ms
[CE1]%Feb 8 12:43:37:511 2024 CE1 PING/6/PING_STATISTICS: Ping statistics for 10.0.3.2: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 0.659/0.862/1.051/0.155 ms.