策略路由PBR(Policy-Based Routing)是网络工程师常用的流量调度手段。与传统的基于目的地址的路由不同,PBR 允许我们根据源地址、应用协议、报文大小甚至 DSCP 值等条件,灵活地指定下一跳或出接口。本文将通过三个典型场景,演示如何配置基于源地址和应用的流量导向,并分享一些常见的配置误区和排错思路。
场景一:基于源地址的流量导向
某公司有两条出口链路,一条是电信(202.100.1.1),一条是联通(210.50.1.1)。现在要求研发部门(192.168.10.0/24)的流量走电信出口,而其他部门走联通出口。传统路由无法实现这种基于源地址的策略,而 PBR 可以轻松搞定。
以 Cisco IOS 为例,配置步骤如下:
- 定义 route-map,匹配源地址:
access-list 100 permit ip 192.168.10.0 0.0.0.255 any route-map PBR-ROUTE permit 10 match ip address 100 set ip next-hop 202.100.1.1 - 在接口上应用 route-map:
interface GigabitEthernet0/0 ip policy route-map PBR-ROUTE
验证命令:show route-map 和 show ip policy 可以查看配置是否生效。此外,可以使用 debug ip policy 查看 PBR 的匹配过程(注意在生产环境慎用 debug)。
华为设备(以 VRP 为例)配置类似:
acl number 3000
rule 5 permit ip source 192.168.10.0 0.0.0.255 destination any
policy-based-route PBR permit node 10
if-match acl 3000
apply next-hop 202.100.1.1
interface GigabitEthernet0/0/0
ip policy-based-route PBR
场景二:基于应用协议的流量导向
除了源地址,PBR 还可以根据应用协议(如 HTTP、HTTPS、DNS 等)进行分流。例如,将 HTTP 流量导向到出口 A,而 HTTPS 流量导向到出口 B,以实现带宽优化或安全策略。
在 Cisco 设备上,可以通过匹配 TCP 端口号实现:
access-list 101 permit tcp any any eq 80
access-list 102 permit tcp any any eq 443
route-map PBR-APP permit 10
match ip address 101
set ip next-hop 202.100.1.1
route-map PBR-APP permit 20
match ip address 102
set ip next-hop 210.50.1.1
注意:route-map 中的 permit 语句是顺序匹配的,一旦匹配成功就不再往下执行,因此顺序很重要。
华为设备的配置类似,使用高级 ACL 匹配端口号:
acl number 3001
rule 5 permit tcp source any destination any destination-port eq 80
acl number 3002
rule 5 permit tcp source any destination any destination-port eq 443
policy-based-route PBR-APP permit node 10
if-match acl 3001
apply next-hop 202.100.1.1
policy-based-route PBR-APP permit node 20
if-match acl 3002
apply next-hop 210.50.1.1
场景三:基于 DSCP 值的优先级调度
有时我们希望高优先级的流量(如 VoIP)走低延迟链路,而普通流量走另一条链路。这可以通过匹配 DSCP 值实现。例如,将 DSCP EF 的流量导向到低延迟的 MPLS 链路,其余走 Internet 链路。
Cisco 配置示例:
class-map match-any VOIP
match ip dscp ef
policy-map PBR-QOS
class VOIP
set ip next-hop 10.1.1.1
interface GigabitEthernet0/1
service-policy input PBR-QOS
注意:这里使用的是基于策略的路由(PBR)的另一种实现方式——基于策略映射(policy-map)的 QOS 策略,它也可以实现类似的功能,但更侧重于 QoS 处理。如果只是简单的下一跳设置,route-map 更直接。
常见误区与排错
在配置 PBR 时,有几个常见的误区需要注意:
- PBR 只对入站流量生效:PBR 是应用在入站接口上的,只对进入该接口的流量生效。如果流量从其他接口进入,则不会匹配。因此,需要确保 PBR 应用在正确的接口上。
- 下一跳的可达性:PBR 设置的下一跳必须是路由器已知的直连路由,否则流量会被丢弃。可以使用
show ip route验证下一跳是否可达。 - route-map 的匹配顺序:route-map 是顺序匹配的,一旦匹配成功就不在继续。因此,将更具体的条件放在前面。
- PBR 与路由表的交互:PBR 会覆盖路由表,但如果没有匹配到 PBR 策略,流量仍会按照路由表转发。另外,PBR 不会影响路由器自身产生的流量,只影响转发的流量。
排错思路:首先检查接口是否正确应用了 PBR;其次使用 show route-map 查看匹配计数是否增加;再次使用 debug ip policy 观察匹配过程(注意生产环境慎用);最后确认下一跳是否可达。
总结
策略路由PBR是一种强大的流量调度工具,通过基于源地址、应用协议或 DSCP 值等条件,可以实现精细化的流量导向。在配置时,需要注意 PBR 的作用范围、匹配顺序以及下一跳的可达性。通过本文的实例,希望您能掌握 PBR 的基本配置方法,并能在实际工作中灵活运用。
参考资料
- OWASP 日志安全速查表:虽然此文章主要关于日志安全,但其中提到“许多系统启用网络设备、操作系统、Web 服务器、邮件服务器和数据库服务器日志,但自定义应用事件日志常常缺失”,这提醒我们,在配置 PBR 时,应记录相关日志以便审计和排错。
- OpenTelemetry Logs 官方文档:该文档讨论了日志与其他可观测性信号的集成,虽然与 PBR 无直接关系,但强调了日志记录的重要性,可用于监控 PBR 策略的效果。
- Python Logging 官方文档:虽然这是编程语言日志库的文档,但其中关于日志配置和层次化记录的思想,可以类比到网络设备的日志管理中,以便更好地记录 PBR 的匹配事件。
请注意,以上参考资料并非直接针对 PBR,但其中关于日志记录和可观测性的讨论,对于网络设备配置的审计和监控具有借鉴意义。
延伸阅读
