讲了那么多协议的路由条目眼花缭乱的,什么各种优先级各种权重比,有没有一些专门直接控制路由转发路径的方法呢。那肯定是有的啊,而且种类还不少例如 PBR、ip-prefix、filter-policy、route-policy 等工具。就可以让路由按照你指定的方式进行转发。
先讲一个问题,之前面试总被问懵逼的问题;
你知道策略路由和路由策略的区别吗?
好几次面试官问我,我心里十分清楚这两个是有区别的,但是具体是什么区别真的想不起来,于是我后续整理了一下,总算是搞明白这个区别了。
路由策略; 路由策略是通过修改路由条目来控制数据流量的可达性,即对路由的接收和发布时候对路由进行过滤,例如一些路由协议 OSPF 、RIP、 静态路由协议等。
策略路由; 路由条目根据用户指定的策略进行转发,且该策略优于路由器本身路由表的转发,这种方式被称为策略路由。例如 filter-policy、route-policy 。
接下来继续讲解一下各种控制路由转发的工具的基本工作原理。
策略路由 PBR
PBR 是一种根据用户指定的某种策略,使路由按照指定的路径进行路由转发,达到控制路由转发的目的。PBR 可以分为三种本地策略路由、接口策略路由、指定策略路由。传统的路由转发原理,是根据路由表内的每天路由优先级,严格按照数据包的五元组进行查表转发,转发方式比较单一不够灵活。策略路由可以按照源地址、报文大小、链路质量等各种数据报文的属性来进行筛选,并指定通过何种路径转发,丢弃或是放行。可以用来限制用户权限访问,也可以用来做流量优化,功能十分强大。
ACL
ACL 分为基本 ACL 和高级 ACL 还有部分一些厂家自己的自定义扩展的 ACL 条目,ACL 是根据用户所定义的规则匹配来过滤路由条目,可以定义转发动作,也可以用来匹配数据流量。ACL 是一组顺序排列的过滤器,每条过滤器是根据自定义的动作和匹配条件组成,动作为允许或拒绝。匹配条件可以决定匹配内容,匹配条件包括源地址,目的地址,协议类型,端口号等。ACL 一定是需要下发到某个端口绑定,或者个策略中配合使用才能生效,在全局下创建配置 ACL 不调用的话是没有任何意义的,匹配动作是逐条匹配,从上往下依次匹配,每次新增过滤器就会在前自动加上编号,可以通过dis acl xxx 查看详细的编号。
dis acl 3000
可以看见,配置匹配条件时并未在 rule 后添加编号,但实际在 ACL 条目中会有默认添加编号,且编号的递增为每条编号加 5 。也可以手动自己定义数值。
ACL 分类
按照功能区分为:
-
基于接口的 ACL (编号范围 1000~1999)
-
基于 ACL (编号范围 2000~2999) 基本 ACL 规则只能包含源 IP 地址,对设备的CPU消耗较低,可用于简单的环境限制,使用场景有限。
-
高级 ACL (编号范围 3000~3999) 较基本 ACL 主要提供了更全面的匹配条件,可用对源地址、目的地址、协议类型等来匹配指定流量。
-
二层 ACL (编号范围 4000~4999) 想要在网络中对于终端进行更精确的权限控制,除了 IP 之外还有 MAC 地址,这时就需要二层 ACL ,来匹配源 MAC 地址、目的 MAC 地址、802.1q优先级、二层协议类型等二层通信的相关标识。
-
自定义用户 ACL (5000-5999) 当希望同时根据源 IP 地址、ARP报文类型对 ARP 报文进行过滤时,则可以匹置用户自定义 ACL 。
-
用户 ACL (6000~6999) 企业内部工作人员不在同一个网段难以管理,需要将其纳入一个用户组,并对其用户组镜像访问权限的管理,在高级 ACL 上基础又增加了用户组的配置项,可以实现对不同用户组的流量管控。
基本 ACL
基本ACL主要是作用于匹配二层的 MAC 地址、三层的 IP 地址、协议号等,也可以匹配四层的端口号。
- rule-id :自动生成,初始步长为 5 ,按照倍数往后累加,也可以自定义。
- deny / permit :指定动作允许或者拒绝。
- source-address :表示匹配源地址。
- source-wildcard :标识源地址的子网通配符,也就是反掩码。0.0.0.0 为全精确匹配,0.0.0.255 为匹配 24 位网段。
- time-range:可自定义 ACL 生效时间段。 基本 ACL 匹配原则,除去按照 rule-id 从上往下匹配外还按照;
- 带 VPN 实例的规则优先
- 源 IP 地址范围小的优先
高级 ACL
高级 ACL 可根据源 IP 地址、目的 IP 地址、IP 优先级、DSCP、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等信息对 IPv4 进行分类。 高级 ACL 的匹配原则;
- 带 VPN 实例的
- 指定了特定 IP 协议类型
- 源 IP 地址范围小的
- 目的 IP 地址范围小的
- 端口号范围小的
ACL 主要是作用于路由匹配,其本身也可以定义路由的拒绝和允许动作,但是必须要调用到接口或者结合其他工具一起使用。
前缀列表 ip-prefix
ACL 虽然作用很强大,各种数据包流量匹配,各种精度的流量都可以匹配,但是他依旧是按照源目地址来进行的主要区分。若需要对于 192.168.1.0/24 和 192.168.1.0/25 还有 192.168.1.0/26 进行路由条目过滤的话,ACL 就有点力不从心无能为力了, 这时候 ip-prefix 刚好填补了这个缺口。ip-prefix 为什么为叫做前缀列表呢,就是他可以通过 greater-equal-value 和 less-equal-value 两种参数过滤,严格控制以及区分地址前缀长度来达到的功能。
- greater-equal-value 参数 大于或等于指定前缀所匹配的位数和掩码长度。
- less-equal-value 参数 小于或等于指定前缀所匹配的位数和掩码长度。
可能单单看文字不是很直观的理解这个两个参数的区别,下面举几个例子就大家就好理解了。 例1:ip ip-prefix tech permit 172.16.1.0 24 说明;这个前缀列表只有子网掩码作为参数区别,那么也就是必须是掩码长度同样为 24 的才可以匹配到,也就是说只能匹配到一条路由 172.16.1.0/24 。
例2:ip ip-prefix tech permit 0.0.0.0 0 说明:参照例1大概也能猜到这个命令是啥含义了吧,这个就是匹配默认路由的,只有默认路由才能符合这个匹配条件。
例3: ip ip-prefix tech permit 0.0.0.0 0 less-equal 32 说明:less-equal-value 的参数含义是小于或等于,那么在地址范围为全 0 ,也就是不限制地址范围的情况下,并且对于子网掩码的要求是 0 ~ 32 之间,这个条件就是匹配全部路由的含义。
例4: ip ip-prefix tech permit 0.0.0.0 0 greater-equal 32 说明:greater-equal-value 参数代表的就是大于或等于,前缀部分一共有 0 位需要匹配到,但是后面的参数代表掩码大于或等于 32 位,而这个就是代表所有掩码为 32 位的主机地址。
例5: ip ip-prefix tech permit 0.0.0.0 1 greater-equal 8 less-equal 8 说明:这个就是表明前缀有1位需要匹配,且子网掩码等于 8 。这个地址段就是IP地址从0开始,最大地址为127。这个就是匹配到了 A 段地址内的所有IP。
他还有很多种不同的用法,大家可以自己多多钻研,以上的列举的应该都能理解前缀地址列表 ip-prefix 的主要功能了吧,他和 ACL 差不多结合其他工具进行使用才能生效,也是主要用来做路由匹配的。
路由策略工具 filter-policy
过滤策略,该工具是需要结合路由协议的进程中,需要结合 ACL 、ip-prefix、route-policy 一起使用,无法单独使用生效。使用原理就是,通过ACL、ip-prefix、route-policy 这些把指定路由条目筛选出来,然后在引入路由协议中时,通过指定的策略进行引入。是直接影响路由表内的路由条目的来达到根据自己指定的路径转发路由。
策略路由工具 route-policy
是一种比较复杂的工具,基本功能也是过滤路由,但是还可以指定某条路由为期添加某种路由属性。一个标准的 route-policy 由多个节点构成,一个节点包含 if-match 和 apply 子句,if-match 用来定义匹配的节点,apply 子句用来定义通过过滤的路由行为。同样对于路由条目的过滤,也是需要依靠 ACL 或者 ip-prefix 来对路由进行过滤筛选的。他的工作原理是筛选路由直接通过规定的指定路径转发,并不会影响路由表内的路由条目。