配置 PE 和 CE 路由器之间的路由
本主题介绍如何在 PE 和 CE 路由器 \ 上配置 3 层 VPN 中的路由。
配置 3 层 VPN 中的 PE 和 CE 路由器之间的路由
要让 PE 路由器将 VPN 相关路由分配到连接的 CE 路由器,必须在 VPN 路由实例中配置路由。您可以配置路由协议(BGP、OSPF 或 RIP)或者配置静态路由。对于与每台 CE 路由器的连接,您只能配置一种类型的路由。
以下部分介绍如何在 PE 和 CE 路由器之间配置 VPN 路由:
- 在 PE 和 CE 路由器之间配置 BGP
- 在 PE 和 CE 路由器之间配置 OSPF
- 为 3 层 VPN 配置 OSPF 伪链路
- 配置 OSPF 域 ID
- 在 PE 和 CE 路由器之间配置 RIP
- 配置 PE 和 CE 路由器之间的静态路由
在 PE 和 CE 路由器之间配置 BGP
要将 BGP 配置为 PE 和 CE 路由器之间的路由协议,请添加以下 bgp
语句:
bgp { group group-name { peer-as as-number; neighbor ip-address; } }
您可以在以下层级包含此语句:
[edit routing-instances routing-instance-name protocols]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols]
注意:层次结构
[edit logical-systems]
级别不适用于 ACX 系列路由器。请注意,为路由实例配置 BGP 时存在以下限制:
在 VRF 路由实例中,请勿使用单独 VRF 路由实例中的远程 BGP 对等方已经使用的 AS 编号来配置本地自治系统 (AS) 编号。这样做会创建一个自治系统环路,其中从此远程 BGP 对等方接收的所有路由都会被隐藏。
您可以在层级使用语句
[edit routing-instances routing-instance-name routing-options]
或在local-as
以下任一层级使用autonomous-system
语句来配置本地 AS 编号:[edit routing-instances routing-instance-name protocols bgp]
[edit routing-instances routing-instance-name protocols bgp group group-name]
[edit routing-instances routing-instance-name protocols bgp group group-name neighbor address]
您可以在层级使用
peer-as
语句[edit routing-instances routing-instance-name protocols bgp group group-name]
为 BGP 对等方配置 AS 编号。
在 PE 和 CE 路由器之间配置 OSPF
您可以配置 OSPF(版本 2 或版本 3)在 PE 和 CE 路由器之间分配 VPN 相关的路由。
以下部分介绍如何将 OSPF 配置为 PE 和 CE 路由器之间的路由协议:
在 PE 和 CE 路由器之间配置 OSPF 版本 2
要将 OSPF 版本 2 配置为 PE 和 CE 路由器之间的路由协议,请添加以下 ospf
语句:
ospf { area area { interface interface-name; } }
您可以在以下层级包含此语句:
[edit routing-instances routing-instance-name protocols]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols]
注意:层次结构
[edit logical-systems]
级别不适用于 ACX 系列路由器。
在 PE 和 CE 路由器之间配置 OSPF 版本 3
要将 OSPF 版本 3 配置为 PE 和 CE 路由器之间的路由协议,请添加以下 ospf3
语句:
ospf3 { area area { interface interface-name; } }
您可以在以下层级包含此语句:
[edit routing-instances routing-instance-name protocols]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols]
注意:层次结构
[edit logical-systems]
级别不适用于 ACX 系列路由器。
为 3 层 VPN 配置 OSPF 伪链路
在第 3 层 VPN 的 PE 和 CE 路由器之间配置 OSPF 时,您还可以配置 OSPF 伪链路,以补偿与 OSPF 区域内链路相关的问题。
以下部分介绍了 OSPF 伪链路及其配置方法:
OSPF 伪装链路概述
图 1 展示了您何时可以配置 OSPF 伪链路。路由器 CE1 和路由器 CE2 位于同一 OSPF 区域。这些 CE 路由器通过路由器 PE1 和路由器 PE2 上的第 3 层 VPN 链接在一起。此外,路由器 CE1 和路由器 CE2 通过用作备份的区域链路连接。
OSPF 将通过第 3 层 VPN 的链路视为区域间链路。默认情况下,OSPF 更喜欢区域内链路而不是区域间链路,因此 OSPF 会选择备份区域内链路作为活动路径。在区域链路不是 CE 路由器之间流量的预期主路径的配置中,这是不能接受的。
OSPF 伪链路也是区域内链路,只是在 PE 路由器之间配置,如图 1 所示。您可以配置伪链路的指标,以确保第 3 层 VPN 上的路径优先于通过连接 CE 路由器的区域内链路上的备份路径。
![OSPF Sham Link](/documentation/us/en/software/junos/vpn-l3/images/g017173.gif)
在以下情况下,您应该配置 OSPF 伪链路:
两个 CE 路由器通过第 3 层 VPN 连接在一起。
这些 CE 路由器位于同一 OSPF 区域。
在两个 CE 路由器之间配置了一个区域内链路。
如果 CE 路由器之间没有区域内链路,则无需配置 OSPF 伪链路。
有关 OSPF 伪链路的更多信息,请参阅互联网草案 draft-ietf-l3vpn-ospf-2547-01.txt, OSPF 作为 BGP/MPLS VPN 中的 PE/CE 协议。
配置 OSPF Sham 链路
伪链路是未编号的点对点区域内链路,通过类型 1 链路状态播发 (LSA) 进行播发。伪装链路仅适用于路由实例和 OSPF 版本 2。
每个伪链路都通过本地和远程伪链路端点地址及其所属的 OSPF 区域进行标识。伪链路必须手动配置。配置两个 PE 路由器之间的伪链路,这两个 PE 路由器都在同一 VRF 路由实例中。
您需要为伪链路的本地端点指定地址。此地址用作伪链路数据包的来源,也可供远程 PE 路由器用作伪链路远程端点。
OSPF 伪链路的本地地址必须使用本地 VPN 的环路地址指定。到此地址的路由必须通过 BGP 传播。使用 sham-link 语句的本地选项指定本地端点的地址:
sham-link { local address; }
您可以在以下层级包含此语句:
[编辑路由实例 routing-instance-name 协议 ospf]
[编辑逻辑系统 logical-system-name 路由实例 routing-instance-name 协议 ospf]
OSPF 伪链路的远程地址必须使用远程 VPN 的环路地址指定。到此地址的路由必须通过 BGP 传播。要指定远程端点的地址,请包括 sham-link-remote 语句:
sham-link-remote address <metric number>;
您可以在以下层级包含此语句:
[编辑路由实例 routing-instance-name 协议 ospf 区域 area-id]
[编辑逻辑系统 logical-system-name 路由实例 routing-instance-name 协议 ospf 区域 area-id]
或者,您可以包括 指标 选项来为远程端点设置指标值。指标值用于指定链路使用成本。总路径指标较低的路由优先于路径指标较高的路由。
您可以配置一个 1 到 65,535 的值。默认值为 1。
OSPF Sham 链路示例
此示例说明如何在 PE 路由器上启用 OSPF 伪链路。
以下是 PE 路由器上的环路接口配置。配置的地址适用于 OSPF 伪链路的本地端点:
[edit] interfaces { lo0 { unit 1 { family inet { address 10.1.1.1/32; } } } }
以下是 PE 路由器上的路由实例配置,包括 OSPF 伪链路的配置。 sham-link 本地 语句配置了本地环路接口的地址:
[edit] routing-instances { example-sham-links { instance-type vrf; interface e1-1/0/2.0; interface lo0.1; route-distinguisher 3:4; vrf-import vpn-red-import; vrf-export vpn-red-export; protocols { ospf { sham-link local 10.1.1.1; area 0.0.0.0 { sham-link-remote 10.2.2.2 metric 1; interface e1-1/0/2.0 metric 1; } } } } }
配置 OSPF 域 ID
对于涉及第 3 层 VPN 的大多数 OSPF 配置,无需配置 OSPF 域 ID。但是,对于连接多个 OSPF 域的第 3 层 VPN,配置 OSPF 域 ID 可以帮助您控制 OSPF 域和后门路径之间的 LSA 转换(适用于 3 类和 5 类 LSA 转换)。与 OSPF 实例关联的 PE 路由器中的每个 VPN 路由和转发 (VRF) 表均使用相同的 OSPF 域 ID 进行配置。默认 OSPF 域 ID 为空值 0.0.0.0。如 表 1 所示,处理具有空域 ID 的路由与没有任何域 ID 的路由不同。
收到的路由 |
收到的路由的域 ID |
接收路由器上的域 ID |
路由重新分配和播发为 |
---|---|---|---|
类型 3 路由 |
A.B.C.D |
A.B.C.D |
3 类 LSA |
类型 3 路由 |
A.B.C.D |
E.F.G.H |
5 类 LSA |
类型 3 路由 |
0.0.0.0 |
0.0.0.0 |
3 类 LSA |
类型 3 路由 |
空 |
0.0.0.0 |
3 类 LSA |
类型 3 路由 |
空 |
空 |
3 类 LSA |
类型 3 路由 |
0.0.0.0 |
空 |
3 类 LSA |
类型 3 路由 |
A.B.C.D |
空 |
5 类 LSA |
类型 3 路由 |
空 |
A.B.C.D |
3 类 LSA |
类型 5 路由 |
不适用 |
不适用 |
5 类 LSA |
您可以为 OSPF 的版本 2 和版本 3 配置 OSPF 域 ID。配置的唯一区别在于,您在 OSPF 版本 2 的 [编辑路由实例 routing-instance-name 协议 ospf] 层次结构级别和 OSPF 版本 3 的 [编辑路由实例 routing-instance-name 协议 ospf3] 层次结构级别中包含语句。随后的配置说明仅显示 OSPF 版本 2 语句。但是,子说明也对 OSPF 版本 3 有效。
要配置 OSPF 域 ID,请添加 域 ID 语句:
domain-id domain-Id;
您可以在以下层级包含此语句:
[编辑路由实例 routing-instance-name 协议 ospf]
[编辑逻辑系统 logical-system-name 路由实例 routing-instance-name 协议 ospf]
您可以为 PE 路由器生成的 OSPF 外部路由设置 VPN 标记,以防止环路。默认情况下,此标记会自动计算,无需配置。但是,您可以通过包括域 vpn 标记语句,为 Type 5 LSA 显式配置 域 VPN 标记 :
no-domain-vpn-tag number;
您可以在以下层级包含此语句:
[编辑路由实例 routing-instance-name 协议 ospf]
[编辑逻辑系统 logical-system-name 路由实例 routing-instance-name 协议 ospf]
范围是 1 到 4,294,967,295 (232 – 1)。如果手动设置 VPN 标记,则必须为 VPN 中的所有 PE 路由器设置相同的值。
有关此类配置的示例,请参阅 为第 3 层 VPN 配置 OSPF 域 ID。
中心辐射型 3 层 VPN 和 OSPF 域 IP
当路由未聚合时,OSPF 域 ID 的默认行为会导致在中枢 PE 路由器和中心 CE 路由器之间使用 OSPF 配置的中心辐射型第 3 层 VPN 出现问题。中心辐射型配置有一个中枢 PE 路由器,该路由器可直接链接到中心 CE 路由器。中枢 PE 路由器从其他远程分支 PE 路由器接收第 3 层 BGP 更新,这些更新将导入辐射型路由实例。从辐射型路由实例,OSPF LSA 会发出并发送到中枢 CE 路由器。
中枢 CE 路由器通常会聚合这些路由,然后将这些新发起的 LSA 发送回中枢 PE 路由器。中枢 PE 路由器将 BGP 更新导出到包含聚合前缀的远程辐射型 PE 路由器。但是,如果存在非聚合 3 类汇总 LSA 或外部 LSA,则会出现两个问题:中枢 PE 路由器如何发起 LSA 并将 LSA 发送到中枢 CE 路由器,以及中枢 PE 路由器如何处理从中枢 CE 路由器收到的 LSA:
默认情况下,由辐射型路由实例中枢 PE 路由器发起的所有 LSA 均集 DN 位。此外,所有外部发起的 LSA 都有 VPN 路由标记集。这些设置有助于防止路由环路。对于第 3 类汇总 LSA,路由环路不是什么问题,因为中枢 CE 路由器作为区域边界路由器 (ABR),会在清除 DN 位后重新部署 LSA,并将其发送回中枢 PE 路由器。但是,中枢 CE 路由器不会重新定位外部 LSA,因为它们具有 AS 泛洪范围。
通过更改中枢 PE 路由器的路由实例配置,您可以发起外部 LSA(在发送至中枢 CE 路由器之前),将 DN 位清除,并将 VPN 路由标记设置为 0。要清除 DN 位并将 PE 路由器发起的外部 LSA 上的 VPN 路由标记设置为零,请在 [编辑路由实例routing-instance-name协议 ospf] 层次结构级别上为域-vpn 标记语句配置 0。您应该将此配置包含在面向发送 LSA 的中心 CE 路由器的中枢 PE 路由器的路由实例中。当中枢 CE 路由器从中枢 PE 路由器接收外部 LSA,然后将其转发回中枢 PE 路由器时,中心 PE 路由器可以在其 OSPF 路由计算中使用 LSA。
当中心 CE 路由器泛洪的 LSA 到达中枢 PE 路由器的路由实例时,充当 ABR 的中枢 PE 路由器不会在其 OSPF 路由计算中考虑这些 LSA,即使 LSA 没有设置 DN 位,而且外部 LSA 没有设置 VPN 路由标记。假定 LSA 来自不相交的主干区域。
您可以通过在 [编辑路由实例协议 ospf 域 id] 层次结构级别包含 disable 语句来更改 PE 路由器routing-instance-name的路由实例配置,使 PE 路由器充当非 ABR。对从中枢 CE 路由器接收 LSA 的中枢 PE 路由器进行此配置更改。
通过更改此配置,PE 路由器的路由实例将充当非 ABR。然后,PE 路由器会认为从中枢 CE 路由器到达的 LSA 就像它们来自连续的非主干区域一样。
在 PE 和 CE 路由器之间配置 RIP
对于第 3 层 VPN,您可以在 PE 路由器上配置 RIP,以学习 CE 路由器的路由,或将 PE 路由器的路由传播到 CE 路由器。从在任何 [edit routing-instances]
层次结构级别上配置的邻接方处学习的 RIP 路由将被添加到路由实例的 inet
表 (instance_name.inet.0
)。
要将 RIP 配置为 PE 和 CE 路由器之间的路由协议,请添加以下 rip
语句:
rip { group group-name { export policy-names; neighbor interface-name; } }
您可以在以下层级包含此语句:
[edit routing-instances routing-instance-name protocols]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols]
注意:层次结构
[edit logical-systems]
级别不适用于 ACX 系列路由器。
默认情况下,RIP 不会播发它收到的路由。要从 PE 路由器将路由播发至 CE 路由器,您需要在 PE 路由器上为 RIP 配置导出策略。有关如何为 RIP 定义策略的信息,请参阅 RIP 导入策略。
要为 RIP 指定导出策略,请包括以下 export
语句:
export [ policy-names ];
您可以在以下层级包含用于 RIP 的此语句:
[edit routing-instances routing-instance-name protocols rip group group-name]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols rip group group-name]
注意:层次结构
[edit logical-systems]
级别不适用于 ACX 系列路由器。
要从 RIP 路由实例中学习到的路由安装到多个路由表中,请添加 rib-group
and group
语句:
rib-group inet group-name; group group-name { neighbor interface-name; }
您可以在以下层次结构级别包括这些语句:
[edit protocols rip]
[edit routing-instances routing-instance-name protocols rip]
[edit logical-systems logical-system-name protocols rip]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols rip]
层次结构 [edit logical-systems]
级别不适用于 ACX 系列路由器。
要配置路由表组,请添加 rib-groups
以下语句:
rib-groups group-name;
您可以在以下层级包含此语句:
[edit routing-options]
[edit logical-systems logical-system-name routing-options]
层次结构 [edit logical-systems]
级别不适用于 ACX 系列路由器。
要向路由表组添加路由表,请添加语句 import-rib
。该语句下指定的 import-rib
第一个路由表名称必须是要配置的路由表的名称。有关如何配置路由表和路由表组的更多信息,请参阅 Junos OS 路由协议库。
import-rib [ group-names ];
您可以在以下层级包含此语句:
[edit routing-options rib-groups group-name]
[edit logical-systems logical-system-name routing-options rib-groups group-name]
层次结构 [edit logical-systems]
级别不适用于 ACX 系列路由器。
RIP 实例仅适用于 VRF 实例类型。您只能为 VPN 支持配置多个 RIP 实例。您可以在客户边缘提供商边缘 (CE-PE) 环境中使用 RIP 从 CE 路由器学习路由,并在 CE 路由器中传播 PE 路由器的实例路由。
从在任何实例层次结构下配置的邻接方学习的 RIP 路由将被添加到实例的路由表中 instance-name.inet.0
。
RIP 不支持路由表组;因此,它不能像 OSPF 或 OSPFv3 协议那样将路由导入多个表中。
配置 PE 和 CE 路由器之间的静态路由
您可以在 VPN 路由实例的 PE 和 CE 路由器之间配置静态(不间断)路由。要为 VPN 配置静态路由,需要在层次结构级别的 VPN 路由实例配置中对其进行配置 [edit routing-instances routing-instance-name routing-options]
。
要配置 PE 和 CE 路由器之间的静态路由,请添加以下 static
语句:
static { route destination-prefix { next-hop [ next-hops ]; static-options; } }
您可以在以下层级包含此语句:
[edit routing-instances routing-instance-name routing-options]
[edit logical-systems logical-system-name routing-instances routing-instance-name routing-options]
层次结构 [edit logical-systems]
级别不适用于 ACX 系列路由器。
有关配置路由协议和静态路由的更多信息,请参阅 Junos OS 路由协议库。
为第 3 层 VPN 配置 OSPF 域 ID
此示例说明了如何将 OSPF 用作 PE 和 CE 路由器之间的路由协议,为 VPN 配置 OSPF 域 ID。如果来自 OSPF 域的路由在 BGP 中作为 VPN-IPv4 路由分布到具有多个 OSPF 域的 VPN 中,则需要一个 OSPF 域 ID。在连接多个 OSPF 域的 VPN 中,一个域的路由可能与另一个域的路由重叠。
在路由实例中配置的域 ID 标识 OSPF 域,并用于识别路由发起。在社区策略上配置的域 ID 用于设置导出的路由。
有关 OSPF 域 IP 和第 3 层 VPN 的详细信息,请参阅 在 3 层 VPN 中配置 PE 和 CE 路由器之间的路由。
图 2 显示了此示例的配置拓扑。仅提供路由器 PE1 的配置。路由器 PE2 的配置可以与路由器 PE1 的配置类似。CE 路由器没有特殊配置要求。
![Example of a Configuration Using an OSPF Domain ID](/documentation/us/en/software/junos/vpn-l3/images/g017193.png)
有关配置信息,请参阅以下部分:
在路由器 PE1 上配置接口
您需要为路由器 PE1 配置两个接口—一个 so-0/0/0
是流量到路由器 CE1(旧金山)的接口, so-0/0/1
一个接口用于向服务提供商网络 P 路由器传输流量。
配置路由器 PE1 的接口:
[edit] interfaces { so-0/0/0 { unit 0 { family inet { address 10.19.1.2/30; } } } so-0/0/1 { unit 0 { family inet { address 10.19.2.1/30; } family mpls; } } }
在路由器 PE1 上配置路由选项
在 [edit routing-options]
层次结构级别,您需要配置 router-id
and autonomous-system
语句。语句 router-id
标识路由器 PE1。
配置路由器 PE1 的路由选项:
[edit] routing-options { router-id 10.255.14.216; autonomous-system 65069; }
在路由器 PE1 上配置协议
在路由器 PE1 上,您需要在层次结构级别上配置 MPLS、BGP、OSPF 和 LDP [edit protocols]
:
[edit] protocols { mpls { interface so-0/0/1.0; } bgp { group San-Francisco-Chicago { type internal; preference 10; local-address 10.255.14.216; family inet-vpn { unicast; } neighbor 10.255.14.224; } } ospf { traffic-engineering; area 0.0.0.0 { interface so-0/0/1.0; } } ldp { interface so-0/0/1.0; } }
路由器 PE1 上的配置策略选项
在路由器 PE1 上,您需要在 [edit policy-options]
层级配置策略。这些策略可确保第 3 层 VPN 中的 CE 路由器交换路由信息。在此示例中,旧金山的路由器 CE1 与位于芝加哥的路由器 CE2 交换路由信息。
配置 PE1 路由器上的策略选项:
[edit] policy-options { policy-statement vpn-import-VPN-A { term term1 { from { protocol bgp; community import-target-VPN-A; } then accept; } term term2 { then reject; } } policy-statement vpn-export-VPN-A { term term1 { from protocol ospf; then { community add export-target-VPN-A; accept; } } term term2 { then reject; } } community export-target-VPN-A members [target:10.255.14.216:11 domain-id:192.0.2.1:0]; community import-target-VPN-A members target:10.255.14.224:31; }
在路由器 PE1 上配置路由实例
您需要在路由器 PE1 上配置第 3 层 VPN 路由实例。要指示路由实例适用于第 3 层 VPN,请在 instance-type vrf
层次结构级别添加语句 [edit routing-instance routing-instance-name]
。
语句 domain-id
在 [edit routing-instances routing-options protocols ospf]
层次结构级别配置。如图 2 所示,路由器 PE2 上的路由实例必须与路由器 PE1 上的相应路由实例共享相同的域 ID,以便从路由器 CE1 到路由器 CE2(反之亦然)的路由以 3 类 LSA 分布。如果在路由器 PE1 和路由器 PE2 的路由实例中配置不同的 OSPF 域 ID,则来自每个 CE 路由器的路由都将以 5 类 LSA 分布。
在路由器 PE1 上配置路由实例:
[edit] routing-instances { VPN-A-San-Francisco-Chicago { instance-type vrf; interface so-0/0/0.0; route-distinguisher 10.255.14.216:11; vrf-import vpn-import-VPN-A; vrf-export vpn-export-VPN-A; routing-options { router-id 10.255.14.216; } protocols { ospf { domain-id 192.0.2.1; export vpn-import-VPN-A; area 0.0.0.0 { interface so-0/0/0.0; } } } } }
路由器 PE1 的配置摘要
配置接口
interfaces { so-0/0/0 { unit 0 { family inet { address 10.19.1.2/30; } } } so-0/0/1 { unit 0 { family inet { address 10.19.2.1/30; } family mpls; } } }
配置路由选项
routing-options { router-id 10.255.14.216; autonomous-system 65069; }
配置协议
protocols { mpls { interface so-0/0/1.0; } bgp { group San-Francisco-Chicago { type internal; preference 10; local-address 10.255.14.216; family inet-vpn { unicast; } neighbor 10.255.14.224; } } ospf { traffic-engineering; area 0.0.0.0 { interface so-0/0/1.0; } } ldp { interface so-0/0/1.0; } }
配置 VPN 策略
policy-options { policy-statement vpn-import-VPN-A { term term1 { from { protocol bgp; community import-target-VPN-A; } then accept; } term term2 { then reject; } } policy-statement vpn-export-VPN-A { term term1 { from protocol ospf; then { community add export-target-VPN-A; accept; } } term term2 { then reject; } } community export-target-VPN-A members [ target:10.255.14.216:11 domain-id:192.0.2.1:0 ]; community import-target-VPN-A members target:10.255.14.224:31; }
第 3 层 VPN 的路由实例
routing-instances { VPN-A-San-Francisco-Chicago { instance-type vrf; interface so-0/0/0.0; route-distinguisher 10.255.14.216:11; vrf-import vpn-import-VPN-A; vrf-export vpn-export-VPN-A; routing-options { router-id 10.255.14.216; } protocols { ospf { domain-id 192.0.2.1; export vpn-import-VPN-A; area 0.0.0.0 { interface so-0/0/0.0; } } } } }
OSPFv2 伪装链路概述
您可以在两个提供商边缘 (PE) 路由设备之间创建区域内链路或伪链路,以便 VPN 主干网优先于后门链路。后门链路是一种备用链路,可在 VPN 主干不可用时连接客户边缘 (CE) 设备。如果此类备份链路可用且 CE 设备位于同一 OSPF 区域,则默认行为是首选此备份链路而不是 VPN 主干网。这是因为备用链路被视为区域内链路,而 VPN 主干始终被视为区域间链路。区域内链路始终优先于区域间链路。
伪链路是 PE 设备之间未编号的点对点区域内链路。当 VPN 主干网具有伪区内链路时,如果伪链路的 OSPF 指标低于备份链路,则此伪链路会优先于备份链路。
伪链路使用 1 类链路状态通告 (LSA) 播发。伪装链路仅适用于路由实例和 OSPFv2。
每个伪链路都通过本地端点地址和远程端点地址的组合进行标识。 图 3 显示了 OSPFv2 伪链路。路由器 CE1 和路由器 CE2 位于同一 OSPFv2 区域。这些客户边缘 (CE) 路由设备通过路由器 PE1 和路由器 PE2 上的第 3 层 VPN 链接在一起。此外,路由器 CE1 和路由器 CE2 通过用作备份的区域链路连接。
![OSPFv2 Sham Link](/documentation/us/en/software/junos/vpn-l3/images/g017173.gif)
OSPFv2 将通过第 3 层 VPN 的链路视为区域间链路。默认情况下,OSPFv2 更喜欢区域内链路,而不是区域间链路,因此 OSPFv2 会选择备份区域内链路作为活动路径。在区域链路不是 CE 路由设备之间流量的预期主路径的配置中,这是不能接受的。您可以配置伪链路的指标,以确保第 3 层 VPN 上的路径优于通过连接 CE 路由设备的区域内链路上的备份路径。
对于远程端点,您可以将 OSPFv2 接口配置为需求电路,配置 IPsec 身份验证(单独配置实际 IPsec 身份验证),并定义指标值。
在以下情况下,您应该配置 OSPFv2 伪链路:
两个 CE 路由设备通过第 3 层 VPN 连接在一起。
这些 CE 路由设备位于相同的 OSPFv2 区域。
在两个 CE 路由设备之间配置了一个区域内链路。
如果 CE 路由设备之间没有区域内链路,则无需配置 OSPFv2 伪链路。
在 Junos OS 9.6 及更高版本中,OSPFv2 伪装链路作为隐藏路由安装在路由表中。此外,如果有相应的 OSPF 伪链路可用,则 BGP 路由不会导出到 OSPFv2。
在 Junos OS 16.1 及更高版本中,默认实例支持 OSPF 伪链路。如果用户未在伪链路上配置任何指标,则伪链路的成本会动态设置为 BGP 路由的 aigp 指标。如果 BGP 路由中不存在 aigp 指标,则伪链路成本默认为 1。
示例:配置 OSPFv2 Sham 链路
此示例说明如何在 PE 路由设备上启用 OSPFv2 伪链路。
要求
配置此示例之前,不需要除设备初始化之外的特殊配置。
概述
伪链路是未编号的点对点区域内链路,通过类型 1 链路状态播发 (LSA) 进行播发。伪装链路仅适用于路由实例和 OSPFv2。
每个伪链路都通过本地端点地址、远程端点地址及其所属的 OSPFv2 区域来识别。您手动配置两个 PE 设备之间的伪链路,这两个 PE 设备均在同一 VPN 路由和转发 (VRF) 路由实例中,并指定伪链路本地端点的地址。此地址用作伪链路数据包的源,也可供远程 PE 路由设备用作伪链路远程端点。您还可以添加可选 metric
选项,为远程端点设置指标值。指标值用于指定链路使用成本。总路径指标较低的路由优先于路径指标较高的路由。
要启用 PE 路由设备上的 OSPFv2 伪链路:
在 PE 路由设备上配置额外的环路接口。
配置在 PE 路由设备上支持第 3 层 VPN 的 VRF 路由实例,并将伪链路与现有 OSPF 区域相关联。路由实例中还包括 OSPFv2 伪链路配置。您可以配置伪链路的本地端点地址(本地 VPN 的环路地址)和远程端点地址(即远程 VPN 的环路地址)。在此示例中,VRF 路由实例被命名为红色。
图 4 显示了 OSPFv2 伪链路。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层次结构级别的 CLI 中 [edit]
。
CE1
set interfaces fe-1/2/0 unit 0 family inet address 10.1.1.1/30 set interfaces fe-1/2/0 unit 0 family mpls set interfaces fe-1/2/1 unit 0 family inet address 10.0.0.17/30 set interfaces lo0 unit 0 family inet address 192.0.2.1/24 set protocols ospf area 0.0.0.0 interface fe-1/2/0.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ospf area 0.0.0.0 interface fe-1/2/1.0 metric 100 set policy-options policy-statement send-direct from protocol direct set policy-options policy-statement send-direct then accept set routing-options router-id 192.0.2.1 set routing-options autonomous-system 1
PE1
set interfaces fe-1/2/0 unit 0 family inet address 10.1.1.2/30 set interfaces fe-1/2/0 unit 0 family mpls set interfaces fe-1/2/1 unit 0 family inet address 10.1.1.5/30 set interfaces fe-1/2/1 unit 0 family mpls set interfaces lo0 unit 0 family inet address 192.0.2.2/24 set interfaces lo0 unit 1 family inet address 198.51.100.2/24 set protocols mpls interface fe-1/2/1.0 set protocols bgp group toR4 type internal set protocols bgp group toR4 local-address 192.0.2.2 set protocols bgp group toR4 family inet-vpn unicast set protocols bgp group toR4 neighbor 192.0.2.4 set protocols ospf area 0.0.0.0 interface fe-1/2/1.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ldp interface fe-1/2/1.0 set protocols ldp interface lo0.0 set policy-options policy-statement bgp-to-ospf term 1 from protocol bgp set policy-options policy-statement bgp-to-ospf term 1 then accept set policy-options policy-statement bgp-to-ospf term 2 then reject set routing-instances red instance-type vrf set routing-instances red interface fe-1/2/0.0 set routing-instances red interface lo0.1 set routing-instances red route-distinguisher 2:1 set routing-instances red vrf-target target:2:1 set routing-instances red protocols ospf export bgp-to-ospf set routing-instances red protocols ospf sham-link local 198.51.100.2 set routing-instances red protocols ospf area 0.0.0.0 sham-link-remote 198.51.100.4 metric 10 set routing-instances red protocols ospf area 0.0.0.0 interface fe-1/2/0.0 set routing-instances red protocols ospf area 0.0.0.0 interface lo0.1 set routing-options router-id 192.0.2.2 set routing-options autonomous-system 2
P
set interfaces fe-1/2/0 unit 0 family inet address 10.1.1.6/30 set interfaces fe-1/2/0 unit 0 family mpls set interfaces fe-1/2/1 unit 0 family inet address 10.1.1.9/30 set interfaces fe-1/2/1 unit 0 family mpls set interfaces lo0 unit 3 family inet address 192.0.2.3/24 set protocols mpls interface all set protocols ospf area 0.0.0.0 interface lo0.3 passive set protocols ospf area 0.0.0.0 interface all set protocols ldp interface all set routing-options router-id 192.0.2.3
PE2
set interfaces fe-1/2/0 unit 0 family inet address 10.1.1.10/30 set interfaces fe-1/2/0 unit 0 family mpls set interfaces fe-1/2/1 unit 0 family inet address 10.1.1.13/30 set interfaces fe-1/2/1 unit 0 family mpls set interfaces lo0 unit 0 family inet address 192.0.2.4/32 set interfaces lo0 unit 1 family inet address 198.51.100.4/32 set protocols mpls interface fe-1/2/0.0 set protocols bgp group toR2 type internal set protocols bgp group toR2 local-address 192.0.2.4 set protocols bgp group toR2 family inet-vpn unicast set protocols bgp group toR2 neighbor 192.0.2.2 set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ospf area 0.0.0.0 interface fe-1/2/0.0 set protocols ldp interface fe-1/2/0.0 set protocols ldp interface lo0.0 set policy-options policy-statement bgp-to-ospf term 1 from protocol bgp set policy-options policy-statement bgp-to-ospf term 1 then accept set policy-options policy-statement bgp-to-ospf term 2 then reject set routing-instances red instance-type vrf set routing-instances red interface fe-1/2/1.0 set routing-instances red interface lo0.1 set routing-instances red route-distinguisher 2:1 set routing-instances red vrf-target target:2:1 set routing-instances red protocols ospf export bgp-to-ospf set routing-instances red protocols ospf sham-link local 198.51.100.4 set routing-instances red protocols ospf area 0.0.0.0 sham-link-remote 198.51.100.2 metric 10 set routing-instances red protocols ospf area 0.0.0.0 interface fe-1/2/1.0 set routing-instances red protocols ospf area 0.0.0.0 interface lo0.1 set routing-options router-id 192.0.2.4 set routing-options autonomous-system 2
CE2
set interfaces fe-1/2/0 unit 14 family inet address 10.1.1.14/30 set interfaces fe-1/2/0 unit 14 family mpls set interfaces fe-1/2/0 unit 18 family inet address 10.0.0.18/30 set interfaces lo0 unit 5 family inet address 192.0.2.5/24 set protocols ospf area 0.0.0.0 interface fe-1/2/0.14 set protocols ospf area 0.0.0.0 interface lo0.5 passive set protocols ospf area 0.0.0.0 interface fe-1/2/0.18 set policy-options policy-statement send-direct from protocol direct set policy-options policy-statement send-direct then accept set routing-options router-id 192.0.2.5 set routing-options autonomous-system 3
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关导航 CLI 的信息,请参阅在 CLI 用户指南中修改 Junos OS 配置。
要在每个 PE 设备上配置 OSPFv2 伪链路,
-
配置接口,包括两个环路接口。
[edit interfaces] user@PE1# set fe-1/2/0 unit 0 family inet address 10.1.1.2/30 user@PE1# set fe-1/2/0 unit 0 family mpls user@PE1# set fe-1/2/1 unit 0 family inet address 10.1.1.5/30 user@PE1# set fe-1/2/1 unit 0 family mpls user@PE1# set lo0 unit 0 family inet address 192.0.2.2/24 user@PE1# set lo0 unit 1 family inet address 198.51.100.2/24
-
在面向核心的接口上配置 MPLS。
[edit protocols mpls] user@PE1# set interface fe-1/2/1.0
-
配置内部 BGP (IBGP)。
[edit ] user@PE1# set protocols bgp group toR4 type internal user@PE1# set protocols bgp group toR4 local-address 192.0.2.2 user@PE1# set protocols bgp group toR4 family inet-vpn unicast user@PE1# set protocols bgp group toR4 neighbor 192.0.2.4
-
在面向核心的接口和主实例中使用的环路接口上配置 OSPF。
[edit protocols ospf area 0.0.0.0] user@PE1# set interface fe-1/2/1.0 user@PE1# set interface lo0.0 passive
-
在面向核心的接口以及主实例中使用的环路接口上配置 LDP 或 RSVP。
[edit protocols ldp] user@PE1# set interface fe-1/2/1.0 user@PE1# set interface lo0.0
-
配置路由策略,以用于路由实例。
[edit policy-options policy-statement bgp-to-ospf] user@PE1# set term 1 from protocol bgp user@PE1# set term 1 then accept user@PE1# set term 2 then reject
-
配置路由实例。
[edit routing-instances red] user@PE1# set instance-type vrf user@PE1# set interface fe-1/2/0.0 user@PE1# set route-distinguisher 2:1 user@PE1# set vrf-target target:2:1 user@PE1# set protocols ospf export bgp-to-ospf user@PE1# set protocols ospf area 0.0.0.0 interface fe-1/2/0.0
-
配置 OSPFv2 伪链路。
在路由实例和 OSPF 配置中包含额外的环路接口。
请注意,伪链路接口上的指标设置为 10。在设备 CE1 的备份 OSPF 链路上,指标设置为 100。这会使伪链路成为首选链路。
[edit routing-instances red] user@PE1# set interface lo0.1 user@PE1# set protocols ospf sham-link local 198.51.100.2 user@PE1# set protocols ospf area 0.0.0.0 sham-link-remote 198.51.100.4 metric 10 user@PE1# set protocols ospf area 0.0.0.0 interface lo0.1
-
配置自治系统 (AS) 编号和路由器 ID。
[edit routing-options] user@PE1# set router-id 192.0.2.2 user@PE1# set autonomous-system 2
-
完成设备配置后,提交配置。
[edit] user@R1# commit
结果
输入和命令以确认show interfaces
show routing-instances
您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
PE1 输出:
user@PE1# show interfaces fe-1/2/0 { unit 0{ family inet { address 10.1.1.2/30; } family mpls; } } fe-1/2/1 { unit 0 { family inet { address 10.1.1.5/30; } family mpls; } } lo0 { unit 0 { family inet { address 192.0.2.2/24; } } unit 1 { family inet { address 198.51.100.2/24; } } }
user@PE1# show protocols mpls { interface fe-1/2/1.0; } bgp { group toR4 { type internal; local-address 192.0.2.2; family inet-vpn { unicast; } neighbor 192.0.2.4; } } ospf { area 0.0.0.0 { interface fe-1/2/1.0; interface lo0.0 { passive; } } } ldp { interface fe-1/2/1.0; interface lo0.0; }
user@PE1# show policy-options policy-statement bgp-to-ospf { term 1 { from protocol bgp; then accept; } term 2 { then reject; } }
user@PE1# show routing-instances red { instance-type vrf; interface fe-1/2/0.0; interface lo0.1; route-distinguisher 2:1; vrf-target target:2:1; protocols { ospf { export bgp-to-ospf; sham-link local 198.51.100.2; area 0.0.0.0 { sham-link-remote 198.51.100.4 metric 10; interface fe-1/2/0.0; interface lo0.1; } } } }
user@PE1# show routing-options router-id 192.0.2.2; autonomous-system 2;
验证
确认配置工作正常。
验证伪链路接口
目的
验证伪链路接口。伪链路在 OSPFv2 中被视为接口,命名显示为 shamlink.<unique identifier>
,其中唯一标识符为数字。例如, shamlink.0
。伪链路显示为点对点接口。
行动
在操作模式下,输入 show ospf interface instance instance-name
命令。
user@PE1> show ospf interface instance red Interface State Area DR ID BDR ID Nbrs lo0.1 DR 0.0.0.0 198.51.100.2 0.0.0.0 0 fe-1/2/0.0 PtToPt 0.0.0.0 0.0.0.0 0.0.0.0 1 shamlink.0 PtToPt 0.0.0.0 0.0.0.0 0.0.0.0 1
验证伪链路的本地和远程端点
目的
验证伪链路的本地和远程端点。伪链路接口的 MTU 始终为零。
行动
在操作模式下,输入 show ospf interface instance instance-name detail
命令。
user@PE1> show ospf interface shamlink.0 instance red Interface State Area DR ID BDR ID Nbrs shamlink.0 PtToPt 0.0.0.0 0.0.0.0 0.0.0.0 1 Type: P2P, Address: 0.0.0.0, Mask: 0.0.0.0, MTU: 0, Cost: 10 Local: 198.51.100.2, Remote: 198.51.100.4 Adj count: 1 Hello: 10, Dead: 40, ReXmit: 5, Not Stub Auth type: None Protection type: None, No eligible backup Topology default (ID 0) -> Cost: 10
验证伪链路邻接
目的
验证配置的伪链路之间的邻接。
行动
在操作模式下,输入 show ospf neighbor instance instance-name
命令。
user@PE1> show ospf neighbor instance red Address Interface State ID Pri Dead 10.1.1.1 fe-1/2/0.0 Full 192.0.2.1 128 35 198.51.100.4 shamlink.0 Full 198.51.100.4 0 31
验证链路状态通告
目的
验证源自实例的路由器 LSA 是否将伪链路邻接作为未编号的点对点链路。伪链路的链路数据从0x80010000到0x8001ffff不等。
行动
在操作模式下,输入 show ospf database instance instance-name
命令。
user@PE1> show ospf database instance red OSPF database, Area 0.0.0.0 Type ID Adv Rtr Seq Age Opt Cksum Len Router 192.0.2.1 192.0.2.1 0x80000009 1803 0x22 0x6ec7 72 Router 192.0.2.5 192.0.2.5 0x80000007 70 0x22 0x2746 72 Router *198.51.100.2 198.51.100.2 0x80000006 55 0x22 0xda6b 60 Router 198.51.100.4 198.51.100.4 0x80000005 63 0x22 0xb19 60 Network 10.0.0.18 192.0.2.5 0x80000002 70 0x22 0x9a71 32 OSPF AS SCOPE link state database Type ID Adv Rtr Seq Age Opt Cksum Len Extern 198.51.100.2 198.51.100.4 0x80000002 72 0xa2 0x343 36 Extern *198.51.100.4 198.51.100.2 0x80000002 71 0xa2 0xe263 36
验证路径选择
目的
验证是否已使用第 3 层 VPN 路径,而非备份路径。
行动
在操作模式下,输入 traceroute
从设备 CE1 到设备 CE2 的命令。
user@CE1> traceroute 192.0.2.5 traceroute to 192.0.2.5 (192.0.2.5), 30 hops max, 40 byte packets 1 10.1.1.2 (10.1.1.2) 1.930 ms 1.664 ms 1.643 ms 2 * * * 3 10.1.1.10 (10.1.1.10) 2.485 ms 1.435 ms 1.422 ms MPLS Label=299808 CoS=0 TTL=1 S=1 4 192.0.2.5 (192.0.2.5) 1.347 ms 1.362 ms 1.329 ms
意义
traceroute 操作显示,第 3 层 VPN 是首选路径。如果要移除伪链路,或者修改 OSPF 指标以首选该备份路径,traceroute 将显示备份路径是首选路径。
在第 3 层 VPN 中配置 PE 和 CE 路由器之间的 EBGP 多跳会话
您可以在第 3 层 VPN 的 PE 和 CE 路由器之间配置 EBGP 或 IBGP 多跳会话。这允许您在 PE 和 CE 路由器之间拥有一个或多个路由器。在 PE 和 CE 路由器之间使用 IBGP 不需要配置任何附加语句。但是,在 PE 和 CE 路由器之间使用 EBGP 需要配置语句 multihop
。
要为 PE 和 CE 路由器之间的连接配置外部 BGP 多跳会话,请在 PE 路由器上添加语句 multihop
。为了防止出现路由环路,您必须为多跳会话配置生存时间 (TTL) 值:
multihop ttl-value;
有关可配置此语句的层次结构级别列表,请参阅此语句的摘要部分。
配置 LDP-over-RSVP VPN 拓扑
此示例说明如何设置 VPN 拓扑,其中 LDP 数据包通过 RSVP LSP 隧道传输。此配置包含以下组件(请参阅 图 5):
一个 VPN (VPN-A)
两个 PE 路由器
LDP 作为 PE 路由器与其相邻 P 路由器之间的信令协议
在 LDP 通过隧道传输的两个 P 路由器之间提供一个 RSVP LSP
![Example of an LDP-over-RSVP VPN Topology](/documentation/us/en/software/junos/vpn-l3/images/g017185.gif)
以下步骤介绍如何建立此拓扑,以及如何将数据包从 CE 路由器 CE2 发送到 CE 路由器 CE1:
P 路由器 P1 和 P3 相互建立 RSVP LSP,并在 inet.3 路由表中安装其环路地址。
PE 路由器 PE1 通过接口
so-1/0/0.0
与路由器 P1 建立 LDP 会话。路由器 P1 与路由器 P3 的环路地址建立 LDP 会话,可使用 RSVP LSP 访问该地址。
路由器 P1 将其标签绑定(包括要到达路由器 PE1 的标签)发送至路由器 P3。这些标签绑定允许路由器 P3 将 LDP 数据包定向到路由器 PE1。
路由器 P3 通过接口
so0-0/0/0.0
与路由器 PE2 建立 LDP 会话,并使用路由器 P1 的环路地址建立 LDP 会话。路由器 P3 将其标签绑定(包括要到达路由器 PE2 的标签)发送至路由器 P1。这些标签绑定允许路由器 P1 将 LDP 数据包定向到路由器 PE2 的环路地址。
路由器 PE1 和 PE2 相互建立 IBGP 会话。
当路由器 PE1 向路由器 PE2 通告其从路由器 CE1 学习的路由时,它包括了其 VPN 标签。(PE 路由器会创建 VPN 标签,并将其绑定到 PE 和 CE 路由器之间的接口。)同样,当路由器 PE2 宣布其从路由器 CE2 学习的路由时,它会将其 VPN 标签发送至路由器 PE1。
当路由器 PE2 希望将数据包转发到路由器 CE1 时,它会将两个标签推送到数据包的标签堆栈上:首先,绑定到路由器 PE1 和路由器 CE1 之间接口的 VPN 标签,然后是用于到达路由器 PE1 的 LDP 标签。然后,它会通过接口 so-0/0/1.0
将数据包转发到路由器 P3。
当路由器 P3 从路由器 PE2 接收数据包时,它会交换堆栈顶部的 LDP 标签(根据其 LDP 数据库),并将 RSVP 标签推送到堆栈顶部,以便现在由 RSVP LSP 交换数据包。此时,堆栈上有三个标签:内部(底部)标签是 VPN 标签,中间是 LDP 标签,外部(上)是 RSVP 标签。
路由器 P2 接收数据包,并通过交换 RSVP 标签将其切换到路由器 P1。在此拓扑中,由于路由器 P2 是 LSP 中倒数第二跃点路由器,因此它会弹出 RSVP 标签,并通过接口
so-1/1/0.0
将数据包转发到路由器 P1。此时,堆栈上有两个标签:内部标签是 VPN 标签,外部标签是 LDP 标签。路由器 P1 收到数据包时,会弹出外部标签(LDP 标签),并使用接口
so-1/0/0.0
将数据包转发到路由器 PE1。在此拓扑中,路由器 PE1 是出口 LDP 路由器,因此路由器 P1 会弹出 LDP 标签,而不是将其与另一个标签交换。此时,堆栈上只有一个标签,即 VPN 标签。当路由器 PE1 收到数据包时,它会弹出 VPN 标签,并将数据包作为 IPv4 数据包通过接口
ge-1/1/0.0
转发到路由器 CE1。
对于从路由器 CE1 发送到路由器 CE2 的数据包,也会出现一组类似的操作。
以下列表说明了从路由器 CE2 发送到路由器 CE1 的数据包,各个路由器如何公布 LDP、RSVP 和 VPN 标签。这些步骤包括标签值的示例( 图 6 所示)。
LDP 标签
路由器 PE1 向路由器 P1 发布 LDP 标签 3。
路由器 P1 宣布路由器 PE1 到路由器 P3 的 LDP 标签 100,001。
路由器 P3 宣布路由器 PE1 到路由器 PE2 的 LDP 标签 100,002。
RSVP 标签
路由器 P1 向路由器 P2 发布 RSVP 标签 3。
路由器 P2 向路由器 P3 发布 RSVP 标签 100,003。
VPN 标签
路由器 PE1 宣布从路由器 CE1 到路由器 CE2 的 VPN 标签 100,004 到路由器 PE2。
![Label Pushing and Popping](/documentation/us/en/software/junos/vpn-l3/images/g017186.gif)
对于从 图 6 中的主机 B 发送到主机 A 的数据包,数据包标头和标签会随着数据包传输到目的地而更改:
源自主机 B 的数据包的源地址为 B,其标头中为 A 的目标地址。
路由器 CE2 在数据包中添加了接口
so-1/0/0
的下一跃点。路由器 PE2 会交换接口
so-1/0/0
的下一跃点,并将其替换为 PE1 的下一跃点。它还为到达路由器 PE1 添加了两个标签,首先是 VPN 标签 (100,004),然后是 LDP 标签 (100,002)。因此,VPN 标签是堆栈上的内部(底部)标签,LDP 标签是外部标签。路由器 P3 将交换路由器 PE2 (100,002) 添加的 LDP 标签,并将其替换为 LDP 标签,以到达路由器 PE1 (100,001)。它还为到达路由器 P2 (100,003) 添加了 RSVP 标签。
路由器 P2 移除了 RSVP 标签 (100,003),因为它是 MPLS LSP 中倒数第二跃点。
路由器 P1 会移除 LDP 标签 (100,001),因为它是倒数第二的 LDP 路由器。它还交换了 PE1 的下一跳,并用下一跃点接口
so-1/0/0
替换掉。路由器 PE1 会移除 VPN 标签 (100,004)。它还交换了它的下一跳接口
so-1/0/0
,并将其替换为下一跃点接口ge-1/1/0
。路由器 CE1 移除了的下一跃点接口
ge-1/1/0
,数据包标头现在仅包含 B 的源地址和 A 的目标地址。
此示例的最后一部分整合了在 图 5 所示的每台服务 P 路由器上配置 VPN 功能所需的语句。
在此示例中,专用 AS 编号用于路由识别产品和路由目标。此编号仅用于说明。配置 VPN 时,应使用分配的 AS 编号。
以下部分介绍如何在 PE 和 P 路由器上配置 VPN 功能。CE 路由器没有任何有关 VPN 的信息,因此您可以正常配置。
- 在 PE 和 P 路由器上启用 IGP
- 在 PE 和 P 路由器上启用 LDP
- 在 P 路由器上启用 RSVP 和 MPLS
- 配置 P 路由器之间的 MPLS LSP 隧道
- 在 PE 路由器上配置 IBGP
- 在 PE 路由器上为 VPN 配置路由实例
- 在 PE 路由器上配置 VPN 策略
- 按路由器汇总的 LDP-over-RSVP VPN 配置
在 PE 和 P 路由器上启用 IGP
要允许 PE 和 P 路由器在自身之间交换路由信息,必须在所有这些路由器上配置 IGP,或者必须配置静态路由。您可以在路由协议进程 (rpd) 的主实例(即,在 [edit protocols]
层次结构级别)上配置 IGP,而不是在 VPN 路由实例中(也就是说,不在 [edit routing-instances]
层次结构级别上)。
您以标准方式配置 IGP。此配置示例不包括这一部分配置。
在 PE 和 P 路由器上启用 LDP
在此配置示例中,LDP 是 PE 路由器之间的信令协议。要使 VPN 正常运行,您必须在两个 PE 路由器上以及连接到 PE 路由器的 P 路由器上配置 LDP。您只需在服务提供商网络核心的接口上配置 LDP;也就是说,在 PE 和 P 路由器之间,以及 P 路由器之间无需在 PE 和 CE 路由器之间的接口上配置 LDP。
在此配置示例中,您在 P 路由器的环路接口上配置 LDP,因为这些接口是配置 MPLS LSP 的接口。
在 PE 路由器上,您还必须配置 family inet
配置逻辑接口。
在路由器 PE1 上,配置 LDP:
[edit protocols] ldp { interface so-1/0/0.0; } [edit interfaces] so-1/0/0 { unit 0 { family mpls; } }
在路由器 PE2 上,配置 LDP:
[edit protocols] ldp { interface so-0/0/0.0; } [edit interfaces] so-0/0/1 { unit 0 { family mpls; } }
在路由器 P1 上,配置 LDP:
[edit protocols] ldp { interface so-1/0/0.0; interface lo0; }
在路由器 P3 上,配置 LDP:
[edit protocols] ldp { interface lo0; interface so-0/0/0.0; }
在路由器 P2 上,虽然不需要配置 LDP,但您可以选择将其配置为提供回退 LDP 路径,以防 RSVP LSP 变得无法运行:
[edit protocols] ldp { interface so-1/1/0.0; interface at-2/0/0.0; }
在 P 路由器上启用 RSVP 和 MPLS
在 P 路由器 P2 上,您必须配置 RSVP 和 MPLS,因为此路由器存在于 P 路由器 P1 和 P3 之间的 MPLS LSP 路径上:
[edit] protocols { rsvp { interface so-1/1/0.0; interface at-2/0/0.0; } mpls { interface so-1/1/0.0; interface at-2/0/0.0; } }
配置 P 路由器之间的 MPLS LSP 隧道
在此配置示例中,LDP 通过 RSVP LSP 建立隧道。因此,除了配置 RSVP 外,您必须在 IGP 中启用流量工程支持,并且必须创建 MPLS LSP 以隧道传输 LDP 流量。
在路由器 P1 上,启用 RSVP 并配置 MPLS LSP 隧道的一端。在此示例中,为 OSPF 启用了流量工程支持,并在到 LSP 和路由器 PE1 的接口上配置 MPLS。在语句中 to
,指定路由器 P3 的环路地址。
[edit] protocols { rsvp { interface so-1/0/1.0; } mpls { label-switched-path P1-to-P3 { to 10.255.100.1; ldp-tunneling; } interface so-1/0/0.0; interface so-1/0/1.0; } ospf { traffic-engineering; area 0.0.0.0 { interface so-1/0/0.0; interface so-1/0/1.0; } } }
在路由器 P3 上,启用 RSVP 并配置 MPLS LSP 隧道的另一端。同样,OSPF 还启用了流量工程支持,并在到 LSP 和路由器 PE2 的接口上配置 MPLS。在语句中 to
,指定路由器 P1 的环路地址。
[edit] protocols { rsvp { interface at-2/0/1.0; } mpls { label-switched-path P3-to-P1 { to 10.255.2.2; ldp-tunneling; } interface at-2/0/1.0; interface so-0/0/0.0; } ospf { traffic-engineering; area 0.0.0.0 { interface at-2/0/1.0; interface so-0/0/0.0; } } }
在 PE 路由器上配置 IBGP
在 PE 路由器上,使用以下属性配置 IBGP 会话:
VPN 系列 — 要指示 IBGP 会话适用于 VPN,请包括语句
family inet-vpn
。环路地址 — 包括
local-address
语句,指定本地 PE 路由器的环路地址。VPN 的 IBGP 会话通过环路地址运行。您还必须在lo0
层次结构级别配置接口[edit interfaces]
。示例不包括这部分路由器配置。邻接方地址 — 包括语句
neighbor
,用于指定相邻 PE 路由器的 IP 地址,即其环路 (lo0
) 地址。
在路由器 PE1 上,配置 IBGP:
[edit] protocols { bgp { group PE1-to-PE2 { type internal; local-address 10.255.1.1; family inet-vpn { unicast; } neighbor 10.255.200.2; } } }
在路由器 PE2 上,配置 IBGP:
[edit] protocols { bgp { group PE2-to-PE1 { type internal; local-address 10.255.200.2; family inet-vpn { unicast; } neighbor 10.255.1.1; } } }
在 PE 路由器上为 VPN 配置路由实例
两个 PE 路由器都服务于 VPN-A,因此您必须在每台路由器上为定义以下内容的 VPN 配置一个路由实例:
路由识别符,对于 PE 路由器上的每个路由实例必须唯一。它用于区分一个 VPN 中的地址与另一个 VPN 中的地址。
实例类型为
vrf
,在 PE 路由器上创建 VRF 表。连接到 CE 路由器的接口。
VRF 导入和导出策略,在为同一 VPN 提供服务的每台 PE 路由器上必须相同。除非导入策略仅包含语句
then reject
,否则它必须包含对社区的引用。否则,当您尝试提交配置时,提交会失败。注意:在此示例中,专用 AS 编号用于路由识别器。此编号仅用于说明。配置 VPN 时,应使用分配的 AS 编号。
PE 和 CE 路由器之间的路由,这是 PE 路由器将 VPN 相关路由分发到或从连接的 CE 路由器分发所必需的。您可以配置路由协议(BGP、OSPF 或 RIP)或者配置静态路由。
在路由器 PE1 上,为 VPN-A 配置以下路由实例。在此示例中,路由器 PE1 使用 RIP 将路由分发到其连接的 CE 路由器和从其连接到的 CE 路由器。
[edit] routing-instance { VPN-A { instance-type vrf; interface ge-1/0/0.0; route-distinguisher 65535:0; vrf-import VPN-A-import; vrf-export VPN-A-export; protocols { rip { group PE1-to-CE1 { neighbor ge-1/0/0.0; } } } } }
在路由器 PE2 上,为 VPN-A 配置以下路由实例。在此示例中,路由器 PE2 使用 OSPF 将路由分发到其连接的 CE 路由器和从其连接到的 CE 路由器。
[edit] routing-instance { VPN-A { instance-type vrf; interface so-1/2/0.0; route-distinguisher 65535:1; vrf-import VPN-A-import; vrf-export VPN-A-export; protocols { ospf { area 0.0.0.0 { interface so-1/2/0.0; } } } } }
在 PE 路由器上配置 VPN 策略
您必须在每个 PE 路由器上配置 VPN 导入和导出策略,以便这些路由器在其 VRF 表中安装适当的路由,用于在 VPN 内转发数据包。对于 VPN A,VRF 表为 VPN-A.inet.0。
在 VPN 策略中,您还可以配置 VPN 目标社区。
在此示例中,专用 AS 编号用于路由目标。此编号仅用于说明。配置 VPN 时,应使用分配的 AS 编号。
在路由器 PE1 上,配置以下 VPN 导入和导出策略:
此示例中显示的策略资格符只是 VPN 运行所需的策略资格符。您可以根据需要为配置的任何策略配置附加资格符。
[edit] policy-options { policy-statement VPN-A-import { term a { from { protocol bgp; community VPN-A; } then accept; } term b { then reject; } } policy-statement VPN-A-export { term a { from protocol rip; then { community add VPN-A; accept; } } term b { then reject; } } community VPN-A members target:65535:00; }
在路由器 PE2 上,配置以下 VPN 导入和导出策略:
[edit] policy-options { policy-statement VPN-A-import { term a { from { protocol bgp; community VPN-A; } then accept; } term b { then reject; } } policy-statement VPN-A-export { term a { from protocol ospf; then { community add VPN-A; accept; } } term b { then reject; } } community VPN-A members target:65535:00; }
若要在路由器上应用 VPN 策略,请在 vrf-export
PE 路由器上配置路由实例时包括 and vrf-import
语句。VRF 导入和导出策略可处理在 PE 路由器之间运行的 IBGP 会话中的路由分布。
按路由器汇总的 LDP-over-RSVP VPN 配置
路由器 PE1
VPN-A 的路由实例
routing-instance { VPN-A { instance-type vrf; interface ge-1/0/0.0; route-distinguisher 65535:0; vrf-import VPN-A-import; vrf-export VPN-A-export; } }
实例路由协议
protocols { rip { group PE1-to-CE1 { neighbor ge-1/0/0.0; } } }
接口
interfaces { so-1/0/0 { unit 0 { family mpls; } } ge-1/0/0 { unit 0; } }
主协议实例
protocols { }
启用 LDP
ldp { interface so-1/0/0.0; }
启用 MPLS
mpls { interface so-1/0/0.0; interface ge-1/0/0.0; }
配置 IBGP
bgp { group PE1-to-PE2 { type internal; local-address 10.255.1.1; family inet-vpn { unicast; } neighbor 10.255.100.1; } }
配置 VPN 策略
policy-options { policy-statement VPN-A-import { term a { from { protocol bgp; community VPN-A; } then accept; } term b { then reject; } } policy-statement VPN-A-export { term a { from protocol rip; then { community add VPN-A; accept; } } term b { then reject; } } community VPN-A members target:65535:00; }
路由器 P1
主协议实例
protocols { }
启用 RSVP
rsvp { interface so-1/0/1.0; }
启用 LDP
ldp { interface so-1/0/0.0; interface lo0.0; }
启用 MPLS
mpls { label-switched-path P1-to-P3 { to 10.255.100.1; ldp-tunneling; } interface so-1/0/0.0; interface so-1/0/1.0; }
配置 OSPF 以支持流量工程
ospf { traffic-engineering; area 0.0.0.0 { interface so-1/0/0.0; interface so-1/0/1.0; } }
路由器 P2
主协议实例
protocols { }
启用 RSVP
rsvp { interface so-1/1/0.0; interface at-2/0/0.0; }
启用 MPLS
mpls { interface so-1/1/0.0; interface at-2/0/0.0; }
路由器 P3
主协议实例
protocols { }
启用 RSVP
rsvp { interface at-2/0/1.0; }
启用 LDP
ldp { interface so-0/0/0.0; interface lo0.0; }
启用 MPLS
mpls { label-switched-path P3-to-P1 { to 10.255.2.2; ldp-tunneling; } interface at-2/0/1.0; interface so-0/0/0.0; }
配置 OSPF 以支持流量工程
ospf { traffic-engineering; area 0.0.0.0 { interface at-2/0/1.0; interface at-2/0/1.0; } }
路由器 PE2
VPN-A 的路由实例
routing-instance { VPN-A { instance-type vrf; interface so-1/2/0.0; route-distinguisher 65535:1; vrf-import VPN-A-import; vrf-export VPN-A-export; } }
实例路由协议
protocols { ospf { area 0.0.0.0 { interface so-1/2/0.0; } } }
接口
interfaces { so-0/0/0 { unit 0 { family mpls; } } so-1/2/0 { unit 0; } }
主协议实例
protocols { }
启用 LDP
ldp { interface so-0/0/0.0; }
启用 MPLS
mpls { interface so-0/0/0.0; interface so-1/2/0.0; }
配置 IBGP
bgp { group PE2-to-PE1 { type internal; local-address 10.255.200.2; family inet-vpn { unicast; } neighbor 10.255.1.1; } }
配置 VPN 策略
policy-options { policy-statement VPN-A-import { term a { from { protocol bgp; community VPN-A; } then accept; } term b { then reject; } } policy-statement VPN-A-export { term a { from protocol ospf; then { community add VPN-A; accept; } } term b { then reject; } } community VPN-A members target:65535:01; }
配置基于应用程序的第 3 层 VPN 拓扑
此示例说明了一种基于应用程序的机制,用于将流量转发到第 3 层 VPN。通常,通过将一个或多个接口包括在 VPN 路由实例的配置中,与 VPN 关联或绑定。通过将接口绑定到 VPN,可以使用 VPN 的 VRF 表对该接口上的任何传入流量做出转发决策。绑定接口还包括 VRF 表中的接口本地路由,可为 VRF 路由提供下一跃点解析。
在此示例中,防火墙过滤器用于定义接口上的哪些传入流量通过标准路由表 inet.0 进行转发,哪些传入流量通过 VRF 表进行转发。您可以扩展此示例,以便接口上的传入流量可重定向至一个或多个 VPN。例如,您可以定义一个配置来支持基于源地址转发流量、转发超文本传输协议 (HTTP) 流量或仅转发流媒体的 VPN。
要使此配置正常工作,必须符合以下条件:
使用基于过滤器的转发的接口不得绑定到 VPN。
静态路由必须用作路由方式。
您必须定义一个在 inet.0 和 VRF 表之间共享的接口路由表组,以便为 VRF 表提供本地路由。
此示例包含两个客户端主机(客户端 D 和客户端 E),它们位于两个不同的 VPN 中,并且要同时在 VPN 内和互联网上发送流量。这些路径的定义如下:
客户端 A 通过 VPN A 向客户端 E 发送流量,其返回路径也使用 VPN A(使用 VPN 的 VRF 表)。
客户端 B 使用基于目标的标准路由(使用 inet.0 路由表)的返回路径通过 VPN B 将流量发送到客户端 D。
客户端 B 和 C 使用标准路由(使用 inet.0 路由表)以及同样使用标准路由的返回路径向互联网发送流量。
此示例说明,在配置基于应用程序的第 3 层 VPN 拓扑时有多种选项。这种灵活性适用于许多需要在受限路由环境中转发特定流量的网络实施。
此配置示例仅显示基于过滤器的转发、路由实例和策略的配置部分。它没有说明如何配置第 3 层 VPN。
图 7 展示了此示例中使用的网络拓扑。
![Application-Based Layer 3 VPN Example Configuration](/documentation/us/en/software/junos/vpn-l3/images/g017187.gif)
路由器 A 上的配置
在路由器 A 上,将接口配置为客户端 A、B 和 C。此配置评估传入流量,以确定是使用 VPN 转发还是通过基于目标的标准路由进行转发。
首先,应用入站过滤器并配置接口:
[edit] interfaces { fe-1/1/0 { unit 0 { family inet { filter { input fbf-vrf; } address 192.168.1.1/24; } } } }
由于使用基于过滤器的转发的接口不得绑定到 VPN,因此必须配置替代方法,以便为 VRF 表提供下一跃点路由。为此,您可以定义一个接口路由表组,并在所有路由表之间共享此组:
[edit] routing-options { interface-routes { rib-group inet if-rib; } rib-groups { if-rib { import-rib [ inet.0 vpn-A.inet.0 vpn-B.inet.0 ]; } } }
您可将以下过滤器应用于接口 fe-1/1/0.0
上的传入流量。第一个术语匹配来自客户端 A 的流量,并将其转发到 VPN A 的路由实例。第二个术语匹配来自客户端 B 的流量(发往客户端 D),并将其转发至 VPN B 的路由实例。第三个术语匹配所有其他流量,根据 inet.0 中的路由,通常通过基于目标的转发方式进行转发。
[edit firewall family family-name] filter fbf-vrf { term vpnA { from { source-address { 192.168.1.1/32; } } then { routing-instance vpn-A; } } term vpnB { from { source-address { 192.168.1.2/32; } destination-address { 192.168.3.0/24; } } then routing-instance vpn-B; } } term internet { then accept; }
然后,为 VPN A 和 VPN B 配置路由实例。请注意,这些语句包括定义第 3 层 VPN(语句除外) interface
的所有必要语句。
[edit] routing-instances { vpn-A { instance-type vrf; route-distinguisher 172.21.10.63:100; vrf-import vpn-A-import; vrf-export vpn-A-export; } vpn-B { instance-type vrf; route-distinguisher 172.21.10.63:200; vrf-import vpn-B-import; vrf-export vpn-B-export; } }
路由器 E 上的配置
在路由器 E 上,配置访问互联网的默认路由。您应该将此路由注入到本地 IBGP 网格中,以提供网络的出口点。
[edit] routing-options { static { route 0.0.0.0/0 next-hop so-2/2/2.0 discard } }
配置到客户端 E 的接口,以便通过 VPN A 转发与 VPN 策略匹配的接口 fe-1/1/1.0
上的所有传入流量:
[edit] routing-instances { vpn-A { interface fe-1/1/1.0 instance-type vrf; route-distinguisher 172.21.10.62:100; vrf-import vpn-A-import; vrf-export vpn-A-export; routing-options { static { route 192.168.2.0/24 next-hop fe-1/1/1.0; } } } }
路由器 F 上的配置
同样,由于使用基于过滤器的转发的接口不得绑定到 VPN,因此您可以配置一种替代方法,通过定义接口路由表组并在所有路由表之间共享此组来为 VRF 表提供下一跃点路由。要为正常 inet.0 路由向客户端提供路由,请定义一个要包含在 inet.0 中的静态路由,并将该静态路由重新分配给 BGP:
[edit] routing-options { interface-routes { rib-group inet if-rib; } rib-groups { if-rib { import-rib [ inet.0 vpn-B.inet.0 ]; } } }
要将流量从 VPN B 定向到客户端 D,请在路由器 F 上为 VPN B 配置路由实例。来自接口 so-3/3/3.0
上客户端 D 的所有传入流量通常通过基于 inet.0 中的路由的目标地址进行转发。
[edit] routing-instances { vpn-B { instance-type vrf; route-distinguisher 172.21.10.64:200; vrf-import vpn-B-import; vrf-export vpn-B-export; routing-options { static { route 192.168.3.0/24 next-hop so-3/3/3.0; } } } }