重叠式 VPN
使用路由表组配置重叠的 VPN
在第 3 层 VPN 中,CE 路由器通常是多个 VPN 的成员。此示例说明如何配置支持支持多个 VPN 的 CE 路由器的 PE 路由器。 对此类配置的支持使用称为路由表组(有时也称为路由信息库 [RIB] 组)的 Junos OS 功能,该功能允许将路由安装到多个路由表中。路由表组是协议应将其路由安装到其中的路由表列表。
您可以在 [edit routing-options] 层次结构级别为默认实例定义路由表组。您不能在 [edit routing-instances routing-options] 层次结构级别配置路由表组;否则会导致提交错误。
定义路由表组后,该组可由多个协议使用。还可以将路由表组应用于静态路由。本节中的配置示例包括这两种类型的配置。
图 1 说明了本节中配置示例的拓扑。本节中的配置说明了连接到同一 PE 路由器的 CE 路由器之间的本地连接。如果路由器 PE1 仅连接到路由器 CE2 (VPN AB),则无需任何额外配置。以下部分中的配置语句使 VPN AB 路由器 CE2 能够与直接连接到路由器 PE1 的 VPN A 路由器 CE1 和 VPN B 路由器 CE3 通信。源自远程 PE 路由器(此例中为 PE2 路由器)的 VPN 路由被放置在全局第 3 层 VPN 路由表 (bgp.l3vpn.inet.0) 中,具有相应路由目标的路由将按照 VRF 导入策略配置的指示导入到路由表中。目标是能够从本地填充的单个 VPN 路由表中选择路由。
路由器 PE1 是进行所有过滤和配置修改的地方。因此,仅显示 PE1 的 VPN 配置。CE 路由器没有关于 VPN 的任何信息,因此您可以正常配置它们。
示例
以下部分介绍了配置重叠 VPN 的几种方法。
以下章节说明了配置重叠 VPN 的不同方案,具体取决于 PE 和 CE 路由器之间使用的路由协议。对于所有这些示例,都需要配置路由表组。
- 配置路由表组
- 配置 PE 和 CE 路由器之间的静态路由
- 在 PE 和 CE 路由器之间配置 BGP
- 在 PE 和 CE 路由器之间配置 OSPF
- 在 PE 和 CE 路由器之间配置静态、BGP 和 OSPF 路由
配置路由表组
在此示例中,路由表组在四种配置方案中很常见。路由表组用于将路由(包括接口路由、静态路由、OSPF 路由和 BGP 路由)安装到默认实例和其他实例的多个路由表中。在路由表组定义中,第一个路由表称为主路由表。(通常,如果未配置路由表组,则主路由表是要安装路由的表。其他路由表称为辅助路由表。
此配置中的路由表组按如下所示安装路由:
-
vpna-vpnab将路由安装到路由表 VPN-A.inet.0 和 VPN-AB.inet.0 中。 -
vpnb-vpnab将路由安装到路由表 VPN-B.inet.0 和 VPN-AB.inet.0 中。 -
vpnab-vpna_and_vpnb将路由安装到路由表 VPN-AB.inet.0、VPN-A.inet.0 和 VPN-B.inet.0 中。
配置路由表组:
[edit]
routing-options {
rib-groups {
vpna-vpnab {
import-rib [ VPN-A.inet.0 VPN-AB.inet.0 ];
}
vpnb-vpnab {
import-rib [ VPN-B.inet.0 VPN-AB.inet.0 ];
}
vpnab-vpna_and_vpnb {
import-rib [ VPN-AB.inet.0 VPN-A.inet.0 VPN-B.inet.0 ];
}
}
}
配置 PE 和 CE 路由器之间的静态路由
要在 PE1 路由器与 CE1、CE2 和 CE3 路由器之间配置静态路由,必须为 VPN A、VPN B 和 VPN AB 配置路由实例(在每个实例下配置静态路由):
为 VPN A 配置路由实例
在路由器 PE1 上,配置 VPN A:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
routing-options {
interface-routes {
rib-group inet vpna-vpnab;
}
static {
route 10.255.14.155/32 next-hop 192.168.197.141;
route 10.255.14.185/32 next-hop 192.168.197.178;
}
}
}
}
该 interface-routes 语句将 VPN A 的接口路由安装到路由表组 vpna-vpnab中定义的路由表中。
该 static 语句配置安装在 VPN-A.inet.0 路由表中的静态路由。第一个静态路由用于路由器 CE1 (VPN A),第二个用于路由器 CE2(在 VPN AB 中)。
下一跃点 192.168.197.178 不在 VPN A 中。除非路由实例 VPN AB 的接口路由安装在此路由表中,否则路由 10.255.14.185/32 无法安装在 VPN-A.inet.0 中。在 VPN AB 配置中包括语 interface-routes 句将提供此下一跃点。同样,在 VPN AB 配置中包含 interface-routes 语句会 192.168.197.141 安装到 VPN-AB.inet.0 中。
配置 VPN AB 的路由实例
在路由器 PE1 上,配置 VPN AB:
[edit]
routing instances {
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
routing-options {
interface-routes {
rib-group vpnab-vpna_and_vpnb;
}
static {
route 10.255.14.185/32 next-hop 192.168.197.178;
route 10.255.14.155/32 next-hop 192.168.197.141;
route 10.255.14.186/32 next-hop 192.168.197.242;
}
}
}
}
在此配置中,以下静态路由安装在 VPN-AB.inet.0 路由表中:
-
10.255.14.185/32适用于路由器 CE2(在 VPN AB 中) -
10.255.14.155/32适用于路由器 CE1(在 VPN A 中) -
10.255.14.186/32适用于路由器 CE3(在 VPN B 中)
下一跃点 192.168.197.141 , 192.168.197.242 不属于 VPN AB。路由 10.255.14.155/32 , 10.255.14.186/32 不能安装在 VPN-AB.inet.0 中,除非来自 VPN A 和 VPN B 的接口路由安装在此路由表中。VPN A 和 VPN B 路由实例中的接口路由配置提供这些下一跃点。
为 VPN B 配置路由实例
在路由器 PE1 上,配置 VPN B:
[edit]
routing instances {
VPN-B {
instance-type vrf;
interface fe-1/0/2.0;
route-distinguisher 10.255.14.175:10;
vrf-import vpnb-import;
vrf-export vpnb-export;
routing-options {
interface-routes {
rib-group inet vpnb-vpnab;
}
static {
route 10.255.14.186/32 next-hop 192.168.197.242;
route 10.255.14.185/32 next-hop 192.168.197.178;
}
}
}
}
为 VPN B 配置路由实例时,以下静态路由将放置在 VPNB.inet.0 中:
-
10.255.14.186/32适用于路由器 CE3(在 VPN B 中) -
10.255.14.185/32适用于路由器 CE2(在 VPN AB 中)
下一跃点 192.168.197.178 不属于 VPN B。除非此路路由表中安装了来自 VPN AB 的接口路由,否则无法将路由 10.255.14.185/32 安装在 VPN-B.inet.0 中。VPN AB 中的接口路由配置提供此下一跃点。
配置 VPN 策略
vrf-import为重叠 VPN 配置的和 vrf-export 策略语句与常规 VPN 的策略语句相同,只是您在每个 VRF 导出策略中都包含该from interface语句。此语句强制每个 VPN 仅通告源自该 VPN 的路由。例如,VPN A 的路由源自 VPN A 和 VPN AB。如果未包含该from interface语句,VPN A 将通告自己的路由以及 VPN AB 的路由,因此远程 PE 路由器会接收相同路由的多个通告。包括该from interface语句将限制每个 VPN 仅通告其发起的路由,并允许您过滤掉从其他路由表导入的路由,以便进行本地连接。
在此配置示例中,该 vpnab-import 策略接受来自 VPN A、VPN B 和 VPN AB 的路由。该 vpna-export 策略仅导出源自 VPN A 的路由。同样, vpnb-export 和 vpnab-export 策略仅导出源自相应 VPN 的路由。
在路由器 PE1 上,配置以下 VPN 导入和导出策略:
[edit]
policy-options {
policy-statement vpna-import {
term a {
from {
protocol bgp;
community VPNA-comm;
}
then accept;
}
term b {
then reject;
}
}
policy-statement vpnb-import {
term a {
from {
protocol bgp;
community VPNB-comm;
}
then accept;
}
term b {
then reject;
}
}
policy-statement vpnab-import {
term a {
from {
protocol bgp;
community [ VPNA-comm VPNB-comm ];
}
then accept;
}
term b {
then reject;
}
}
policy-statement vpna-export {
term a {
from {
protocol static;
interface fe-1/0/0.0;
}
then {
community add VPNA-comm;
accept;
}
}
term b {
then reject;
}
}
policy-statement vpnb-export {
term a {
from {
protocol static;
interface fe-1/0/2.0;
}
then {
community add VPNB-comm;
accept;
}
}
term b {
then reject;
}
}
policy-statement vpnab-export {
term a {
from {
protocol static;
interface fe-1/1/0.0;
}
then {
community add VPNB-comm;
community add VPNA-comm;
accept;
}
}
term b {
then reject;
}
}
community VPNA-comm members target:69:1;
community VPNB-comm members target:69:2;
}
在路由器 PE1 上,应用 VPN 导入和导出策略:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
routing-options {
static {
rib-group vpna-vpnab;
route 10.255.14.155/32 next-hop 192.168.197.141;
route 10.255.14.185/32 next-hop 192.168.197.178;
}
}
}
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
routing-options {
static {
rib-group vpnab-vpna_and_vpnb;
route 10.255.14.185/32 next-hop 192.168.197.178;
}
}
}
VPN-B {
instance-type vrf;
interface fe-1/0/2.0;
route-distinguisher 10.255.14.175:10;
vrf-import vpnb-import;
vrf-export vpnb-export;
routing-options {
static {
rib-group vpnb-vpnab;
route 10.255.14.186/32 next-hop 192.168.197.242;
}
}
}
}
对于 VPN A,在[edit routing-instances routing-instance-name]层次结构级别包含routing-options语句,以便将静态路由直接安装到路由表组vpna-vpnab中定义的路由表中。对于 VPN AB,配置会将静态路由直接安装到路由表组vpnab-vpna和 vpnab-vpnb中定义的路由表中。对于 VPN B,配置会将静态路由直接安装到路由表组vpnb-vpnab中定义的路由表中。
在 PE 和 CE 路由器之间配置 BGP
在此配置示例中,VPN A 的 vpna-site1 BGP 组会将从 BGP 会话获知的路由安装到路由路由表组中 vpna-vpnab 定义的路由表中。对于 VPN AB, vpnab-site1 组将从 BGP 会话获知的路由安装到路由表组中 vpnab-vpna_and_vpnb 定义的路由表中。对于 VPN B, vpnb-site1 组会将从 BGP 会话获知的路由安装到路由表组中定义的 vpnb-vpnab 路由表中。此配置不需要接口路由。
VRF 导入和导出策略与 配置 PE 和 CE 路由器之间的静态路由中定义的策略类似,不同之处在于导出协议是 BGP 而不是静态路由。在所有 vrf-export 策略上,都使用语 from protocol bgp 句。
在路由器 PE1 上,配置 PE 和 CE 路由器之间的 BGP:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
protocols {
bgp {
group vpna-site1 {
family inet {
unicast {
rib-group vpna-vpnab;
}
}
peer-as 1;
neighbor 192.168.197.141;
}
}
}
}
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
protocols {
bgp {
group vpnab-site1 {
family inet {
unicast {
rib-group vpnab-vpna_and_vpnb;
}
}
peer-as 9;
neighbor 192.168.197.178;
}
}
}
}
VPN-B {
instance-type vrf;
interface fe-1/0/2.0;
route-distinguisher 10.255.14.175:10;
vrf-import vpnb-import;
vrf-export vpnb-export;
protocols {
bgp {
group vpnb-site1 {
family inet {
unicast {
rib-group vpnb-vpnab;
}
}
neighbor 192.168.197.242 {
peer-as 10;
}
}
}
}
}
}
在 PE 和 CE 路由器之间配置 OSPF
在此配置示例中,从 VPN A 的 OSPF 会话中获知的路由将安装到路由表组中 vpna-vpnab 定义的路由表中。对于 VPN AB,从 OSPF 会话获知的路由将安装到路由表组中 vpnab-vpna_and_vpnb 定义的路由表中。对于 VPN B,从 OSPF 会话获知的路由将安装到路由表组中 vpnb-vpnab 定义的路由表中。
VRF 导入和导出策略与配置 PE 和 CE 路由器之间的静态路由 和在 PE 和 CE 路由器之间配置 BGP 中定义的策略类似,不同之处在于导出协议是 OSPF 而不是 BGP 或静态路由。因此,在所有 vrf-export 策略上,您都使用语 from protocol ospf 句而不是 from protocol <static | bgp> 语句。
在路由器 PE1 上,配置 PE 和 CE 路由器之间的 OSPF:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
protocols {
ospf {
rib-group vpna-vpnab;
export vpna-import;
area 0.0.0.0 {
interface fe-1/0/0.0;
}
}
}
}
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
protocols {
ospf {
rib-group vpnab-vpna_and_vpnb;
export vpnab-import;
area 0.0.0.0 {
interface fe-1/1/0.0;
}
}
}
}
VPN-B {
instance-type vrf;
interface fe-1/0/2.0;
route-distinguisher 10.255.14.175:10;
vrf-import vpnb-import;
vrf-export vpnb-export;
protocols {
ospf {
rib-group vpnb-vpnab;
export vpnb-import;
area 0.0.0.0 {
interface fe-1/0/2.0;
}
}
}
}
}
在 PE 和 CE 路由器之间配置静态、BGP 和 OSPF 路由
本节介绍如何结合使用静态路由、BGP 和 OSPF 配置 PE 和 CE 路由器之间的路由:
-
路由器 PE1 和路由器 CE1 之间的连接使用静态路由。
-
路由器 PE1 和路由器 CE2 之间的连接使用 BGP。
-
路由器 PE1 和路由器 CE3 之间的连接使用 OSPF。
此处,VPN AB 的配置还包括到 CE1 的静态路由。
在路由器 PE1 上,配置 PE 和 CE 路由器之间的静态路由、BGP 和 OSPF 组合:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
routing-options {
static {
rib-group vpna-vpnab;
route 10.255.14.155/32 next-hop 192.168.197.141;
}
}
}
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
protocols {
bgp {
group vpnab-site1 {
family inet {
unicast {
rib-group vpnab-vpna_and_vpnb;
}
}
export to-vpnab-site1;
peer-as 9;
neighbor 192.168.197.178;
}
}
}
}
VPN-B {
instance-type vrf;
interface fe-1/0/2.0;
route-distinguisher 10.255.14.175:10;
vrf-import vpnb-import;
vrf-export vpnb-export;
protocols {
ospf {
rib-group vpnb-vpnab;
export vpnb-import;
area 0.0.0.1 {
interface t3-0/3/3.0;
}
}
}
}
}
policy-options {
policy-statement to-vpnab-site1 {
term a {
from protocol static;
then accept;
}
term b {
from protocol bgp;
then accept;
}
term c {
then reject;
}
}
}
使用自动路由导出配置重叠 VPN
多个路由实例的一个问题是如何在路由实例之间导出路由。在 Junos OS 中,可以为每个需要将路由导出到其他路由表的路由实例配置路由表组,从而实现此目的。有关如何使用路由表组配置重叠 VPN 的信息,请参阅 使用路由表组配置重叠 VPN。
但是,使用路由表组有一些局限性:
路由表组配置很复杂。您必须为将导出路由的每个路由实例定义唯一的路由表组。
您还必须为将导出路由的每个协议配置唯一的路由表组。
为了限制(有时甚至不需要)在多个路由实例拓扑中配置路由表组,可以使用语句提供 auto-export 的功能。
该 auto-export 语句对于配置重叠 VPN 特别有用 — 多个 VRF 路由实例在其 vrf-import 策略中列出同一社区路由目标的 VPN 配置。语 auto-export 句通过检查现有策略配置,确定要从哪些路由中导出路由并将路由导入到哪些路由表。
该 auto-export 语句在引用给定路由目标社区的路由实例之间自动导出路由。 auto-export 配置语句时,将基于系统上配置的 vrf-import 和 vrf-export 策略构建 VRF 目标树。如果路由实例在其 vrf-import 策略中引用了路由目标,则路由目标将添加到该目标的导入列表中。如果在其策略中 vrf-export 引用了特定路由目标,则路由目标将添加到该目标的导出列表中。忽略存在与单个导出器匹配或没有导入器或导出器的单个导入器的路由目标。
将跟踪对导出路由目标的路由表的更改。发生路由更改时,路由实例 vpn-export 的策略将应用于路由。如果允许,则将路由导入到导出策略设置的路由目标的所有导入表(受 vrf-import 策略的约束)。
以下部分将介绍如何通过 auto-export 使用语句进行实例间导出以及路由表组来配置重叠的 VPN:
使用 BGP 和自动路由导出配置重叠的 VPN
以下示例提供了在 PE 和 CE 路由器之间使用 BGP 的重叠 VPN 的配置。
配置路由实例 VPN-A:
[edit]
routing-instances {
VPN-A {
instance-type vrf;
interface fe-1/0/0.0;
route-distinguisher 10.255.14.175:3;
vrf-import vpna-import;
vrf-export vpna-export;
routing-options {
auto-export;
}
protocols {
bgp {
group vpna-site1 {
peer-as 1;
neighbor 192.168.197.141;
}
}
}
}
}
配置路由实例 VPN-AB:
[edit]
routing-instances {
VPN-AB {
instance-type vrf;
interface fe-1/1/0.0;
route-distinguisher 10.255.14.175:9;
vrf-import vpnab-import;
vrf-export vpnab-export;
routing-options {
auto-export;
}
protocols {
bgp {
group vpnab-site1 {
peer-as 9;
neighbor 192.168.197.178;
}
}
}
}
}
对于此配置,语 auto-export 句将替换由路由表组配置提供的功能。但是,有时需要额外的配置。
vrf-import由于策略以及vrf-export语auto-export句从中推断导入和导出矩阵的策略是按实例配置的,因此在配置组播网络层可达性信息 (NLRI) 的情况下,您必须能够为单播和组播启用或禁用它们。
配置重叠的 VPN 和其他表
您可能需要在重叠的 VPN 之间使用语 auto-export 句,但要求将从 VRF 表获知的路由子集安装到 inet.0 表或 routing-instance.inet.2 中。
要支持这种场景,其中和 策略中并未显示vrf-importvrf-export所需的所有信息,您可以使用附加的路由表组配置一个附加的路由表列表。
要在所述示例中添加从 VPN-A 和 VPN-AB 到 inet.0 的路由,您需要包含以下附加配置语句:
配置路由选项:
[edit]
routing-options {
rib-groups {
inet-access {
import-rib inet.0;
}
}
}
配置路由实例 VPN-A:
[edit]
routing-instances {
VPN-A {
routing-options {
auto-export {
family inet {
unicast {
rib-group inet-access;
}
}
}
}
}
}
配置路由实例 VPN-AB:
[edit]
routing-instances {
VPN-AB {
routing-options {
auto-export {
family inet {
unicast {
rib-group inet-access;
}
}
}
}
}
}
此配置中使用路由表组的方式与它们在 Junos OS 中的常规用法不同。 路由表组通常要求将导出的路由表引用为路由表组中的主导入路由表。对于此配置,该限制不适用。路由表组用作要将路由导出到的表的附加列表。
为所有 VRF 实例配置自动路由导出
以下配置允许您为配置组中的所有路由实例配置 auto-export 语句:
[edit]
groups {
vrf-export-on {
routing-instances {
<*> {
routing-options {
auto-export;
}
}
}
}
}
apply-groups vrf-export-on;