辰风云网络科技

Hi, 请登录

RouterOS V7 Routing Filter

RouterOS v7
在路由方面除了路由表 routing/table 改动,但Routing Filter的改动绝了,
从v7.1beta4开始,routing filter rule配置修改为类脚本语法 。
这样的修改实在无法理解MikroTik的思路,又一次增加了RouterOS的操作难度

添加图片注释,不超过 140 字(可选)


操作路径:routing/filter/rule

Routing Filter语法

Filter规则支持多条件匹配,语法构成如下:
if ( [matchers] ) { [actions] } else { [actions] }
属性的两种类型:
  • only readable –这类属性参数仅只读且不能修改,这类属性只能被匹配使用
  • readable/writable –这类属性参数只读和可修改,既能执行过滤配置,也可匹配使用
只读属性可以与其他只读属性参数匹配(仅适用于数值型)或使用布尔运算符的常量值。
[matchers]:[prop readable] [bool operator] [prop readable] [actions]:[action] [prop writeable] [value]
仅只有一个条件匹配的操作,则不需使用布尔运算符,如下面没有布尔运算符的实例:
if ( protocol connected ) { accept }
下面是使用了布尔运算符:
if ( bgp-med < 30 ) { accept }
如果匹配的属性是只读,matcher无需使用运算符
if ( ospf-dn ) { reject }
注意,路由过滤器链的默认动作是“拒绝”。

rule实例

在rule中,允许多个条件被叠加在一个规则中,并像防火墙一样按顺序执行, 下面的实例,匹配静态且是默认路由,并执行接受,可以写入在一条规则中(在routing filter链表中,默认action为“drop“):
/routing/filter/ruleadd chain=ospf_in rule="if (dst==0.0.0.0/0 && protocol static) { accept }"
例如,在v6的规则 “/routing filter add chain=ospf_in prefix=172.16.0.0/16 prefix-length=24 protocol=static action=accept”,转换为v7的配置如下:
/routing/filter/ruleadd chain=ospf_in rule="if (dst in 172.16.0.0/16 && dst-len==24 && protocol static) { accept }"
另一个实例,前缀的匹配,从172.16.0.0/16中匹配子网长度为24的范围,并设置BGP的mde和prepend参数:
/routing/filter/ruleadd chain=BGP_OUT rule="if (dst-len==24 && dst in 172.16.0.0/16) {set bgp-med 20; set bgp-path-prepend 2; accept }"
可以通过以下配置匹配前缀长度范围
/routing/filter/ruleadd chain=BGP_OUT rule="if (dst-len>13 && dst-len<31 && dst in 172.16.0.0/16) { accept }"
Filter规则可以匹配或设置communities参数, 如能使用large communities和extended communities
/routing/filter/ruleadd chain=bgp_in rule=" bgp-communities-large append 200001:200001:10 "
如果有多个community,需要在多个规则中应用,可以在large-community-set下定义community集合,并使用它们来匹配或设置:
/routing/filter/large-community-setadd set=myLargeComSet communities=200001:200001:10

/routing/filter/ruleadd chain=bgp_in rule=" bgp-communities-large-set append myLargeComSet "
由于route-target编码在extended community属性中以更改或匹配RT,因此需要对extended community属性进行操作:
/routing/filter/ruleadd chain=bgp_in rule=" bgp-communities-ext append rt:327824:20 "
下面的实例是匹配子网192.168.1.0/24,并且子网长度大于24,就执行distance距离增加1,如果没有匹配,就减去distance值1
/routing filter rule  add chain=myChain rule="if (dst==192.168.1.0/24 && dst-len>24) {set distance +1; accept} else {set distance -1; accept}"
也可以配置“||”或的方式匹配,如下:
/routing filter ruleadd chain=osfp_out disabled=no rule="if(dst==192.168.81.0/24 || dst==192.168.80. 0/24  ){set distance +1; accept}"


相关推荐

二维码
评论