阻止向 SP 通告的路由

网络工程 路由 BGP 网络服务商
2022-02-11 09:27:33

我有一个类似的网络

CUSTOMER - BT - SPRINT
           BT - CISCO

customer loopback 192.168.10.1 customer loopback1 192.168.1.1

BT loopback 192.168.50.1

CISCO loopback 192.168.100.1

SPRINT loopback 192.168.150.1

客户已连接到 BT

BT 连接到 SPRINT 和 CISCO

我正在使用社区价值观,我想阻止192.168.1.1/24SPRINT 的广告,但允许它出现在 Cisco

这是我失败的尝试:

CUSTOMER:
ip prefix-list ROUTE 192.168.1.0/24
neighbor 2.2.2.2 (bt) route-map BLOCKSPRINT out
neighbor 2.2.2.2 send-community

route-map BLOCKSPRINT p 10
match ip add prefix-list ROUTE
set community 500:500
route-map BLOCKSPRINT p 20

BT
ip prefix-list CISCO 192.168.150.0/24
ip community-list 1 500:500 
neighbor 1.1.1.1 Peer-CUST in
neighbor 1.1.1.1 send-communities
neighbor 3.3.3.3 send-communities

route-map Peer-CUST p 10
match ip add prefix-list CISCO
match community 1
set community no-advertise
route-map Peer-CUST p 20

该地址仍显示在 SPRINT 路由器上。

2个回答

您让 BT 向社区发送路由到 Sprint,no-advertise这样 Sprint 路由器就不会通告它。BT 需要过滤 Sprint 的前缀。就像是:

neighbor 3.3.3.3 distribute-list 1 out 
!
access-list 1 deny 192.168.1.1 0.0.0.255
access-list 1 permit any

或者

neighbor 3.3.3.3 route-map BLOCKSPRINT out 
!
access-list 1 deny 192.168.1.1 0.0.0.255
access-list 1 permit any
!
route-map BLOCKSPRINT permit 10 
 match ip address 1

所以有几点-

1.) NO_ADVERTISE 旨在防止给定的 BGP 发言者进一步传播路由因此,在这种情况下,将此属性添加到向对等点通告的给定路由实际上会阻止该路由被推送到运营商网络的其余部分。您可能需要考虑 NO_EXPORT,它旨在限制给定前缀的传播超出联盟(如果联盟未使用,则限制整个 AS)。请参阅RFC1997,了解有关一般社区和特别是知名社区的行为的详细信息。

2.) 众所周知的社区不必 - 必须 - 受到尊重,但一般来说,它们在大多数实现中都是默认的(..除非您选择明确去除这些值)。但是,它们在本质上往往是全有或全无 - 因此,例如,表示给定路由不能传播通过直接对等路由器或通过对等路由器的 ASN。在这种情况下,将 NO_EXPORT 放在路由上会阻止 BT 向 CiscoSprint 做广告,但会允许它出现在 BT ASN 内的任何其他路由器中。

3.) 在这种情况下,BT 和客户路由器的所有者必须就社区值及其特殊含义达成一致,如果您希望有选择地向给定的上游对等点通告(或不明确地不通告)路由。您的运营商还可能会附加社区,指示给定路线是来自其他直接客户还是来自上游运输(这是减少表格大小的便捷方法)。除了上面提到的众所周知的价值观之外,其他一切都有可能被抢夺,而且如上所述,没有标准保证(除了与运营商协商的内容)什么行为对应于什么社区。也无法保证任何运营商都会在前缀穿过其网络时保留附加的社区。

所以让我们举一个相当简单的例子。在 BT 路由器(我们称之为 ASN2856)上,我们将在其对 CUSTOMER(我们称之为 ASN65400)、Sprint (ASN1239) 和 Cisco (ASN109) 的每个对等点上设置一个过滤器,以便仅使用 xxx:ASN 进行路由将被允许​​。因此,如果我们将 65400:109 放在路由上而不是65400:1239,那么该路由将被允许到 Cisco 而不是 Sprint。如果65400 :123965400:109 都附加到前缀,则路由将同时到达两者。如果两者都不是,那么路由将停留在 ASN2856 内。

所以在BT上我们会有类似的东西

ip community-list to-cisco permit .*:109
ip community-list to-sprint permit .*:1239
ip community-list to-customer permit .*:65400

route-map CISCO-PEER-OUT permit 10
   match community to-cisco
   set community none
route-map CISCO-PEER-OUT deny 20

route-map SPRINT-PEER-OUT permit 10
  match community to-sprint
  set community none
route-map SPRINT-PEER-OUT deny 20

route-map CUSTOMER-PEER-OUT permit 10
  match community to-customer
  set community none
route-map CUSTOMER-PEER-OUT deny 20

! Start the BGP section

neighbor 1.1.1.1 send-communities
neighbor 1.1.1.1 remote-as 109
neighbor 1.1.1.1 route-map CISCO-PEER-OUT out

neighbor 2.2.2.2 send-communities
neighbor 2.2.2.2 remote-as 1239
neighbor 2.2.2.2 route-map SPRINT-PEER-OUT out

neighbor 3.3.3.3 send-communities
neighbor 3.3.3.3 remote-as 65400
neighbor 3.3.3.3 route-map CUSTOMER-PEER-OUT out

在客户路由器上,你会有这样的东西

ip prefix-list ROUTES-FOR-CISCO permit 192.168.1.0/24

route-map MARK-ROUTE permit 10
   match ip address prefix-list ROUTES-FOR-CISCO
   set community 65400:109
route-map MARK-ROUTE permit 20
   match any
   set community 65400:109 65400:1239

!BGP section

neighbor 3.3.3.4 remote-as 2856
neighbor 3.3.3.4 send-community
neighbor 3.3.3.4 route-map MARK-ROUTE out

这会将前缀 192.168.1.0/24 设置为社区 65400:109,这将允许路由发送到 ASN109。所有其他路线将同时具有 65400:109 和 65400:1239 - 这将允许所述路线前往任一运营商。在 BT 路由器上,我还将其设置为清除发送到对等点的路由上的所有社区 - 例如,CISCO 对等点不会看到您包含的 65400:109 社区。

当然,在实践中,社区的结构可能不会完全像这样,但希望这能让您领略到什么是可能的。

希望这可以帮助-