策略路由(本地策略和接口策略)

策略路由(本地策略和接口策略)

会影响数据包的转发过程,不依赖于路由表,只要匹配到定义的策略,就可以进行转发

策略路由和路由策略差别:

路由策略可以对路由的引入,转发等行为进行控制,属于控制平面,为路由协议服务,并且路由策略中没有匹配到的会直接丢弃

策略路由是基于策略的转发,属于转发平面,需要逐跳配置策略,以保证策略可以正常转发,如果策略未匹配,再按照路由表转发

可以得出:策略路由是在查看路由表之前就执行,并且不会因为没有匹配就对数据包丢弃

策略路由分类:

1. 本地策略
需要在本机(配置的那台设备)下发,只会对本机发送的数据包进行匹配,如果是别的设备转发过来的不会生效

2. 接口策略
会对其他设备转发的数据包进行匹配,需要在接口的入方向进行调用(如果在出方向,路由表都以及查看完毕了,路也选好了,还要策略干啥呢)

语法格式:
本地策略使用的是:policy-based-route

一个policy里面可以绑定多个if-match,if-match之间是与关系
也可以都多个节点(node),不同的节点是或关系

policy-based-route xxx(策略名)  permit/deny  node 10
if-match xxxx  (eg:acl)
apply xxxxx  (eg:指定下一跳,优先级,开销....)

接口策略使用的MQC流策略

一个策略里面可以绑定多对流分类和流行为

traffic classifier xxx(name)---->里面调用acl一类的匹配工具(流分类)
traffic behavior xxx(name)-->里面配置匹配对匹配到的感兴趣流的行为(流行为)
traffic policy xxx(name)----->将流分类和流行为进行绑定

实验环境:

在这里插入图片描述整个拓扑使用ospf协议,划分了一个区域area 0 ,主机的地址通过dhcp获取
配置:

sw1
undo te mo
sys
sys sw1
vlan ba 10 20 30 100
int g0/0/1
port l ac
port de vlan 10
int g0/0/2
port l ac
port de vlan 20
int g0/0/3
port l ac
port de vlan 30
int g0/0/4
port l ac
port de vlan 100
dhcp en
int vlan 10
ip add 192.168.10.254 24
dhcp select int
int vlan 20
ip add 192.168.20.254 24
dhcp select int
int vlan 30
ip add 192.168.30.254 24
dhcp select int
int vlan 100
ip add 192.168.100.253 24
ospf 1 router-id 100.100.100.100
a 0
net 192.168.0.0 0.0.255.255
----------------------------------------------------------------------
sys
sys rt1
int g0/0/0
ip add 192.168.100.1 24
int g0/0/1
ip add 12.0.0.1 24
int g0/0/2
ip add 13.0.0.1 24
ospf 1 router-id 1.1.1.1
a 0
net 12.0.0.0 0.0.0.255
net 13.0.0.0 0.0.0.255
net 192.168.0.0 0.0.255.255
----------------------------------------------------------------------
sys 
sys rt2 
int g0/0/0
ip add 12.0.0.2 24
int g0/0/1
ip add 24.0.0.2 24
ospf 1 router-id 2.2.2.2
a 0
net 12.0.0.0 0.0.0.255
net 24.0.0.0 0.0.0.255
---------------------------------------------------------------------
sys 
sys rt3 
int g0/0/0
ip add 13.0.0.3 24
int g0/0/1
ip add 34.0.0.3 24
ospf 1 router-id 3.3.3.3
a 0
net 12.0.0.0 0.0.0.255
net 34.0.0.0 0.0.0.255
--------------------------------------------------------------------
sys 
sys rt4
dhcp en
int g0/0/0
ip add 24.0.0.4 24
int g0/0/1
ip add 34.0.0.4 24
int g0/0/2
ip add 10.0.0.254 24
dhcp select int
ospf 1 router-id 4.4.4.4
a 0
net 24.0.0.0 0.0.0.255
net 34.0.0.0 0.0.0.255
net 10.0.0.0 0.0.0.255

配置完成后,主机分配到的地址分别是:

pc1192.168.10.253/24
pc2192.168.20.253/24
pc3192.168.30.253/24
pc410.0.0.253/24

如果通过本地策略配置pc1到pc4从rt3上走,会有什么效果
配置:

rt1 
acl 2000
rule 5 permit source 192.168.10.0 0.0.0.255
policy-based-route ops permit node 10
 if-match acl 2000
 apply ip-address next-hop 13.0.0.3 
ip local policy-based-route ops

发现pc1仍旧从RT2上走,并没有匹配上RT1的策略

在这里插入图片描述但是

在RT1上测试却发现,只有RT1的192.168.10.0才会从RT3上走(在RT1上设置了一个地址为192.168.10.100的回环口)
从抓包来看,对方回应的包并没有走RT3这条路

在这里插入图片描述
在这里插入图片描述

如果用接口策略配置会有什么样的效果

配置:

acl number 2000  
 rule 5 permit source 192.168.10.0 0.0.0.255 
#
traffic classifier pc1 operator or
 if-match acl 2000
#
traffic behavior pc1
 redirect ip-nexthop 13.0.0.3
#
traffic policy link
 classifier pc1 behavior pc1

手动指定下一跳是13.0.0.3,当pc1的数据包到达RT1后,接口处调用策略,查看是否匹配classifier中的if-match,匹配后按照行为将数据包发送到下一跳为13.0.0.3的路由器上,到达RT3后,发现没有策略,于是按照正常的路由表进行转发

并且不仅仅是对于本机(被配置的设备),转发设备也可以被匹配上

在这里插入图片描述整体策略的配置:

acl number 2000  
 rule 5 permit source 192.168.10.0 0.0.0.255 
acl number 2001  
 rule 5 permit source 192.168.20.0 0.0.0.255 
#
traffic classifier pc2 operator or
 if-match acl 2001
traffic classifier pc1 operator or
 if-match acl 2000
#
traffic behavior pc2
 redirect ip-nexthop 12.0.0.2
traffic behavior pc1
 redirect ip-nexthop 13.0.0.3
#
traffic policy link
 classifier pc1 behavior pc1
 classifier pc2 behavior pc2

因为pc3的网段需求是默认路径,则不需要进行额外的配置
验证可以看出pc2和pc3都是从RT2上进行转发

在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
NestJS 中的自定义守卫和自定义本地策略都是用于保护路由的工具,但它们的工作方式略有不同。 自定义守卫是一个类,它实现 `CanActivate` 接口并包含一个名为 `canActivate` 的方法。在 `canActivate` 方法中,您可以编写逻辑来检查用户是否可以访问该路由。如果 `canActivate` 方法返回 `true`,则表示用户可以访问该路由。如果方法返回 `false` 或抛出异常,则表示用户无法访问该路由。 以下是一个示例自定义守卫: ```typescript import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; @Injectable() export class MyGuard implements CanActivate { canActivate(context: ExecutionContext) { const request = context.switchToHttp().getRequest(); return request.user && request.user.role === 'admin'; } } ``` 在上面的代码中,我们定义了一个名为 `MyGuard` 的自定义守卫。在 `canActivate` 方法中,我们检查请求对象中的用户对象是否存在,并且用户具有 `admin` 角色。如果这些条件都为真,则返回 `true`,表示用户可以访问该路由。否则,返回 `false`。 自定义本地策略是一个类,它实现 `PassportStrategy` 接口并包含一个名为 `validate` 的方法。在 `validate` 方法中,您可以编写逻辑来验证用户凭据并返回用户对象。如果用户凭据有效,则返回用户对象。如果凭据无效,则抛出异常。 以下是一个示例自定义本地策略: ```typescript import { Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy } from 'passport-local'; import { AuthService } from './auth.service'; @Injectable() export class MyStrategy extends PassportStrategy(Strategy) { constructor(private readonly authService: AuthService) { super(); } async validate(username: string, password: string) { const user = await this.authService.validateUser(username, password); if (!user) { throw new UnauthorizedException(); } return user; } } ``` 在上面的代码中,我们定义了一个名为 `MyStrategy` 的自定义本地策略。在 `validate` 方法中,我们调用 `AuthService` 中的 `validateUser` 方法来验证用户凭据。如果凭据有效,则返回用户对象。否则,抛出 `UnauthorizedException` 异常。 总的来说,自定义守卫和自定义本地策略都是用于保护路由的工具。自定义守卫用于检查请求对象中的信息,以确定用户是否可以访问该路由。自定义本地策略用于验证用户凭据,并返回用户对象。您可以根据您的需求选择使用其中的一个或两个。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄上的Tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值