BGP 扩展社区列表正则表达式

网络工程 bgp
2021-07-09 18:25:02

我需要验证以下正则表达式是否符合我的标准,即:

  • 拒绝任何以开头的前缀 0:
  • 拒绝任何以开头的前缀 65000:
  • 拒绝任何以开头的前缀 0:65000
  • 拒绝任何以开头的前缀 65000:65000
  • 允许带有任何社区标记的任何前缀
  • 允许任何没有社区标记的前缀

该平台是 Quagga。

这是我扩展的社区列表:

ip community-list expanded ANY-COMMUNITIES deny ^(0:.*)_(.*)_+$
ip community-list expanded ANY-COMMUNITIES deny ^(65000:.*)_(.*)_+$
ip community-list expanded ANY-COMMUNITIES deny ^(0:65000)_(.*)_+$
ip community-list expanded ANY-COMMUNITIES deny ^(65000:65000)_(.*)_+$
ip community-list expanded ANY-COMMUNITIES permit ^(.*)_+$
ip community-list expanded ANY-COMMUNITIES permit ^$

这会涵盖我所追求的吗?有没有更好的办法?

1个回答

您不需要以如此复杂的方式进行操作,因为没有隐含的 $,所以这应该就足够了:

ip community-list expanded ANY-COMMUNITIES deny ^0:.*_
ip community-list expanded ANY-COMMUNITIES deny ^65000:.*_
ip community-list expanded ANY-COMMUNITIES permit .*

但这很可能连你想做的都没有,你真的对订单感兴趣吗?我不认为 BGP 在社区中强制执行任何特定的排序,RFC1997 只允许在不指定顺序的情况下进行操作。思科似乎在演示中按数字顺序对社区进行排序(邻居向我发送社区 1:42 3:42,我添加了 2:42,显示的社区是“1:42 2:42 3:42”,而不是您可能期望的内容) 1:42 3:42 2:42'。
也就是说,你一开始对65000社区的否定可能是行不通的。如果你解释一下你的申请,也许可以找到更好的解决方案。

当涉及到不同平台的社区时,@Teun 暗示它们是完全不同的。瞻博网络有一个绝妙的主意,即在其 as-path regexp 中使用 ASN 作为原子,通常原子是字符(或字节,如果您不支持 UTF8)。Juniper 解决方案显然是优越的解决方案,如果您考虑字符类,假设您想在 JunOS 中匹配私有 ASN,就像 [64512-65534] 一样简单。如果 atom 是普通字符,比如在 IOS 和 Quagga 中,那就尴尬多了。