域内MPLS-VPN技术

219 阅读10分钟

前言

这次做了很多的准备来写一下域内MPLS VPN , 增加了一些关于自己的理解。 能力有限, 如有错误 还望指正

mpls目的在于解决遍历过大路由表造成的延迟问题,mpls将去往相同目的地址或者相同转发路径的数据包归位一类,在转发数据包时,只考虑标签,而不是考虑三层ip地址。从而实现数据包快速转发。

MPLS基本知识

  1. MPLS技术实现原理
    1. MPLS网络 MPLS网路可以在普通网络上实现,但需要路由器支持MPLS功能

      1. 标签交换路由器(LSR) 具有标签分发能力和标签交换能力的设备 是MPLS网络的基本构成单位
      2. MPLS网络由入节点、中间节点、和出节点组成
        • 入节点 负责检查进入的IP数据包 将数据包按照 转发等价类 (目的地址、相同转发路径...)进行分类 产生MPLS包头并分配初始标签 【类似于快递按照地区进行分类 然后对包裹进行打包 (打标签)】

        • 中间节点 也称为传输节点 负责按照标签转发MPLS数据包

        • 出节点 负责拆除报文的标签并转发给目的网络 【撕标签】

    2. 转发等价类(FEC) 将具有相同转发处理方式(如相同目的地、相同转发路径等)的数据包归为一类 相同的数据包在MPLS中做相同的处理

    3. 标签转发路径(LSP) MPLS只在入节点进行查询路由表,最长匹配等过程 通过FEC建立LSP。 LSP是入节点到出节点的路径 LPS是单向的 一条标签转发路径可以有一个或者多个中间节点,但有且只有一个入节点和出节点。

MPLS基本配置

  1. 配置LSR-ID 用来在MPLS中标识设备,要求在MPLS中是唯一的。通常选用Loopback地址为LSR-ID
[Router]mpls lsr-id <ipv4-address>    // 在系统视图下 配置lsr-id
  1. 开启MPLS和LDP
[Router]mpls ldp    // 启用ldp
  1. 在接口下开启MPLS和LDP
[Router-GigabitEthernet0/0]mpls enable    // 接口视图下开启mpls
[Router-GigabitEthernet0/0]mpls ldp enable    // 接口视图下开启ldp
  1. 查看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基本知识

  1. MPLS VPN的网络构成

    1. CE设备 用户网络边缘设备 与服务提供商直接相连 可以是主机、交换机、路由器等 CE感知不到VPN的存在 也不需要必须支持MPLS

    2. PE路由器 服务提供商边缘路由器 是与用户的CE设备直接相连 对VPN的处理全在PE上 作为入节点或出节点

    3. 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信息

  2. 多VRF技术

    1. 地址空间重叠 解决同一个设备多个VPN路由信息导致的私网地址重复问题

    2. VPN实例 在MPLS中 不同的VPN之间的路由隔离通过VPN实例 PE为每一个直接相连的VPN站点建立专门的VPN实例 保证VPN的独立性与安全性 VPN实例管理信息包括路由标识符(RD)、路由过滤策略、成员接口列表等。

  3. 路由标识符(RD)

    1. 命名规则

      • 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
    2. RD全局唯一 作用是添加一个特定的ipv4前缀 RD只有本地意义 在于让路由器独立出不同的VPN

  4. 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 三种格式

      1. 16位自治系统号:32位用户自定义数字 如100:1
      2. 32位IP地址:16位用户自定义数字 如172.1.1.1:1
      3. 32位自治系统号:16位用户自定义数字 如65536:1

MPLS VPN基本配置

  1. 配置公网隧道

    1. 配置LSR ID [系统视图]
    mpls lsr-id <ip-address>
    
    1. 使能MPLS/LDP [系统视图]
    mpls ldp  // 启用ldp
    
    1. 接口下使能MPLS/LDP [接口视图] 【PE/P设备的公网接口】
    mpls enable    // 接口视图下开启mpls
    mpls ldp enable    // 接口视图下开启ldp
    
  2. 配置本地VPN

    1. 创建VPN实例 [系统视图]
    ip vpn-instance <vpn-instance-name>
    
    1. 配置RD与RT [VPN实例视图]
    route-distinguisher <RD>
    vpn-target <RT> {both|export-extcommunity|import-extcommunity}
    
    1. VPN实例与接口绑定 [接口视图]
    ip binding vpn-instance <vpn-instance-name>
    
    1. 配置PE与CE之间的路由协议 [系统视图]
    ospf [process-id|router-id <router-id>] vpn-instance <vpn-instance-name>    // precess-id 进程id
    

MPLS VPN配置步骤

  1. PE设备使能某种IGP协议 确保PE设备之间的连通性

  2. PE设备和P设备使能MPLS/LDP协议 完成公网隧道建立

  3. PE设备建立本地VPN 设计VPN互访关系

  4. PE设备建立BGP/MP-BGP邻居 传递私网路由

域内MPLS VPN配置

image.png

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.