一、实验背景:为什么要用 PBR
普通路由器 / 三层交换机选路只看目的 IP(查路由表)。当内网只有一个默认出口时,无论流量从哪来,上网都挤向同一个出口,无法 "分网段分流"。
但真实企业里常有这样的需求:
- 办公区 / 财务部(网段 A)→ 走出口路由器 R1(运营商 A)
- 宿舍区 / 访客区(网段 B)→ 走出口路由器 R2(运营商 B)
- 两个网段之间内网互访 → 不绕出口,三层直接转发
这种 "按源地址选路" 的需求,普通路由表做不到,必须用策略路由 PBR(Policy-Based Routing):它可以在原有路由表之外,按源地址等条件强制指定下一跳,实现 "不同来源走不同出口"。
二、实验拓扑与地址规划

表格
| ISP(电信 A) | GE0/0/0 | 202.96.134.133/24 | 模拟运营商,外网 ping 目标,连 AR1 |
| ISP(电信 B) | GE0/0/0 | 202.96.128.68/24 | 模拟运营商,外网 ping 目标,连 AR2 |
| AR1(出口 1) | GE0/0/0 | 202.96.134.1/24 | 连 ISP(电信 A) |
| AR1(出口 1) | GE0/0/1 | 10.254.1.1/24 | 连 SW-CORE1(GE0/0/19) |
| AR2(出口 2) | GE0/0/0 | 202.96.128.1/24 | 连 ISP(电信 B) |
| AR2(出口 2) | GE0/0/1 | 10.254.1.2/24 | 连 SW-CORE1(GE0/0/20) |
| SW-CORE1 | Vlanif10 | 10.0.1.254/24 | PC1 网关(网段 A) |
| SW-CORE1 | Vlanif20 | 10.0.2.254/24 | PC2 网关(网段 B) |
| SW-CORE1 | Vlanif100 | 10.254.1.3/24 | 上行 VLAN100 |
| SW-CORE1 | GE0/0/1、GE0/0/2 | access VLAN10/20 | 接 PC1、PC2 |
| SW-CORE1 | GE0/0/19、GE0/0/20 | access VLAN100 | 接 AR1、AR2 |
| PC1 | Ethernet0/0/1 | 10.0.1.253/24,网关 10.0.1.254 | VLAN10(网段 A) |
| PC2 | Ethernet0/0/1 | 10.0.2.253/24,网关 10.0.2.254 | VLAN20(网段 B) |
实现目标:
- 10.0.1.0/24 上网流量 → 下一跳 10.254.1.1(R1)
- 10.0.2.0/24 上网流量 → 下一跳 10.254.1.2(R2)
- 10.0.1.x ↔ 10.0.2.x 内网互访 → 不重定向,交换机三层直接转发
三、配置思路:PBR 的 MQC 五件套
PBR 用的是 MQC(模块化 QoS 命令行) 框架,记住 5 步就不会乱:
一句话记忆:ACL 负责 "认人",behavior 负责 "扔哪",policy 负责 "配对",接口负责 "在哪生效"。
四、详细配置步骤
以下主体配置全部在核心交换机 SW-CORE1 上完成,出口路由器只补回程路由(Step 7)。
Step 1:核心交换机 SW-CORE1 基础三层互通
shell
sys
sysname SW-CORE1
#
# —- 网段A 网关(PC1)—-
interface Vlanif 10
ip address 10.0.1.254 24
quit
# —- 网段B 网关(PC2)—-
interface Vlanif 20
ip address 10.0.2.254 24
quit
# —- 上行互联 VLAN100(接 AR1、AR2)—-
interface Vlanif 100
ip address 10.254.1.254 24
quit
#
# —- 物理口划入 VLAN —-
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10 # 接 PC1(网段A)
quit
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20 # 接 PC2(网段B)
quit
interface GigabitEthernet0/0/19
port link-type access
port default vlan 100 # 接 AR1
quit
interface GigabitEthernet0/0/20
port link-type access
port default vlan 100 # 接 AR2
quit
#
# (可选)Sw-core1 自身默认路由兜底
ip route-static 0.0.0.0 0.0.0.0 10.254.1.1
解析:redirect ip-nexthop 要求下一跳可达(本实验 AR1/AR2 与 S1 同在 10.254.1.0/24,属直连),所以上行互联先配通;PC 的接入 VLAN 也在此一并就绪。
Step 2:定义 ACL(匹配源网段,先排除内网!)
shell
# —- 匹配网段A:源 10.0.1.0/24 —-
acl number 3001
rule 5 deny ip source 10.0.1.0 0.0.0.255 destination 10.0.0.0 0.0.255.255
rule 10 permit ip source 10.0.1.0 0.0.0.255
quit
# —- 匹配网段B:源 10.0.2.0/24 —-
acl number 3002
rule 5 deny ip source 10.0.2.0 0.0.0.255 destination 10.0.0.0 0.0.255.255
rule 10 permit ip source 10.0.2.0 0.0.0.255
quit
解析(本实验最容易出错的地方,重点看):
- 3001/3002 是高级 ACL(3000~3999),能同时匹配源和目的地址。
- 0.0.0.255 是反掩码:0 表示对应位必须相同,1 表示任意。/24 的反掩码就是 0.0.0.255(换算公式:反掩码 = 255.255.255.255 − 正掩码)。
- 为什么要加 rule 5 deny? 如果只写 permit source 10.0.1.0/24,那么网段 A 发往内网 10.0.2.x 的包同样 "源匹配",会被一起重定向到 R1,内网互访就会绕行甚至不通。所以先用 deny 把 "目的为内网 10.0.0.0/16" 的流量排除 ——deny 表示该包不匹配这个分类器、不重定向,走正常三层转发,剩下的 permit 才是真正要出外网的流量。这是实现 "内网互通不走 PBR" 的关键。
- ACL 规则按编号从小到大顺序匹配、先匹配先生效,所以 deny 必须放在 permit 前面。
- 10.0.0.0 0.0.255.255 表示内网 10.0.0.0/16,请按你实际内网网段调整。
Step 3:定义流分类器(把 ACL 变成 "分类器")
shell
# —- 分类器 ACL-3001:匹配 ACL 3001 的流量 —-
traffic classifier ACL-3001
if-match acl 3001
quit
# —- 分类器 ACL-3002:匹配 ACL 3002 的流量 —-
traffic classifier ACL-3002
if-match acl 3002
quit
解析:if-match acl 把上一步的 ACL 引入分类器。这一步特别容易漏——traffic policy 里引用的 classifier 必须先用 traffic classifier 定义,否则策略不生效或直接报错。
Step 4:定义流行为(动作 = 重定向下一跳)
shell
# —- 网段A 的动作:强制下一跳 AR1 —-
traffic behavior PBR-AR1
redirect ip-nexthop 10.254.1.1
quit
# —- 网段B 的动作:强制下一跳 AR2 —-
traffic behavior PBR-AR2
redirect ip-nexthop 10.254.1.2
quit
解析:redirect ip-nexthop 是 PBR 的核心动作 —— 命中的报文不再查路由表,直接按指定下一跳转发。注意命令是 ip-nexthop(半角连字符),很多手稿会用成全角 ‑,直接复制进 CLI 会报错,务必手敲或先转成半角。
Step 5:定义流策略并绑定
shell
# —- 流策略:把分类器和行为一一配对 —-
traffic policy PBR-POLICY
classifier ACL-3001 behavior PBR-AR1
classifier ACL-3002 behavior PBR-AR2
quit
解析:报文在策略里从上到下匹配、先匹配先执行。如果两个分类器都不命中(例如内网互访流量在 ACL 里已被 deny),就回到正常路由表转发—— 这正是 "内网互通不走 PBR" 的最终落点。
Step 6:在用户接入的物理接口入方向应用
⚠️ 模拟器版本注意:受 eNSP 模拟器版本限制,部分交换机型号(如 S5700)不支持在 interface Vlanif 三层接口上应用 traffic-policy 做 PBR(实测不生效 / 报错)。变通做法:把策略应用在用户接入的物理接口(access 口)入方向,效果一致 —— 因为用户流量本来就是从该物理口进入交换机的。
shell
# —- 网段A 接入接口:入方向应用(PC1 上联口 GE0/0/1)—-
interface GigabitEthernet0/0/1
traffic-policy PBR-POLICY inbound
quit
# —- 网段B 接入接口:入方向应用(PC2 上联口 GE0/0/2)—-
interface GigabitEthernet0/0/2
traffic-policy PBR-POLICY inbound
quit
解析:
- 方向仍是 inbound:PBR 只对 "从该接口进入" 的流量生效,正好是用户上网走向。
- 同一张策略 PBR-POLICY 挂两个物理口互不干扰:GE0/0/1 进来的只有网段 A 的包(匹配 ACL-3001 → R1),GE0/0/2 进来的只有网段 B 的包(匹配 ACL-3002 → R2)。
- 内网互访逻辑不变:PC1 → PC2 进入 GE0/0/1 后,ACL-3001 的 rule 5 已 deny 内网目的、ACL-3002 源地址又不匹配,故不重定向,走交换机三层正常转发 ——"内网互通不走 PBR" 依然成立。
- 若换到支持的环境(真实设备或更高版本模拟器),仍可改回 interface Vlanif 10 / 20 上 traffic-policy PBR-POLICY inbound,两种挂法效果等价。
Step 7:出口路由器 AR1 / AR2 配置
shell
# ================= AR1(出口1,接电信A)=================
interface GigabitEthernet0/0/0
ip address 202.96.134.1 255.255.255.0 # 连 ISP(电信A)
quit
interface GigabitEthernet0/0/1
ip address 10.254.1.1 255.255.255.0 # 连 SW-CORE1(上行 VLAN100)
quit
ip route-static 10.0.1.0 255.255.255.0 10.254.1.3 # 回程:网段A 经 SW-CORE1
ip route-static 0.0.0.0 0.0.0.0 202.96.134.133 # 去外网默认路由
# ================= AR2(出口2,接电信B)=================
interface GigabitEthernet0/0/0
ip address 202.96.128.1 255.255.255.0 # 连 ISP(电信B)
quit
interface GigabitEthernet0/0/1
ip address 10.254.1.2 255.255.255.0 # 连 SW-CORE1(上行 VLAN100)
quit
ip route-static 10.0.2.0 255.255.255.0 10.254.1.3 # 回程:网段B 经 SW-CORE1
ip route-static 0.0.0.0 0.0.0.0 202.96.128.68 # 去外网默认路由
解析:PBR 只管去程;回程必须由出口路由器静态路由指回 S1(10.254.1.3),否则 "能出去、回不来"。默认路由是去外网目标(电信侧 202.96.x.x 为直连网段,配上是为更真实、也覆盖其它外网目标)。
Step 8:运营商 ISP 模拟设备配置(验证 ping 外网必需)
shell
# ================= ISP(电信A):模拟运营商 =================
sysname ISP-TELECOM-A
interface GigabitEthernet0/0/0
ip address 202.96.134.133 255.255.255.0 # 外网地址(ping 目标),连 AR1
quit
ip route-static 0.0.0.0 0.0.0.0 202.96.134.1 # 回程默认路由指回 AR1
# ================= ISP(电信B):模拟运营商 =================
sysname ISP-TELECOM-B
interface GigabitEthernet0/0/0
ip address 202.96.128.68 255.255.255.0 # 外网地址(ping 目标),连 AR2
quit
ip route-static 0.0.0.0 0.0.0.0 202.96.128.1 # 回程默认路由指回 AR2
解析:eNSP 里没有真实互联网,ISP 模拟设备必须自己配互联接口 IP(把外网目标地址配在接口上)、回程路由(默认路由指回对应出口路由器),否则 ping 外网不通。想再模拟 8.8.8.8 可在 ISP 上加 LoopBack:interface LoopBack 0 / ip address 8.8.8.8 255.255.255.255。
五、验证(一步步确认 PBR 生效)
1. 查看配置是否正确(注意:MQC 相关 display 命令必须带 user-defined)
shell
display acl all # 查看 ACL
display traffic classifier user-defined # 查看自定义流分类器(必须带 user-defined)
display traffic behavior user-defined # 查看自定义流行为(必须带 user-defined)
display traffic policy user-defined # 查看自定义流策略
display traffic-policy applied-record # 查看策略应用在哪个接口/方向(此命令无需带参数)





2. 功能验证(核心)
在 网段 A 的 PC1 上:
shell
ping 202.96.134.133 # 上网能通
tracert 202.96.134.133 # 第一跳应显示 10.254.1.1(AR1)→ 证明走了 AR1 出口
在 网段 B 的 PC2 上:
shell
ping 202.96.128.68 # 上网能通
tracert 202.96.128.68 # 第一跳应显示 10.254.1.2(AR2)→ 证明走了 AR2 出口
3. 内网互通验证
shell
# 在 PC1A 上 ping 网段B 的 PC2
ping 10.0.2.253
能通,且不经过任何出口路由器—— 说明内网流量没被重定向,走了正常三层转发。
4. 查看 PBR 匹配统计(进阶)
shell
display traffic policy statistics interface Vlanif 10 inbound # 网段A 重定向计数
display traffic policy statistics interface Vlanif 20 inbound # 网段B 重定向计数
小技巧:被重定向的流量不查路由表,可以对照 display ip routing-table 理解 —— 去往 8.8.8.8 的包明明命中默认路由,却被 PBR 改道了,这就是策略路由 "劫持" 路由表选路的证明。
六、关键点与避坑总结
表格
| 1 | 反掩码算错 | 反掩码 = 255.255.255.255 − 正掩码;/24 → 0.0.0.255 |
| 2 | 网段重叠 | 分楼层各用 /24,避免 0.0.3.255 这类重叠反掩码 |
| 3 | 忘了定义 classifier | policy 里引用的分类器必须先 traffic classifier 定义 |
| 4 | 纯源匹配导致内网被重定向 | ACL 里先用 deny 排除内网目的网段 |
| 5 | eNSP 不支持在 VLANIF 上应用 PBR | 改在用户接入物理接口(access 口)inbound 应用,效果相同 |
| 6 | 应用方向搞反 | 一定是 inbound(入方向) |
| 7 | 下一跳不可达 | redirect 的下一跳必须可路由(最好直连),先配好互联 |
| 8 | 忘配回程路由 | 只配去程,上网会 "有去无回" |
| 9 | display 命令不带参数报 Incomplete | traffic classifier/behavior/policy 后必须带 user-defined |
| 10 | ISP 模拟设备不配置 | 互联 IP + 回程默认路由必配,否则 ping 外网不通 |
| 11 | 命令字符复制出错 | ip-nexthop 必须是半角连字符,别用全角 |
七、小结
一句话总结本实验:用 ACL 认来源,用 redirect 换出口,内网目的提前 deny,回程路由别忘配。 掌握 MQC 五件套(ACL → classifier → behavior → policy → inbound 应用),策略路由就能灵活实现 "按源分流"" 按应用分流 " 等各种选路需求。
网硕互联帮助中心

评论前必须登录!
注册