路由过滤

筛选器语法

路由筛选规则实现类似脚本的语法。下面的示例快速演示了一个路由过滤器,它匹配来自子网192.168.1.0/24的前缀长度大于24的前缀,并将默认距离增加1。如果没有匹配,则将默认距离减去1。

/路由过滤规则add chain=myChain rule="if (dst in 192.168.1.0/24 && dst-len>24) {set distance +1;Accept} else{设置距离-1;接受}”


过滤规则可以由多个匹配器和动作组成:

If ([matchers]) {[actions]} else {[actions]}


有两种类型的属性:

  • 仅可读-值仅可读且不能重写的属性,这些属性只能由匹配器使用
  • 可读/可写——值是可读和可写的,由过滤器操作使用,也可以由匹配器使用

可读属性可以与其他可读属性(仅用于数字属性)或使用布尔运算符的常量值匹配。

[matchers]:[道具可读][bool操作符]:[道具可读][actions]: [action][道具可写][value]

如果只有一个可能的操作,则不使用布尔运算符。

不带布尔运算符的示例:

If(协议已连接){accept}

带布尔运算符的示例:

If (bgp-med < 30) {accept}

使用可读标志属性时,匹配器不需要指定布尔运算符和值

If (ospf-dn) {reject}

注意路由过滤器链的默认动作是“拒绝”。

只有可读属性


财产 类型 描述
数值属性
dst-len
目的地址前缀长度
bgp-path-len
BGP AS-PATH的当前长度
bgp-input-local-as
前缀发送到的本地对等体的AS号
bgp-input-remote-as
接收到该前缀的远端对等体的AS号
bgp-output-local-as
发布该前缀的对等体的AS号
bgp-output-remote-as
该前缀要发布到的对等体的AS号
ospf-metric
当前OSPF度量
ospf-tag
当前OSPF标签
rip-metric
当前RIP度量
rip-tag
当前RIP标签
标记的属性
活跃的
路由是否激活
bgp-atomic-aggregate

bgp-communities-empty
BGP团体属性是否为空
bgp-ext-communities-empty
BGP扩展团体属性是否为空
bgp-large-communities-empty
BGP大型团体属性是否为空
bgp-network
前缀是否来源于BGP网络
ospf-dn
OSPF路由是否设置了DN位。
前缀的属性
dst
目的地
ospf-fwd
当前OSPF转发地址
bgp-input-local-addr
前缀发送到的本地对等体的IP地址
bgp-input-remote-addr
接收到前缀的远端对等体的IP地址
bgp-output-local-addr
发布该前缀的对等体的IP地址
bgp-output-remote-addr
要将前缀发布到的对等体的IP地址
其他属性
afi Ipv4 | ipv6 | l2vpn | l2vpn-cisco | vpnv4 | vpnv6 路由的地址族。
bgp-as-path numeric_regexp AS路径匹配,阅读更多> >
bgp-as-path-slow-legacy string_regexp 弃用.非常慢的旧式AS路径匹配。当从旧的ROS v6配置迁移时,此参数只能用作临时匹配器。阅读更多> >
chain_name
ospf-type Ext1 | ext2 | inter | intra | nssa1 | nssa2

OSPF路由类型:

  • ext1 - external (Type 5 LSA) type1 metric
  • ext2 - external (Type 5 LSA) type2 metric
  • inter- inter-area-route (Type - 3 LSA)
  • intra- intra-area-route (Type - 4 LSA)
  • nssa1 - type7 LSA, metric类型为1
  • nssa2 - type7 LSA,类型为1
协议 BGP | connected | DHCP | fantasy | modem | ospf | rip | static | VPN 引入路由的协议类型。
rpki 无效|未知|有效|未经验证 前缀的RPKI验证状态
rtab routing_table_name 引入路由的路由表名
多联机 vrf_name 引入路由的VRF名称

可写属性

财产 类型 描述
数值属性
距离
路的距离
范围

scope-target
目标范围
bgp-weight
BGP WEIGHT属性
bgp-med
BGP MED属性是路由器本地的。它还用于iBGP对等体的输出。
bgp-out-med
发送给远端对等体的BGP MED属性。在eBGP对等体的输出链中使用。
bgp-local-pref
BGP LOCALPREF属性
bgp-igp-metric
BGP igp度量
bgp-path-peer-prepend

Prepend最后收到的远端对等体ASN。如果前缀来自路由器,那么这个参数不会在路由器的输出上起任何作用,因为ASN还不存在。


如果在BGP输入中使用它作为一个匹配器,可以过滤超过一定数量的前缀。例如,如果一个远端对等体将它的ASN前置5次,但我们希望允许最多4次前置ASN,那么我们可以使用:"如果(bgp-path-peer-prepend4){拒绝}


此参数还覆盖从远端对等体接收到的任何前置符,例如,如果远端对等体将其AS前置符加了3次,我们可以通过设置"bgp-path-peer-prependBGP输入为1”

bgp-path-prepend
前置路由器ASN,用于BGP输出。
ospf-ext-metric
OSPF外部路由度量
ospf-ext-tag
OSPF外部路由标签
rip-ext-metric
外部路由度量
rip-ext-tag
RIP外部路由标签
标记的属性
ospf-ext-dn
OSPF外部路由的DN位
黑洞

suppress-hw-offload
是否suppress L3 HW offloading
use-te-nexthop

其他属性
吉瓦 ipv4/6地址

IPv4/IPv6地址或接口名称。在BGP输出的情况下,网关可以通过以下方式进行调整:

  • 是BGP反射器
  • Nexthop-choice被设置为传播
  • 不是eBGP,且没有设置nexthop-choice=force-self。
gw-interface interface_name 接口部分为网关。如果需要为下一跳附加特定接口,则应该使用,如(1.2.3.4%ether1)
gw-check 没有| arp | icmp | bfd | bfd-mh
pref-src ipv4/6地址
bgp-origin 显卡|出路|不完整
ospf-ext-fwd ipv4/6地址
ospf-ext-type 类型1 |类型2
评论 字符串
bgp-communities Inline_community_set | set_name BGP Communities属性是在RFC 1997中定义的。每个社区的大小为32位。
bgp-ext-communities
BGP扩展团体属性在rfc4360中定义。l雷竞技RouterOS解析site-of-origin(前缀为soo:)和route-target(前缀为rt:))扩展团体。例如:“set bgp-ext-communities rt:111:2.3.4.5;”。可以在64位十六进制中设置/匹配RAW扩展团体值,例如,“set bgp-ext-community 0x.........;”
bgp-large-communities
BGP大型团体属性在RFC 8092中定义。适用于包括32位asn在内的所有asn。每个团体字长度为12字节,由3部分组成:global_admin:locap_part_1:local_part_2。

命令

命令 参数个数 描述
接受
接受匹配的前缀
拒绝
拒绝匹配的前缀,该前缀将被“过滤”存储在内存中,不会作为候选路径被选择为最佳路径。
返回
返回到父链
跳chain_name 跳转到指定的链
设置 设置prop_name 用于清除以下属性的值。
pref-src | bgp-med | bgp-out-med | bgp-local-pref
附加
在列表或字符串的末尾附加。可以添加以下属性值:Bgp-communities, bgp-ext-communities, bgp-large-communities, comment
过滤器
可以过滤以下属性值:Bgp-communities, bgp-ext-communities, bgp-large-communities
删除
删除指定属性的值。可删除的属性包括:Bgp-communities, bgp-ext-communities, bgp-large-communities
设置prop_writeable值 该命令用于设置可写属性的新值。值可以从匹配类型的其他可读属性设置。对于数值属性,可以在值的前缀加上+/-,这将使当前属性值增加或减少给定的数量。例如,”pref-src+1“将当前pref-src增加1,或从其他可读num属性中提取值,”距离+ospf-ext-metric
rpki-verify rpki-verify rpki_group_name 在指定RPKI组的当前链中启用RPKI验证。

运营商

匹配器运营商

操作符 描述 例子
& & 逻辑与运算符 如果(dst在192.168.0.0/16 && dst-len在16-32){拒绝;}
|| 逻辑或运算符
逻辑NOT运算符 如果(不是bgp-network){拒绝;}

道具操作员

操作符 描述
如果值在提供的数值范围内,则返回true。数字范围可以写成以下格式:{int..int}, {int-int}
= = 如果数值相等,则返回true
! = 如果数值不相等,则返回true
> 如果左侧数值大于右侧数值,则返回true
< 如果左侧数值小于右侧数值,则返回true
> = 如果左侧数值大于或等于右侧数值,则返回true
< = 如果左侧数值小于或等于右侧数值,则返回true

前缀操作符

操作符 描述
如果前缀是所提供网络的子网,则返回true。如果使用运算符来匹配地址列表中的前缀(例如“list_name中的DST),那么它将只匹配准确的前缀。
! = 如果前缀不等于提供的值,则返回true
= = 如果前缀等于提供的值,则返回true

BGP团体运营商

操作符 描述 例子
平等的 如果提供的团体值等于routes属性值,则返回true
equal-list 如果提供的community-list中的团体值等于路由的属性值,则返回true
任何 如果路由的属性值包含至少一个所提供的团体,则返回true
任何列表 如果路由的属性值包含所提供列表中的至少一个团体字,则返回true
包括 如果路由的属性值包含指定的团体,则返回true
包含列表 如果路由的属性值包括指定communities-list中的所有团体,则返回true
子集

分列表

any-regexp

subset-regexp

字符串运算符

操作符 描述
找到 检查所提供的子字符串是否是属性值的一部分
正则表达式 匹配属性值的字符串regexp

删除BGP团体

路由过滤器允许使用delete命令清除BGP团体。Delete命令根据团体字类型接受几个参数:

  • 社区
    • -将匹配并删除知名社区
    • 其他-将匹配并删除其他不太知名的社区
    • 正则表达式- regexp模式来匹配应该删除的团体
    • "" -从指定的community-list中删除团体
  • ext-communities
    • rt-将匹配并删除RouteTarget
    • -将匹配并删除Site-of-Origin
    • 其他-将匹配并删除其他非RT或SSO的ext社区
    • 正则表达式- regexp模式,以匹配应该删除的ext团体
    • "" -从指定的community-ext-list中删除团体
  • 大点的社区
    • 所有-删除所有内容
    • 正则表达式- regexp模式来匹配应该删除的大型社区
    • "" -从指定的community-large-list中删除大型团体


可以指定多个团体类型,例如从community-ext列表中删除所有的sso、其他类型的ext团体和特定的rt:

/routing/filter/community-ext-list add list=myRTList communities="rt:1.1.1.1:222" /routing/filter/rule/add chain=myChain rule="delete bgp-ext-communities sso,other,myRTList;"


AS-PATH Regexp匹配

AS路径是自治系统编号的序列,如AS Path 123 456 789表示该路由来自编号为789的自治系统,报文要到达目的地需要经过两个自治系统:456和789。要应用特定的路由策略,管理员可能需要匹配AS路径中的特定AS号或一组数字(例如,拒绝通过AS 456的前缀),这可以使用正则表达式(regexp)实现。

有两种常用的方法来操作AS路径数据:

  • 将整个AS路径转换为字符串并让regexp对字符串进行操作(ROS v6或Cisco风格)
  • 让regexp对AS路径中的每个条目作为一个数字进行操作(ROS v7, Juniper风格)

基本上,第一种方法是对每个字符执行匹配,第二种方法是对整个AS号执行匹配。正如您可以想象的那样,后一种方法比字符串匹配方法更快,占用的资源更少。

此更改将要求管理员实现新的Regex策略。RouterOS v6中的旧Regex模式不能直l雷竞技接复制/粘贴,因为它们会导致语法错误或意想不到的结果。

让我们以一个非常基本的AS路径过滤规则为例。

/routing/filter/rule/add chain=myChain rule="if (bgp-as-path .1234.) {accept}"

在ROS v7中,这个Regex模式将匹配AS路径中间的任何地方的ASN 1234,在ROS v6中,相同的模式将匹配任何包含ASN至少由6个字符组成并包含“1234”字符串的AS路径。显然,如果我们直接将Regex模式从一个实现复制/粘贴到另一个实现,将导致意想不到/危险的结果。ROS v6中的等效模式看起来像这样:“._1234_.”。

让我们以ROS v6中的另一个例子为例,假设我们有一个模式“1234[5-9]”,它所做的是在字符串的任何地方匹配12345到12349,这意味着有效的匹配是as路径“12345 3434”,“11 9123467 22”等等。如果您在ROS v7中输入相同的模式,它将匹配包含精确的ASN 1234的AS路径,然后是ASN 5到9的范围(匹配的AS路径将是“1234 7 111”,“111 12345 222”等,它将不匹配“12345 3434”)。

不要直接从ROS v6或Cisco配置中复制Regex模式,它们不直接兼容。在某些情况下,它可能导致意想不到甚至危险的配置。


正则表达式测试工具

l雷竞技RouterOS现在有一个内置的正则表达式检查工具来简化管理员的艰难生活。这个工具也支持num-list,所以现在精确的正则表达式可以在应用到路由过滤器之前针对任何as路径进行测试。

/routing/filter/num-list add list=test range=100-1500 /routing/filter/test-as-path-regexp regexp="[:test:]]5678\$" as-path="1234,5678"



支持运营商

操作符 描述 例子 例子解释 例子匹配
表示路径的开始 ^ 1234年 数学as路径将从ASN 1234开始吗
表示路径的结束 1234美元 将匹配ASN 1234的as起始路径
零次或多次出现所列ASN ^ * 1234 在ASN 1234可能出现或不出现多次的情况下,math Null作为路径还是作为路径

数学:

1234

1234 1234 1234

零路径

不匹配:

1234 5678

+ 所列ASN的一次或多次出现 1234 + ASN 1234至少出现一次的as路径是否匹配

匹配:

1234

3 1234 6

不匹配:

12345 678

? 所列ASN为零或一次 ^ 1234年?5678 将匹配as路径,该路径可能以出现一次的ASN 1234开始,也可能不以出现一次的ASN 1234开始。

匹配

5678

1234 5678

不匹配:

1234 1234 5678

12345 5678

任意ASN的一次出现 ^。 匹配长度为1的as路径。

匹配:

12345

45678

不匹配:

1234 5678

| 在每边的两个asn中选择一个进行匹配 ^ (1234 | 5678) 是否匹配以ASN 1234或5678开头的as路径

匹配

1234

5678

1234 5678

不匹配:

91011

[]

(^)

表示AS号的集合,其中必须匹配列表中的一个AS号。

在打开括号后使用^来对集合求反。

也可以引用预定义的数字列表num-list与[[:numset_name:]]

^[12345678 1-100]


是否匹配以1234或5678开头的as路径或从1到100开始的as路径

匹配:

1234

99

5678

不匹配:

101

()

要匹配的regexp术语组 ^(1234 | 5678美元) 匹配以1234开始和结束的as路径还是以5678开始的as路径

匹配:

1234

5678 9999

不匹配:

1234 5678

不支持重复范围{}。

团体字和数字列表

常用号码列表可从/路由/过滤器/ num-list菜单。可以在筛选规则中使用这些数字列表来简化筛选设置过程。

以类似的方式,您还可以定义社区、扩展社区和大型社区列表。团体集可用于匹配、追加和设置。

例如,从列表中匹配团体并清除属性:

/routing/filter/community-list add communities=111:222 list=myCommunityList /routing/filter/rule/add chain=myChain rule="if (bgp-communities equal-list myCommunityList) {delete bgp-communities wk,other;接受;}”




/路由/过滤器/ community-list

财产 描述
评论字符串;默认值:)
社区社区列表;默认值:)

表示为的社区列表著名的名称或以下格式:作为:数字”,每个section可以是整数[0..65535]。

公认的知名名字:

Accept-own graceful-shutdown no-advertise no-llgr route-filter-6
Accept-own-nh Internet no-export no-peer route-filter-xlate-4
Blackhole llgr-stale local-as route-filter-4 route-filter-xlate-6

禁用(是的|不)
的名字整数(字符串;默认值:) 引用名称。
正则表达式(字符串) Regexp匹配器来匹配社区。只有regexp参数的团体字集不能用于追加团体字。

/路由/过滤器/ community-ext-list

财产 描述
评论字符串;默认值:)
社区外接团体列表;默认值:)

扩展社区列表表示为整数值或键入格式:"类型:值,其中type可以为:

  • rt——route-target
  • -产地

值取决于类型,有关RT和SoO值的更多信息请询问谷歌。

禁用(是的|不)
的名字整数(字符串;默认值:) 引用名称。
正则表达式(字符串) Regexp匹配器来匹配社区。只有regexp参数的团体字集不能用于追加团体字。

/路由/过滤器/ community-large-list

财产 描述
评论字符串;默认值:)
社区大型社区列表;默认值:)

大型社区列表以以下格式表示:管理:value1: value2,每个section可以是整数[0..4294967295]。

禁用(是的|不)
的名字整数(字符串;默认值:) 引用名称。
正则表达式(字符串) Regexp匹配器来匹配社区。只有regexp参数的团体字集不能用于追加团体字。


路线选择

路由选择规则允许控制如何从可用的候选路由中选择输出路由。默认情况下(如果没有设置选择规则)输出总是选择最佳路由。

例如,如果我们看下面的路由表,我们可以看到有两条候选路由和一条最佳路由。缺省情况下,BGP在选择发送路由时,将选择激活路由。

[admin@4] /routing/route> print where dst-address=1.0.0.0/24 Flags: A - ACTIVE;b, y - COPY列:DST-ADDRESS, GATEWAY, AFI, DISTANCE, SCOPE, TARGET-SCOPE, IMMEDIATE-GW DST-ADDRESS GATEWAY AFI DISTANCE SCOPE TARGET-SCOPE IMMEDIATE-GW b 1.0.0.0/24 10.155.101.217 ip4 19 40 30 10.155.109.254%ether1 Ab 1.0.0.0/24 10.155.109.254%ether1 b 1.0.0.0/24 10.155.109.254%ether1 ip4 20 40 30 10.155.101.231 ip4 20 40 30 10.155.109.254%ether1

但在某些情况下,你可能会希望优先选择其他路线,而不是活跃的路线,这里有游戏中的选择规则。

RouterOS中的选择规则从l雷竞技/路由/过滤器/ select-rule菜单。

选择规则还可以调用路由筛选器,其中根据筛选器规则选择路由。例如,为了模拟默认的输出选择,我们可以设置以下规则集:

/路由过滤规则add chain=get_active rule="if (active) {accept}" /路由过滤规则select-rule add chain=my_select_chain do-where=get_active


属性引用

/路由/过滤器/链

BGP/OSPF配置中可以引用的过滤规则链的动态列表。

只读属性:

财产 描述
动态是|不是)
不活跃的(是的|不)
的名字字符串)

/路由/过滤器/ select-chain

BGP/OSPF配置中可以引用的过滤器选择链的动态列表。

只读属性:

财产 描述
动态是|不是)
不活跃的(是的|不)
的名字字符串)
  • 没有标签