静态路由首选项和合格下一跃点
了解静态路由首选项和合格下一跃点
静态路由目标地址可以有多个与之关联的下一跃点。在这种情况下,将多个路由插入到路由表中,必须进行路由选择。由于路由选择的主要标准是 路由优先级,因此可以通过设置与特定下一跃点关联的路由优先级来控制用作特定目标主路由的路由。路由优先级较低的路由始终用于路由流量。未设置首选路由时,Junos OS 会随机选择安装在转发表中的下一跃点地址。
通常,分配给静态路由的默认属性适用于为静态路由配置的所有下一跃点地址。但是,如果您希望为特定路由配置两个可能的下一跃点地址,并将它们区别对待,则可以将一个地址定义为有条件的下一跃点。
符合条件的下一跃点允许您将一个或多个属性与特定的下一跃点地址相关联。您可以为特定的静态路由设置总体优先级,然后为合格的下一跃点指定不同的优先级。例如,假设两个下一跃点地址 (10.10.10.10 和 10.10.10.7) 与静态路由 192.168.47.5/32 相关联。将常规优先级分配给整个静态路由,然后仅将另一个优先级分配给有条件的下一跃点地址 10.10.10.7。例如:
route 192.168.47.5/32 { next-hop 10.10.10.10; qualified-next-hop 10.10.10.7 { preference 6; } preference 5; }
在此示例中,为有条件的下一跃点 10.10.10.7 分配了优先级 6,并将下一跃点 10.10.10 分配为优先级 5。
preference
] 层次结构中的[edit route route qualified-next-hop
和metric
选项仅适用于符合条件的下一跃点。有条件的下一跃点优先级和指标仅覆盖该特定合格下一跃点的路由优先级和指标,类似于路由首选项覆盖默认首选项和指标(针对该特定路由)。
从 Junos OS 15.1R4 版开始,路由器不再支持将静态路由指向绑定到订阅者的下一跃点的配置。通常,当 RADIUS 使用帧的 IP 地址属性分配下一跃点时,可能会发生这种情况。这种配置错误的另一种选择是让 RADIUS 服务器提供与静态路由匹配的帧路由属性。
示例:配置静态路由首选项和合格下一跃点以控制静态路由选择
此示例说明如何控制静态路由选择。
要求
在此示例中,除了设备初始化之外,不需要任何特殊配置。
概述
在此示例中,静态路由 192.168.47.0/24 可能有两个可能的下一跃点。由于一条链路的带宽更高,因此此链路是首选路径。为了实施此优先级,将 qualified-next-hop
语句包含在两设备的配置中。请参阅 图 1。
拓扑
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层级的 [edit]
CLI 中。
提供商网络中的设备 B
set interfaces ge-1/2/0 unit 0 description B->D set interfaces ge-1/2/0 unit 0 family inet address 172.16.1.1/24 set interfaces fe-1/2/1 unit 2 description secondary-B->D set interfaces fe-1/2/1 unit 2 family inet address 192.168.2.1/24 set interfaces lo0 unit 57 family inet address 10.0.0.1/32 set interfaces lo0 unit 57 family inet address 10.0.0.2/32 set routing-options static route 192.168.47.0/24 next-hop 172.16.1.2 set routing-options static route 192.168.47.0/24 qualified-next-hop 192.168.2.2 preference 25
客户网络中的设备 D
set interfaces ge-1/2/0 unit 1 description D->B set interfaces ge-1/2/0 unit 1 family inet address 172.16.1.2/24 set interfaces fe-1/2/1 unit 3 description secondary-D->B set interfaces fe-1/2/1 unit 3 family inet address 192.168.2.2/24 set interfaces lo0 unit 2 family inet address 192.168.47.5/32 set interfaces lo0 unit 2 family inet address 192.168.47.6/32 set routing-options static route 0.0.0.0/0 next-hop 172.16.1.1 set routing-options static route 0.0.0.0/0 qualified-next-hop 192.168.2.1 preference 25
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 Junos OS CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要控制静态路由选择:
在设备 B 上,配置接口。
[edit interfaces] user@B# set ge-1/2/0 unit 0 description B->D user@B# set ge-1/2/0 unit 0 family inet address 172.16.1.1/24 user@B# set fe-1/2/1 unit 2 description secondary-B->D user@B# set fe-1/2/1 unit 2 family inet address 192.168.2.1/24 user@B# set lo0 unit 57 family inet address 10.0.0.1/32 user@B# set lo0 unit 57 family inet address 10.0.0.2/32
在设备 B 上,配置到客户网络的静态路由。
[edit routing-options static route 192.168.47.0/24] user@B# set next-hop 172.16.1.2
在设备 B 上,配置到客户网络的备份路由。
[edit routing options static route 192.168.47.0/24] user@B# set qualified-next-hop 192.168.2.2 preference 25
在设备 D 上,配置接口。
[edit interfaces] user@D# set ge-1/2/0 unit 1 description D->B user@D# set ge-1/2/0 unit 1 family inet address 172.16.1.2/24 user@D# set fe-1/2/1 unit 3 description secondary-D->B user@D# set fe-1/2/1 unit 3 family inet address 192.168.2.2/24 user@D# set lo0 unit 2 family inet address 192.168.47.5/32 user@D# set lo0 unit 2 family inet address 192.168.47.6/32
在设备 D 上,配置到外部网络的静态默认路由。
[edit routing options static route 0.0.0.0/0] user@D# set next-hop 172.16.1.1
在设备 D 上,配置到外部网络的备份静态默认路由。
[edit routing options static route 0.0.0.0/0] user@D# set qualified-next-hop 192.168.2.1 preference 25
结果
通过发出 show interfaces
和 show routing-options
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
user@B# show interfaces ge-1/2/0 { unit 0 { description B->D; family inet { address 172.16.1.1/24; } } } fe-1/2/1 { unit 2 { description secondary-B->D; family inet { address 192.168.2.1/24; } } } lo0 { unit 57 { family inet { address 10.0.0.1/32; address 10.0.0.2/32; } } }
user@B# show routing-options static { route 192.168.47.0/24 { next-hop 172.16.1.2; qualified-next-hop 192.168.2.2 { preference 25; } } }
user@D# show interfaces ge-1/2/0 { unit 1 { description D->B; family inet { address 172.16.1.2/24; } } } fe-1/2/1 { unit 3 { description secondary-D->B; family inet { address 192.168.2.2/24; } } } lo0 { unit 2 { family inet { address 192.168.47.5/32; address 192.168.47.6/32; } } }
user@D# show routing-options static { route 0.0.0.0/0 { next-hop 172.16.1.1; qualified-next-hop 192.168.2.1 { preference 25; } } }
完成设备配置后,请在两台设备上从配置模式输入 提交 。
验证
确认配置工作正常。
检查路由表
目的
请确保静态路由显示在设备 B 和设备 D 的路由表中。
行动
user@B> show route protocol static inet.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 192.168.47.0/24 *[Static/5] 02:02:03 > to 172.16.1.2 via ge-1/2/0.0 [Static/25] 01:58:21 > to 192.168.2.2 via fe-1/2/1.2
user@D> show route protocol static inet.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 02:02:12 > to 172.16.1.1 via ge-1/2/0.1 [Static/25] 01:58:31 > to 192.168.2.1 via fe-1/2/1.3
意义
路由表中的星号 (*) 表示活动路由。接下来会列出备份路由。
对远程地址执行 Ping 操作
目的
验证静态路由是否工作。
从设备 B 中,ping 设备 D 上的一个环路接口地址。
从设备 D 中,ping 设备 B 上的一个环路接口地址。
行动
user@B> ping 192.168.47.5 PING 192.168.47.5 (192.168.47.5): 56 data bytes 64 bytes from 192.168.47.5: icmp_seq=0 ttl=64 time=156.126 ms 64 bytes from 192.168.47.5: icmp_seq=1 ttl=64 time=120.393 ms 64 bytes from 192.168.47.5: icmp_seq=2 ttl=64 time=175.361 ms
user@D> ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1): 56 data bytes 64 bytes from 10.0.0.1: icmp_seq=0 ttl=64 time=1.315 ms 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=31.819 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.268 ms
确保备份路由成为活动路由
目的
如果主路由不可用,请确保备份辅助路由处于活动状态。
行动
通过停用设备 B 上的 ge-1/2/0.0 接口来禁用活动路由。
user@B# deactivate interfaces ge-1/2/0 unit 0 family inet address 172.16.1.1/24 user@B# commit
检查设备 B 的路由表。
user@B> show route protocol static inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 192.168.47.0/24 *[Static/25] 02:06:24 > to 192.168.2.2 via fe-1/2/1.2
意义
备份路由已成为活动路由。
使用静态路由保留 IP 地址
托管提供商为多个客户托管多个服务器,并希望节省其 IP 地址空间的使用。传统上,当托管提供商客户端添加新服务器时,会为服务器分配一小块 IP 地址,例如 /29 块,并且客户端的服务器都位于该 IP 地址块中。
问题(图示)
例如,客户 A 可能需要三个服务器,并将块分配为 10.3.3.0/29(10.3.3.0 到 10.3.3.7)。在这种情况下,会使用多个 IP 地址。这些地址包括网络和广播 IP 地址(10.3.3.0 和 10.3.3.7)、服务器连接的路由器网关地址以及各个服务器的地址。要分配三个服务器,必须分配八个 IP 地址。将单个 /24 网络分解为 32 /29 网络将导致在 256 个 IP 地址中,有 96 个 IP 地址,其中 /24 被网络、广播和网关地址占用。当这种影响在成千上万的托管提供商中成倍增加时,IP 地址空间远没有得到有效利用。 图 2 展示了这个问题。
在此配置中,为每个客户分配一个 /29 块地址空间。对于每个块,网络、广播和网关地址无法用于服务器 IP 寻址,导致三个 IP 地址使用效率低下。此外,这些块会占用未使用的 IP 地址,以用于未来扩展。
解决 方案
要解决此问题,可以为路由器上的接口配置共享地址空间 (RFC 6598) 保留的 IPv4 前缀中的地址,并使用接口指向的静态路由。IANA 记录了 IPv4/10 的分配,用作共享地址空间。共享地址空间地址范围为 100.64.0.0/10。
路由器中的接口将从 RFC 6598 空间中分配一个 IP 地址,因此不会占用公开路由地址空间,并且使用接口上的静态路由处理连接。服务器中的接口配置了公开可路由地址,但路由器接口则不是。网络和广播地址从 RFC 6598 空间消耗,而不是公开路由地址空间。
从 Junos OS 17.1R1 开始的 QFX10000 交换机支持此功能。
图 3 显示了 IP 地址空间的有效利用情况。
在此配置中,每个客户都会为每个服务器分配单独的 IP 地址。有一个静态路由可配置为主机路由。路由器中的接口将从 RFC 6598 空间中分配一个 IP 地址,因此不会占用公开路由地址空间,并且使用静态路由传出接口来处理连接。
配置
网关路由器上的客户 A 的配置类似于:
interfaces { ge-1/0/1 { unit 0 { family inet { address 100.64.0.1/30; } } } }
routing-options { static { route 203.0.113.10/32 { qualified-next-hop ge-1/0/1.0; } route 203.0.113.11 { qualified-next-hop ge-1/0/1.0; } } }
借助此配置,不会浪费可公开路由的 IP 地址。值得注意的是,当此配置中的数据包从路由器转发到客户 A 服务器 203.0.113.10 的服务器时,路由将被转发至 IP 地址为的 100.64.0.1
接口 ge-1/0/1.0。
客户 A 的服务器配置如下:
ifconfig eth0 203.0.113.10 netmask 255.255.255.255
route add -host 100.64.0.1/32 dev eth0 route add default gw 100.64.0.1
ifconfig eth0 203.0.113.11 netmask 255.255.255.255
route add -host 100.64.0.1/32 dev eth0 route add default gw 100.64.0.1
此示例显示每个服务器一个主机路由,即 1:1 映射。如果得到维护,这可能等同于大量静态主机路由。出于扩展目的,我们需要在此环境中支持非主机路由。例如,如果此配置中有八个服务器的客户 C,那么在指出八个服务器连接的接口的路由器上分配 /29 路由要高效得多。如果向客户 C 分配的服务器 IP 从 203.0.114.8 到 203.0.114.15,并且这些 IP 通过接口 ge-1/0/2.0 进行连接,则其看起来是:
user@host# set routing-options static route 203.0.114.8/29 qualified-next-hop ge-1/0/2.0
了解路由和转发表中的静态路由控制
您可以通过多种方式控制将静态路由导入路由和转发表中。主要方式包括为路由分配一个或多个以下属性:
retain — 在路由进程关闭或设备重新启动后,将路由保留在转发表中。
无转发 — 防止路由被重新转为其他路由协议。
被动 — 拒绝以路由为目的地的流量。
本主题包含以下部分:
路由保留
默认情况下,当路由进程关闭时,静态路由不会保留在转发表中。再次启动路由进程时,必须再次将配置为静态路由的任何路由添加到转发表。为避免这种延迟,可以将路由标记为 retain,以便在路由进程关闭后仍保留在转发表中。保留可确保路由始终在转发表,即使在系统重新启动后也是如此。
再转换防御
默认情况下,静态路由有资格由其他路由协议进行转发。在可能不希望在任何情况下重新转换这些静态路由的剩余区域,您可以将静态路由标记为 无重新转换。
强制拒绝被动路由流量
通常,路由和转发表中仅包含活动路由。如果静态路由的下一跃点地址无法访问,则路由将标记为 被动,并且不会包括在路由或转发表中。要强制将路由包含在路由表中,而不考虑下一跃点可访问性,可以将路由标记为 被动路由。如果路由被标记为 被动 ,并且无法访问其下一跃点地址,则路由将包含在路由表中,并且将拒绝发往该路由的所有流量。
示例:防止静态路由被翻转
此示例说明如何防止将静态路由转发到 OSPF 中,从而防止路由出现在路由和转发表表中。
要求
在此示例中,除了设备初始化之外,不需要任何特殊配置。
概述
此示例说明如何配置路由策略,用于将静态路由再转换为 OSPF,但未读的静态路由除外,因为该路由已用 no-readvertise
语句标记。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层级的 [edit]
CLI 中。
设备 A
set interfaces fe-1/2/0 unit 4 description A->B set interfaces fe-1/2/0 unit 4 family inet address 10.0.2.2/30 set protocols ospf area 0.0.0.0 interface fe-1/2/0.4
设备 B
set interfaces fe-1/2/0 unit 3 description B->A set interfaces fe-1/2/0 unit 3 family inet address 10.0.2.1/30 set interfaces fe-1/2/1 unit 6 description B->C set interfaces fe-1/2/1 unit 6 family inet address 10.0.3.1/30 set protocols bgp group ext type external set protocols bgp group ext peer-as 23 set protocols bgp group ext neighbor 10.0.3.2 set protocols ospf export send-static set protocols ospf area 0.0.0.0 interface fe-1/2/0.3 set policy-options policy-statement send-static from protocol static set policy-options policy-statement send-static then accept set routing-options static route 0.0.0.0/0 next-hop 10.0.3.2 set routing-options static route 192.168.0.0/24 next-hop 10.0.3.2 set routing-options static route 192.168.0.0/24 no-readvertise set routing-options autonomous-system 17
设备 C
set interfaces fe-1/2/0 unit 7 description B->C set interfaces fe-1/2/0 unit 7 family inet address 10.0.3.2/30 set interfaces lo0 unit 5 family inet address 192.168.0.1/32 set protocols bgp group ext type external set protocols bgp group ext peer-as 17 set protocols bgp group ext neighbor 10.0.3.1 set routing-options autonomous-system 23
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 Junos OS CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置设备 A:
将接口配置为设备 B。
[edit interfaces fe-1/2/0 unit 4] user@A# set description A->B user@A# set family inet address 10.0.2.2/30
配置 OSPF 以与设备 B 形成 OSPF 对等关系。
[edit protocols ospf area 0.0.0.0] user@A# set interface fe-1/2/0.4
逐步过程
要配置设备 B:
将接口配置为设备 A 和设备 C。
[edit interfaces] user@B# set fe-1/2/0 unit 3 description B->A user@B# set fe-1/2/0 unit 3 family inet address 10.0.2.1/30 user@B# set fe-1/2/1 unit 6 description B->C user@B# set fe-1/2/1 unit 6 family inet address 10.0.3.1/30
配置一个或多个静态路由和自治系统 (AS) 编号。
[edit routing-options] user@B# set static route 0.0.0.0/0 next-hop 10.0.3.2 user@B# set static route 192.168.0.0/24 next-hop 10.0.3.2 user@B# set autonomous-system 17
配置路由策略。
此策略会将静态路由从路由表导出到 OSPF。
[edit policy-options policy-statement send-static] user@B# set from protocol static user@B# set then accept
包括该
no-readvertise
语句,以防止将 192.168.0.0/24 路由导出到 OSPF。[edit routing-options] user@B# set static route 192.168.0.0/24 no-readvertise
配置路由协议。
BGP 配置与设备 C 形成外部 BGP (EBGP) 对等关系。
OSPF 配置与设备 A 形成 OSPF 对等关系,并应用 发送静态 路由策略。
[edit protocols] user@B# set bgp group ext type external user@B# set bgp group ext peer-as 23 user@B# set bgp group ext neighbor 10.0.3.2 user@B# set ospf export send-static user@B# set ospf area 0.0.0.0 interface fe-1/2/0.3
逐步过程
要配置设备 C:
创建设备 B 的接口,然后配置环路接口。
[edit interfaces ] user@C# set fe-1/2/0 unit 7 description B->C user@C# set fe-1/2/0 unit 7 family inet address 10.0.3.2/30 user@C# set lo0 unit 5 family inet address 192.168.0.1/32
配置与设备 B 的 EBGP 对等会话。
[edit protocols bgp group ext] user@C# set type external user@C# set peer-as 17 user@C# set neighbor 10.0.3.1
配置 AS 编号。
[edit routing-options] user@C# set autonomous-system 23
结果
通过发出 show interfaces
、 show policy-options
、 show protocols
和 show routing-options
命令来确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
设备 A
user@A# show interfaces fe-1/2/0 { unit 4 { description A->B; family inet { address 10.0.2.2/30; } } }
user@A# show protocols ospf { area 0.0.0.0 { interface fe-1/2/0.4; } }
设备 B
user@B# show interfaces interfaces { fe-1/2/0 { unit 3 { description B->A; family inet { address 10.0.2.1/30; } } } fe-1/2/1 { unit 6 { description B->C; family inet { address 10.0.3.1/30; } } } }
user@B# show policy-options policy-statement send-static { from protocol static; then accept; }
user@B# show protocols bgp { group ext { type external; peer-as 23; neighbor 10.0.3.2; } } ospf { export send-static; area 0.0.0.0 { interface fe-1/2/0.3; } }
user@B# show routing-options static { route 0.0.0.0/0 next-hop 10.0.3.2; route 192.168.0.0/24 { next-hop 10.0.3.2; no-readvertise; } } autonomous-system 17;
设备 C
user@C# show interfaces fe-1/2/0 { unit 7 { description B->C; family inet { address 10.0.3.2/30; } } } lo0 { unit 5 { family inet { address 192.168.0.1/32; } } }
user@C# show protocols bgp { group ext { type external; peer-as 17; neighbor 10.0.3.1; } }
user@C# show routing-options autonomous-system 23;
完成设备配置后,请从配置模式进入 提交 。
验证
确认配置工作正常。
检查路由表
目的
确保语句 no-readvertise
工作。
行动
在设备 A 上,运行
show route protocol ospf
命令,确保 192.168.0.0/24 路由不会出现在设备 A 的路由表中。user@A> show route protocols ospf inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[OSPF/150] 00:03:15, metric 0, tag 0 > to 10.0.2.1 via fe-1/2/0.4 224.0.0.5/32 *[OSPF/10] 00:04:07, metric 1 MultiRecv
在设备 B 上,停用语句
no-readvertise
。user@B# deactivate routing-options static route 192.168.0.0/24 no-readvertise
在设备 A 上,重新运行
show route protocol ospf
命令,以确保 192.168.0.0/24 路由显示在设备 A 的路由表中。user@A> show route protocols ospf inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[OSPF/150] 00:04:24, metric 0, tag 0 > to 10.0.2.1 via fe-1/2/0.4 192.168.0.0/24 *[OSPF/150] 00:00:15, metric 0, tag 0 > to 10.0.2.1 via fe-1/2/0.4 224.0.0.5/32 *[OSPF/10] 00:05:16, metric 1 MultiRecv
意义
语句 no-readvertise
正在按预期工作。
验证静态路由配置
目的
验证静态路由是否在路由表中,以及这些路由是否处于活动状态。
行动
从 CLI 中输入 show route terse
命令。
示例输出
命令名称
user@host> show route terse inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both A Destination P Prf Metric 1 Metric 2 Next hop AS path * 192.168.47.5/32 S 5 Reject * 172.16.0.0/12 S 5 >192.168.71.254 * 192.168.0.0/18 S 5 >192.168.71.254 * 192.168.40.0/22 S 5 >192.168.71.254 * 192.168.64.0/18 S 5 >192.168.71.254 * 192.168.64.0/21 D 0 >fxp0.0 * 192.168.71.246/32 L 0 Local * 192.168.220.4/30 D 0 >ge-0/0/1.0 * 192.168.220.5/32 L 0 Local * 192.168.220.8/30 D 0 >ge-0/0/2.0 * 192.168.220.9/32 L 0 Local * 192.168.220.12/30 D 0 >ge-0/0/3.0 * 192.168.220.13/32 L 0 Local * 192.168.220.17/32 L 0 Reject * 192.168.220.21/32 L 0 Reject * 192.168.220.24/30 D 0 >at-1/0/0.0 * 192.168.220.25/32 L 0 Local * 192.168.220.28/30 D 0 >at-1/0/1.0 * 192.168.220.29/32 L 0 Local * 224.0.0.9/32 R 100 1 MultiRecv
意义
输出显示当前 inet.0 路由表中的路由列表。验证以下信息:
每个配置的静态路由都存在。路由按 IP 地址的升序列出。静态路由在输出的协议 (P) 列中使用 S 标识。
每个静态路由都处于活动状态。处于活动状态的路由在“下一跃点”列中显示 下一跃点 IP 地址。如果路由的下一跃点地址无法访问,则下一跃点地址将标识为 “拒绝”。这些路由不是活动路由,但它们会出现在路由表中,因为设置了 被动 属性。
每个静态路由的优先级是正确的。特定路由的优先级列在输出的 Prf 列中。