防止其他路由器发布的OSPF路由进入路由表?

网络工程 思科 路由 路由器 ospf 路由过滤器
2022-02-09 04:03:51

我有一个相当复杂的场景,我设法用 GNS3 复制了它。请看附图。在这种情况下,我有四个“分支机构”,每个分支机构都有自己的路由器,它们之间通过 /30 网络相互连接。每个分支机构都有一个带有两台主机的简单第 2 层哑交换机。

NetworkA 和 NetworkB 位于 OSPF 区域 0。而 NetworkC 和 NetworkD 位于区域 1,而 NetworkD 连接两个区域。

OSPF 邻接在以下之间形成:

  • 网络 A 和网络 B
  • 网络 B 和网络 D
  • 网络D和网络C
  • NetworkA 和 NetworkC 之间不形成 OSPF 邻接关系。

为了这个问题,我们将假设不允许在 NetworkA 和 NetworkC 之间形成 OSPF 邻接关系。我们还将假装我们实际上不知道在 NetworkA 后面发现了哪些 IP;即使图片显示 192.168.1.16/29 子网在那里。出于这个原因,我们将 NetworkC 上的最后网关设置为指向 NetworkA。

所以现在,NetworkA 正在向 NetworkB 宣传它的网络,而后者又向 NetworkD 宣传它的网络,最后它们被宣传到 NetworkC。如果 NetworkC (PC-3) 上的主机尝试 ping NetworkA (PC-2) 上的主机,则数据包会一直到达 NetworkD,然后到达 NetworkB,最后通过 NetworkA。而不是直接在 NetworkC 和 NetworkA 之间走路径。这是因为 NetworkC 的路由表中有 OSPF 路由告诉它通过 NetworkD 转发它们。

我想找到一种方法,让从 NetworkC 到 NetworkA 的流量通过最后的网关。我相信我需要做的是为 NetworkC 设置一种方法来抑制它为 NetworkA 接收的任何 OSPF 路由,并完全依靠它的最后网关来访问 NetworkA 后面的任何内容。

我可以通过简单地在 NetworkA 和 NetworkC 上添加静态路由来完成这项工作,但是对于这个问题,我们假装我们不知道 NetworkA 后面的 IP(尽管它们显示在图中)。出于这个原因,我不能在 NetworkCRouter 上使用静态路由到 192.168.1.16/29 网络,反之亦然,在 NetworkARouter 到 192.168.1.24/29 网络。

我一直在研究 OSPF 入站过滤,方法是使用带有分发列表的路由映射来匹配特定路由并拒绝将它们添加到路由表中。但我无法弄清楚如何正确实施它。这是你会做的事情吗?或者我相信另一种方法是使用单独的 OSPF 进程 ID 将它们分开。但我也不确定如何让它发挥作用。

在此处输入图像描述

2个回答

您不能将默认路由 ( 0.0.0.0/0) 设为首选路由。路由表中匹配最长的路由始终是路由器将流量转发到的路由。任何掩码长度大于0匹配目的地的路由(默认路由以外的任何路由)都将在默认路由之前被选择。

可以使用 PBR(基于策略的路由)来构建将流量发送到路由器 A 的策略,但您需要再次了解路由器 A 后面的网络才能创建策略。

如果您阻止路由器 C 从路由器 D 学习路由,那么如果从路由器 C 到路由器 A 的链路发生故障,您将丢失到路由器 A 后面网络的任何路径(见下文*),但您需要知道要阻止哪些路由,或者您可以阻止将路由通告到路由器 D 上的路由器 C。


*另外,不要忘记 AD(行政距离)。对于 Cisco 设备,OSPF110的 AD 为 ,但静态定义路由的 AD 仅为1这意味着首选静态定义的路线(AD 就像高尔夫一样,得分越低越好)。

192.168.1.16/29只需在路由器 C 中为指向的网络放置一条静态路由,192.168.1.10就会导致路由器 C 将任何发往该网络的流量发送到路由器 A。如果通往路由器 A 的接口发生故障,该路由将被撤销,通过 OSPF 获知的路由将放在路由表中。


编辑:

这是您可以使用区域过滤器执行此操作的一种方式(有多种方式):

路由器 D:

interface Loopback0
 ip address 192.168.1.253 255.255.255.255
!
interface GigabitEthernet0/0
 description Interface to Router C GigabitEthernet0/0
 ip address 192.168.1.5 255.255.255.252
!
interface GigabitEthernet0/1
 description Interface to Router B GigabitEthernet0/1
 ip address 192.168.1.13 255.255.255.252
!
interface GigabitEthernet0/2
 description Interface to Switch D Ethernet0
 ip address 192.168.1.41 255.255.255.248
!
router ospf 1
 network 192.168.1.4 0.0.0.3 area 1   ! Network to Router C
 network 192.168.1.12 0.0.0.3 area 0
 network 192.168.1.40 0.0.0.7 area 0
 network 192.168.1.253 0.0.0.0 area 0
 area 0 filter-list prefix NetworkA out
!
ip prefix-list NetworkA seq 10 deny 192.168.1.16/29
ip prefix-list NetworkA seq 10 permit 0.0.0.0/0 ge 0
!

路由器 C:

interface Loopback0
 ip address 192.168.1.251 255.255.255.255
!
interface GigabitEthernet0/0
 description Interface to Router D GigabitEthernet0/0
 ip address 192.168.1.6 255.255.255.252
!
interface GigabitEthernet0/1
 description Interface to Switch C Ethernet0/0
 ip address 192.168.1.24 255.255.255.252
!
interface GigbitEthernet0/3
 description Interface to Router A GigabitEthernet0/0
 ip address 192.168.1.9 255.255.255.248
!
router ospf 1
 passive interface GigabitEthernet0/3   ! No OSPF to Router A
 network 0.0.0.0 255.255.255.255 area 1 ! Include all networks in OSPF
!
ip route 0.0.0.0 0.0.0.0 192.168.1.10   ! Default route to Router A
!

使用区域过滤器,您可以允许或拒绝区域之间的任何网络。它有inandout关键字,您可以将过滤器放置在连接到 ABR 的任何区域上,例如out从区域 0 或in区域 1。请记住,ABR 必须连接到区域 0,因为所有区域间的流量都通过区域 0。


Cisco 有几篇关于 OSPF 过滤的文档,例如ABR Type 3 LSA 过滤,搜索一下即可。

由于我被告知我不能通过使用单独的 OSPF 进程 ID 过滤路由通告来做到这一点,我想提供有关如何确实做到这一点的详细信息:

该解决方案同时在 NetworkCRouter 和 NetworkDRouter 上实现。相关设置如下:

NetworkARouter <--我们为这个组织提供了我们的子网,以便他们可以向我们添加静态路由。他们没有向我们提供他们的子网让我们创建静态路由。

ip route 192.168.1.24 255.255.255.248 192.168.1.9

网络路由器:

interface Loopback0
 ip address 192.168.1.251 255.255.255.255
 ip ospf 1 area 1

router ospf 1
 network 192.168.1.4 0.0.0.3 area 1
 network 192.168.1.24 0.0.0.7 area 1

ip route 0.0.0.0 0.0.0.0 192.168.1.10

这个路由器的路由表最终看起来像这样减去本地和直接连接的路由:

Gateway of last resort is 192.168.1.10 to network 0.0.0.0

192.168.1.0/24 is variably subnetted, 10 subnets, 3 masks
O        192.168.1.40/29 [110/2] via 192.168.1.5, 00:29:35, GigabitEthernet0/0  

网络路由器:

interface Loopback0
 ip address 192.168.1.253 255.255.255.255
 ip ospf 1 area 0

interface Loopback1
 ip address 192.168.1.252 255.255.255.255
 ip ospf 1 area 1

router ospf 1
 redistribute ospf 4 subnets
 network 192.168.1.4 0.0.0.3 area 1
 network 192.168.1.40 0.0.0.7 area 1

router ospf 3
 redistribute ospf 1 subnets
 network 192.168.1.12 0.0.0.3 area 0

router ospf 4
 redistribute ospf 1 subnets

这个路由器的路由表最终看起来像这样减去本地和直接连接的路由:

192.168.1.0/24 is variably subnetted, 16 subnets, 3 masks
O        192.168.1.0/30 [110/2] via 192.168.1.14, 00:28:20, GigabitEthernet0/1
O        192.168.1.8/30 [110/3] via 192.168.1.14, 00:28:20, GigabitEthernet0/1
O        192.168.1.16/29
           [110/3] via 192.168.1.14, 00:28:20, GigabitEthernet0/1
O        192.168.1.24/29 [110/2] via 192.168.1.6, 00:27:20, GigabitEthernet0/0
O        192.168.1.32/29
           [110/2] via 192.168.1.14, 00:28:20, GigabitEthernet0/1

进入该路由器的任何数据包都将发送到除 192.168.1.40 网络之外的任何网络。我可以从 NetworkC 主机使用此解决方案 ping 任何网络上的任何主机。我愿意; 但是,在 ping NetworkB 上的主机时获得异步路由。例如,如果我从 PC3 ping 到 PC6,则数据包通过默认路由通过 NetworkCRouter 到 NetworkARouter,然后再到 NetworkB。来自 PC6 的 ping 响应通过 NetworkDRouter,然后到达 NetworkC。

同样,如果 NetworkCRouter 和 NetworkARouter 之间的连接断开,那么我们将失去与 NetworkA 和 NetworkB 的全部连接。