华为H3C实战 | 第17章 ACL 与路由策略
📚 本系列共 43 篇(第 17 / 43 篇) · 第二卷 路由与广域网篇 —— 让数据找到路
← 上一篇:第 16 章 IPv6 基础配置与地址自动配置 下一篇:第 18 章 WLAN 体系与基本概念 →
本章导读:小区保安记不住每张脸,但可以定一张规则表逐条比对——这是 ACL。路由策略更进一步:不光决定放不放行,还能改属性影响全网选路。两者的共同点是——配错了通常不报错,只是静默不生效。
本章结构:
- 17.1 功能原理与业务场景 —— ACL(对数据报文)与路由策略(对路由条目)的本质区别对照表:作用对象、调用点、匹配依据全不同
- 17.2 华为设备配置详解 —— 配前三个问题(这 ACL 给谁用/默认动作/匹配顺序)、四个模板(高级 ACL 包过滤、时间范围 ACL、前缀列表 + route-policy 控制 OSPF→BGP 重发布、策略路由 PBR)、route-policy 的 node 与
if-match匹配动作四个进阶要点 - 17.3 H3C 设备配置详解 —— 华为与 H3C 的核心差异总结,外加一次完整的策略设计演练
- 17.4 命令对照表 —— 两家并排
- 17.5 配置验证 ——
display acl逐条看匹配计数,是唯一的真相来源 - 17.6 排错与故障树 —— “先撤掉所有 ACL 试试” → 查匹配计数 → 查**通配符掩码(反掩码)**写没写反 → 查时间范围与设备时钟
- 17.7 新手踩坑 —— 反掩码写反、以为 route-policy 没匹配上会默认放行(实际是最终拒绝)
- 17.8 流量镜像(端口镜像) —— 排障的"眼睛":镜像 ≠ 阻断、方向 inbound/outbound/both 怎么选(排障永远用 both)、VLAN Tag 带不带、华为
observe-port与 H3Cmirroring-group两套配置、万兆镜像到千兆口会丢包 - 17.9 本章小结 —— 要点清单 + 自测题
重点提示:业务不通又找不到原因,直接按 17.6 第 1 步"撤掉 ACL 试试",一刀切下去就能判定是不是 ACL 的事。第二条铁律:filter-policy 不影响直连路由,route-policy 没命中任何 node 就是拒绝——这两条记不住,时间全花在怀疑人生上。如果 ACL 排查完还是不通,就去 17.8 配镜像抓包——它是判断"报文到底发没发出去、回没回来"的唯一直接证据。
关联章节:ACL 常出现在 NAT(第 14 章)、包过滤和路由过滤里,机制在本章;filter-policy 用在 OSPF/BGP 上见第 11、12 章;防火墙的安全策略是 ACL 思路的进阶版(第 26、27 章);端口侧的流量控制见第 9 章。
17.1 功能原理与业务场景
17.1.1 这功能是干嘛的(通俗版)
一个小区有几千户人家,门口保安不可能记住每户每个人的脸,但他可以先定几条规则:本小区业主刷卡进、外卖员登记后进、快递员只许在工作时间进 3 号楼、装修队周一至周五 9 点到 18 点能进、其他一律不让进。保安不是靠"记住谁",而是靠一张规则表 + 逐条比对来干活。
访问控制列表(ACL,Access Control List)就是这张规则表。它由若干条规则组成,每条规则描述"什么样的报文算匹配",并给出"匹配后是放行(permit)还是拒绝(deny)"。设备收到一个报文,就从上到下逐条比对,命中哪条就按哪条处理,后面的不再看。
路由策略(Routing Policy)则是在此基础上更进一步:它不只决定"放不放行",还能决定"要不要改"。就像保安不只能拦人,还能给符合条件的访客换个胸牌颜色、指定走哪个门——路由策略可以给路由改属性(改优先级、加 AS 路径、打团体属性),从而影响整个网络怎么选路。
17.1.2 在网络里怎么落地(设计视角)
先分清两个容易混的概念:ACL 是"包过滤的规则表",路由策略是"路由信息的加工流水线"。两者用的匹配工具(ACL、前缀列表)有重叠,但作用对象完全不同:
| 对比项 | ACL | 路由策略(route-policy / route-map) |
|---|---|---|
| 作用对象 | 数据报文(经过设备的流量) | 路由条目(协议之间交换的路由信息) |
| 典型调用点 | 接口 packet-filter、traffic-filter、NAT、安全策略 |
路由协议重发布、BGP 邻居策略、策略路由 |
| 匹配依据 | 源/目的 IP、协议号、端口、MAC、VLAN | 目的网段、掩码长度、路由属性、下一跳 |
| 动作 | permit / deny | permit / deny + apply 改属性 |
| 出问题的现象 | 业务不通 | 路由不通、选路异常、路由环 |
按匹配能力,华为与 H3C 的 ACL 都分成三个大类,编号区间是硬规矩,写错区间设备会直接报错:
| 类别 | 编号区间 | 能匹配什么 | 典型用途 |
|---|---|---|---|
| 基本 ACL | 2000~2999 | 源 IP 地址 | NAT 圈定内网网段、简单放行 |
| 高级 ACL | 3000~3999 | 源/目的 IP、协议号、源/目的端口、TCP 标志等 | 精细包过滤、策略路由匹配 |
| 二层 ACL | 4000~4999 | 源/目的 MAC、以太网类型、VLAN ID 等 | 按 MAC 做接入控制 |
| 用户自定义 ACL | 5000~5999 | 按报文偏移量自取字段 | 特殊协议识别(少用) |
规则匹配有几条铁律,先记住再往下看:
- 自上而下逐条匹配,命中即停。所以"精确的规则放前面、宽泛的规则放后面"。
- 匹配顺序有两种模式:配置顺序(config)和自动排序(auto)。自动排序按"精度"重排规则,容易让人误判,新手一律用配置顺序,看到的顺序就是生效的顺序。
- 末尾隐含一条"拒绝所有"。所以只写 permit 规则时,没被匹配到的流量会被丢掉——这是最常见的"配了 ACL 反而全断"的原因。
- ACL 被引用后才有意义。建了 ACL 没人调用,等于没建;调用点决定它是过滤报文还是过滤路由。
再往下,路由策略的核心工具是前缀列表(ip-prefix)。它和 ACL 的区别是:ACL 只能匹配"地址范围",前缀列表能同时匹配"网段 + 掩码长度范围",比如"只匹配掩码长度在 24 到 28 之间的 192.168.0.0/16 的子网"。这个能力在路由过滤里非常关键。
本章的典型落地场景有三个,后面每节都会用到:
- 场景一:限制某个部门只能访问特定的服务器端口(高级 ACL + 接口过滤)。
- 场景二:OSPF 重发布进 BGP 时只允许特定网段、并给路由打上团体属性(前缀列表 + route-policy)。
- 场景三:内网两条出口链路,让某个网段强制走其中一条(策略路由 PBR)。
适用版本:华为 VRP V200R019 及以上(S5700/AR6000 系列);H3C Comware V7(R2610 及以上)。
17.2 华为设备配置详解
17.2.0 配置前必须先想清楚的三件事
在敲第一条 acl number 之前,先把下面三个问题回答清楚。这三个问题想不明白,配出来的 ACL 一定是"看着对、就是不生效"。
问题一:这个 ACL 到底给谁用。同一个 acl number 3000,挂在接口 traffic-filter 上就是"过滤经过的报文",被 nat outbound 引用就是"圈定哪些源地址要被翻译",被 traffic classifier 引用就是"挑出哪些报文要走特殊路径"。ACL 本身不带"用途",用途由调用点决定。所以设计的第一句话应该写成"我要在 GE0/0/1 的入方向,把办公网访问服务器区的流量按端口放行或拒绝"——而不是"我要建一个 ACL 3000"。前者能落地,后者容易配完就忘。
问题二:默认动作想清楚了吗。ACL 末尾隐含一条"拒绝所有",这件事有两个方向的后果:如果你想要的是"白名单"(只放行某些,其余拒),那正好,写几条 permit 就完事;如果你想要的是"黑名单"(只拒绝某些,其余放),那必须自己补一条 rule permit ip 兜底,否则全断。新手十次"配了 ACL 就全断",八次是没有兜底规则、两次是通配符掩码写反。
问题三:匹配顺序和规则精度怎么排。规则是自上而下、命中即停,所以原则是"精确在前、宽泛在后"。但这里有个进阶陷阱:如果两条规则都能匹配同一个报文,而你在中间插入了一条新规则,新规则的位置决定它能不能生效。生产环境维护 ACL 的正确做法是规则序号留间隔(5、10、15、20……而不是 1、2、3),将来要插规则时正好有号可用,不用推倒重排。
17.2.1 命令行基础速览(本章会用到的那几条)
华为的 ACL 命令在 VRP V200R019 之后有一段过渡:老写法是 acl number 3000 然后进 [HUAWEI-acl-adv-3000] 视图,新写法是 acl name XXX advance。两种都能用,本章统一用老写法(兼容性最好),并在差异处标注。
| 用途 | 华为命令 | 说明 |
|---|---|---|
| 建基本 ACL | acl number 2000 |
进 acl-basic-2000 视图 |
| 建高级 ACL | acl number 3000 |
进 acl-adv-3000 视图 |
| 建二层 ACL | acl number 4000 |
进 acl-link-4000 视图 |
| 建命名 ACL | acl name BLOCK_FTP advance |
名字替代编号,便于维护 |
| 配规则 | rule 5 permit source 192.168.10.0 0.0.0.255 |
rule 后的数字是规则序号 |
| 接口调用过滤 | traffic-filter inbound acl 3000 |
接口视图下 |
| 时间范围 | time-range WORK_TIME 08:00 to 18:00 working-day |
系统视图下 |
| 前缀列表 | ip ip-prefix PERMIT_WEB index 10 permit 192.168.20.0 24 |
系统视图下 |
| 路由策略 | route-policy RP_WEB permit node 10 |
进 route-policy 视图 |
| 路由过滤 | filter-policy ip-prefix PERMIT_WEB export |
协议视图下 |
| 策略路由 | traffic behavior + traffic policy + traffic-policy |
三个视图配合 |
17.2.2 完整配置模板
模板一:高级 ACL 做包过滤。需求:办公网 192.168.10.0/24 只允许访问服务器区 192.168.20.10 的 Web(80)和邮件(25、110)端口,其他访问服务器的流量全部拒绝,但允许访问互联网。
# 进入系统视图
system-view
sysname HUAWEI
# 创建高级 ACL 3000,按配置顺序匹配
acl number 3000
match-order config
# 规则 5:先放行到邮件服务器的 25 端口
rule 5 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 25
# 规则 10:放行到邮件服务器的 110 端口
rule 10 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 110
# 规则 15:放行到 Web 服务器的 80 端口
rule 15 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 80
# 规则 20:拒绝办公网访问服务器区的其他所有流量
rule 20 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
# 规则 30:其余流量放行(含访问互联网)
rule 30 permit ip
quit
# 在内网接口入方向调用
interface GigabitEthernet0/0/1
traffic-filter inbound acl 3000
quit
save
模板二:时间范围 ACL。需求:只在工作日 8:00~18:00 允许访客网段访问内网办公服务器,下班后一律禁止。
# 先定义时间范围:工作日 8:00~18:00,关键字 working-day 两家通用
time-range WORK_TIME 08:00 to 18:00 working-day
time-range OFF_HOUR 18:00 to 08:00 daily
# 在 ACL 规则上引用时间范围
acl number 3001
rule 5 permit tcp source 172.16.5.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 443 time-range WORK_TIME
rule 10 deny ip source 172.16.5.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 20 permit ip source 172.16.5.0 0.0.0.255
quit
# 挂到接口
interface GigabitEthernet0/0/2
traffic-filter inbound acl 3001
quit
时间范围依赖设备时钟,先配 NTP 或手工改时间,否则规则永远匹配不上或一直匹配,这是时间 ACL 最隐蔽的坑。
模板三:前缀列表 + route-policy 控制 OSPF 到 BGP 的重发布。需求:OSPF 内部有 192.168.0.0/16 下的很多子网,重发布进 BGP 时只允许掩码长度 16~28 的网段,且给这些路由打上团体属性 65001:100。
# 前缀列表:允许 192.168.0.0/16 下掩码 16 到 28 的网段
ip ip-prefix PERMIT_LAN index 10 permit 192.168.0.0 16 less-equal 28
# 加一条精确拒绝,防止后面漏项
ip ip-prefix PERMIT_LAN index 20 deny 0.0.0.0 0 less-equal 32
# 路由策略:只 permit,动作是打团体属性
route-policy RP_TO_BGP permit node 10
if-match ip-prefix PERMIT_LAN
apply community 65001:100
quit
# BGP 里引用这个策略做重发布过滤
bgp 65001
peer 172.16.0.1 as-number 65002
import-route ospf 1 route-policy RP_TO_BGP
peer 172.16.0.1 advertise-community
quit
save
模板四:策略路由 PBR。需求:192.168.10.0/24 的流量强制走链路 A(GigabitEthernet0/0/2,下一跳 172.16.1.1),其余流量按路由表走。
# 用 ACL 匹配需要特殊走法的源网段
acl number 3010
rule 5 permit ip source 192.168.10.0 0.0.0.255
quit
# 流量行为:指定下一跳
traffic behavior BEHAVIOR_TO_ISP_A
redirect ip-nexthop 172.16.1.1
quit
# 流量分类:关联 ACL
traffic classifier CLASS_TO_ISP_A operator or
if-match acl 3010
quit
# 流量策略:把分类和行为绑起来
traffic policy POLICY_TO_ISP_A
classifier CLASS_TO_ISP_A behavior BEHAVIOR_TO_ISP_A
quit
# 在入接口上调用
interface GigabitEthernet0/0/1
traffic-policy POLICY_TO_ISP_A inbound
quit
save
17.2.3 逐行讲解
| 命令 | 作用 | 新手常填错的地方 |
|---|---|---|
acl number 3000 |
建高级 ACL | 编号写到 2000 区间就只能匹配源地址,后面的 destination 直接报错 |
match-order config |
声明按配置顺序匹配 | 不写默认也是 config,但写明能防止后续维护时有人改乱 |
rule 5 permit tcp ... destination-port eq 80 |
精确放行 | 端口写错了不报错,只是不放行;用 display acl all 看匹配计数定位 |
rule 30 permit ip |
兜底放行 | 漏了这条,末尾隐含 deny 会把互联网访问也一起断掉 |
time-range WORK_TIME 08:00 to 18:00 working-day |
定义时间范围 | 设备时钟不对时规则形同虚设,先 display clock |
ip ip-prefix X index 10 permit 192.168.0.0 16 less-equal 28 |
匹配网段和掩码长度 | 不写 less-equal 就只能匹配 /16 这一个网段,这是 prefix-list 最大的陷阱 |
route-policy RP permit node 10 |
建路由策略节点 | node 号是从小到大执行的,中间空号方便插队 |
if-match ip-prefix X |
匹配条件 | 一个 node 里写多个 if-match 是"与"关系 |
apply community 65001:100 |
改属性 | BGP 里还必须 peer ... advertise-community,否则团体属性不传出 |
redirect ip-nexthop |
PBR 指定下一跳 | PBR 优先于路由表,配错会导致流量黑洞 |
关于 route-policy 的几条细节,必须一次讲透:
node 与匹配动作的关系。每个 node 其实有四种状态:permit 匹配上、permit 没匹配上、deny 匹配上、deny 没匹配上。行为完全不同——permit 匹配上就等于"最终放行并改属性";permit 没匹配上就去看下一个 node;deny 匹配上等于"最终拒绝";deny 没匹配上也是看下一个 node。所以写 permit node 10 + deny node 20 + permit node 30 是常见套路,但如果所有 node 都没匹配上,最终结果是拒绝——这一点很多人以为"没匹配上就默认放行",那就全错了。
show 的顺序。路由策略里 if-match 是"与",同一个 node 里写两个 if-match ip-prefix 就要求两个都满足,几乎不可能命中。想表达"或",得写两个 node。
关于 filter-policy。它是在协议层面过滤路由:export 过滤发出去的,import 过滤收进来的。filter-policy ip-prefix X export 的语义是"只发匹配 X 的路由",注意是"只发匹配的",没有写允许的默认是拒绝。
一条重要提醒:filter-policy 与 route-policy 的"默认动作"方向不同。filter-policy 配了之后是"允许匹配的,拒绝其余";route-policy 是所有 node 都不匹配时"拒绝"。两者都不写兜底规则时,前者会把路由过滤得只剩匹配项、后者会把路由全滤掉。
17.2.4 route-policy 的四个进阶要点
要点一:if-match 的多种类型可以组合,但要分清"与"和"或"。同一个 node 内多条 if-match 是"与",跨 node 是"或"。举例:想表达"匹配 192.168.20.0/24 且下一跳是 172.16.0.1"用一条 node 里写两个 if-match;想表达"匹配 192.168.20.0/24 或者掩码长度等于 32"就用两个 node。写错的表现是"策略配了但路由一条没变"或者"策略把不该过滤的路由滤掉了",都很难凭肉眼发现。
要点二:apply 的执行时机。apply 只有在 node 的动作是 permit 且匹配成功时才执行;deny 节点里的 apply 是不执行动作直接拒绝。这一点在写"黑名单 + 改属性"的组合时要小心,你无法在 deny 节点里顺便改点东西再放行。
要点三:ip-prefix 与 ACL 的选择。能用前缀列表就别用 ACL 做路由过滤。原因是 ACL 的 rule permit ip source 192.168.0.0 0.0.255.255 只能匹配地址范围,无法限制掩码长度,所以它会同时放行 192.168.0.0/16、192.168.20.0/24、192.168.20.30/32 全部路由——在路由过滤里这几乎一定是错的。前缀列表天然带"掩码长度"维度,是路由过滤的正确工具。
要点四:策略验证的"三段式"。一是策略挂上了没有(在协议视图 display this 里能看到 import-route ospf 1 route-policy RP_TO_BGP);二是重发布进来的路由有没有带上属性(display bgp routing-table 看 Community 列);三是邻居收到没有(在对端设备上看 display bgp peer verbose 的路由收发计数,收到了但没有生效往往是下一跳不可达)。
下面这一段是完整的属性验证命令,配完就敲一遍,别等出问题再补:
# 查看重发布进 BGP 的路由与属性
display bgp routing-table
# 只看带指定团体属性的路由
display bgp routing-table community 65001:100
# 查看对端邻居的收发路由数量与状态
display bgp peer verbose
验收标准三句话:挂载点对、命中计数涨、业务现象符合预期。缺一条都不算配完。
17.3 H3C 设备配置详解
H3C Comware V7 的 ACL 与路由策略与华为高度同构,主要差异在命令视图名字和参数写法上。最容易记串的三处:H3C 用 acl basic / acl advanced(华为用 acl number),H3C 的 route-policy 里匹配前缀列表用 if-match ip-prefix 但前缀列表命令是 ip prefix-list(多一个空格),H3C 的策略路由用 qos policy 而不是 traffic policy。
模板一:高级 ACL 做包过滤(与华为完全同一需求):
# 进入系统视图
system-view
sysname H3C
# 创建高级 ACL 3000
acl advanced 3000
rule 5 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 25
rule 10 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 110
rule 15 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 80
rule 20 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 30 permit ip
quit
# 在内网接口入方向调用,H3C 用 packet-filter
interface GigabitEthernet1/0/1
packet-filter 3000 inbound
quit
save force
模板二:时间范围 ACL。H3C 用 time-range 直接定义名称与时段,工作日关键字与华为一样写 working-day(单数,两家的官方示例都是单数):
# 定义工作日 8 点到 18 点的时间范围
time-range WORK_TIME 08:00 to 18:00 working-day
# 在规则上引用
acl advanced 3001
rule 5 permit tcp source 172.16.5.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 443 time-range WORK_TIME
rule 10 deny ip source 172.16.5.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 20 permit ip source 172.16.5.0 0.0.0.255
quit
interface GigabitEthernet1/0/2
packet-filter 3001 inbound
quit
⚠ 版本差异:
time-range <名字> <起> to <止> working-day这个写法华为与 H3C 一致,关键字都是working-day(单数)。这方面两家没有差异,别被网上的二手资料误导成「H3C 要用复数」。 出处:
- H3C:01-ACL配置 原文
[DeviceA] time-range work 08:0 to 18:00 working-day;01-ACL配置(V7 另一版本) 原文Device time-range work 08:00 to 18:00 working-day。两处官方示例均为单数。- 华为:ACL 配置命令 原文
time-range test 8:00 to 18:00 working-day。 结论:两家都写working-day,本章原稿曾误写为working-days(复数)并声称「写单数会报错」,已按官方原文更正。
模板三:前缀列表 + route-policy 控制重发布。H3C 的前缀列表命令是 ip prefix-list,匹配时用 index:
# 前缀列表:允许 192.168.0.0/16 下掩码 16 到 28 的网段
ip prefix-list PERMIT_LAN index 10 permit 192.168.0.0 16 less-equal 28
# 兜底拒绝,防止默认放行
ip prefix-list PERMIT_LAN index 20 deny 0.0.0.0 0 less-equal 32
# 路由策略:H3C 的 node 视图里用 if-match ip-prefix
route-policy RP_TO_BGP permit node 10
if-match ip-prefix PERMIT_LAN
apply community 65001:100
quit
# BGP 中引用
bgp 65001
address-family ipv4 unicast
peer 172.16.0.1 as-number 65002
peer 172.16.0.1 enable
import-route ospf 1 route-policy RP_TO_BGP
peer 172.16.0.1 advertise-community
quit
quit
save force
模板四:策略路由 PBR。H3C V7 走的是 QoS 框架:traffic classifier + traffic behavior + qos policy,接口下 qos apply policy 调用。
# 用 ACL 匹配需要特殊走法的源网段
acl advanced 3010
rule 5 permit ip source 192.168.10.0 0.0.0.255
quit
# 流量行为:指定下一跳
traffic behavior BEHAVIOR_TO_ISP_A
redirect next-hop 172.16.1.1
quit
# 流量分类
traffic classifier CLASS_TO_ISP_A operator or
if-match acl 3010
quit
# QoS 策略:把分类和行为绑起来
qos policy POLICY_TO_ISP_A
classifier CLASS_TO_ISP_A behavior BEHAVIOR_TO_ISP_A
quit
# 在入接口上调用
interface GigabitEthernet1/0/1
qos apply policy POLICY_TO_ISP_A inbound
quit
save force
H3C 另外还提供一套 policy-based-route(策略路由)体系,结构与华为的 traffic policy 不同,更接近"路由策略"的写法:
# 定义策略路由节点:匹配 ACL 3010 的流量,把下一跳指到 172.16.1.1
policy-based-route PBR_LOCAL permit node 10
if-match acl 3010
apply next-hop 172.16.1.1
quit
# 在接口上应用(处理该接口收到的报文)
interface GigabitEthernet1/0/1
ip policy-based-route PBR_LOCAL
quit
注意 H3C 有两套策略路由,视图与命令都不一样,别混用:
| 体系 | 配置骨架 | 接口应用命令 | 适用 |
|---|---|---|---|
| QoS 框架 | traffic classifier + traffic behavior + qos policy |
qos apply policy X inbound |
通用,本章模板四用的就是这套 |
| 策略路由框架 | policy-based-route X permit node N + apply next-hop |
ip policy-based-route X |
写法更短,适合简单改下一跳 |
出处:H3C《07-策略路由配置》原文示例——
[SwitchA] policy-based-route aaa permit node 5/[SwitchA-pbr-aaa-5] apply next-hop 1.1.2.2/[SwitchA] interface vlan-interface 11/[SwitchA-Vlan-interface11] ip policy-based-route aaa,见 H3C 07-策略路由配置 、H3C 08-策略路由配置 。
⚠ 版本差异:H3C 的
policy-based-route与华为的"本地策略路由"(policy-based-route)命令名相近但细节不同;H3C V7 的接口应用命令是ip policy-based-route <名字>。V5 老设备提示:V5 里策略路由同样是policy-based-route体系。
一个必须知道的华为侧行为:
redirect ip-nexthop指定的下一跳如果 ARP 学不到,报文会按原始转发路径走,重定向静默不生效——这是华为官方配置注意事项里写明的。所以 PBR 配完一定用tracert验证实际路径,而不是只看配置存在。 出处:华为 redirect ip-nexthop 命令参考 、通过流策略实现策略路由 验证命令已核实:display traffic policy与display traffic-policy applied-record两条命令都存在(华为命令参考 IS-IS/QoS 章节索引中均列出)。出处:NetEngine AR1000V V300R021 命令参考 。 time-range 周期关键字已核实:华为官方命令参考全文中出现的关键字为working-day(3 次)、daily(20 次)、off-day(2 次);working-days(复数)出现 0 次——再次印证两家都用单数。本章用到的working-day与daily均已在官方示例中出现。出处同上一行。
17.3.1 华为 H3C 核心差异总结
把上面四个模板逐条对照,能看出两家的设计哲学差别:华为把"包过滤"和"策略路由"分成两套独立体系(traffic-filter 和 traffic policy),H3C 则把策略路由并入 QoS 框架(qos policy)。这不是谁对谁错,是两家的产品演进路径不同。给零基础读者的实用建议是:先把华为那套学会,因为它的概念模型更清晰;学 H3C 时重点记三个替换:traffic-filter → packet-filter、traffic policy → qos policy、traffic-policy → qos apply policy。
三者的对应关系还可以再往下拆一层:华为的 traffic classifier 对应 H3C 的 traffic classifier,两者语法几乎一样,都是 operator or / operator and 加 if-match;华为的 traffic behavior 对应 H3C 的 traffic behavior,差别只在 redirect 后面的参数写法。真正不同构的是最外层:华为叫"流量策略(traffic policy)",挂在接口上用 traffic-policy;H3C 叫"QoS 策略(qos policy)",挂在接口上用 qos apply policy。所以从华为转 H3C 的人,最容易在最后一步"挂不上去"上卡住——前面的分类、行为、策略都建对了,就是接口上那条命令想不起来。
另外还有两个容易忽略的差异:
第一,ACL 规则的默认动作。两家都是"末尾隐含拒绝",但华为在 display acl 输出里会显式打印一条 rule 1000 deny ip 之类的隐含规则(具体编号视版本),H3C 有些版本不打印。所以看 H3C 的 display acl 时没看到拒绝规则,不代表没有拒绝。
第二,路由策略的默认动作。两家都是"所有 node 都不匹配 = 拒绝",但 H3C 的 route-policy 在部分版本里允许配 apply 动作但不写 if-match 时表现为全匹配,这点在写"给所有路由打团体属性"的规则时格外要注意——华为要求 if-match 才生效,H3C 有的版本不写就是匹配全部。
17.3.2 一次完整的策略设计演练
把上面四个模板串起来,看一个真实场景怎么从需求走到配置。需求:某公司有办公网 192.168.10.0/24、研发网 192.168.11.0/24、访客网 172.16.5.0/24、服务器区 192.168.20.0/24,双出口接入两家运营商,要求:
- 研发网访问服务器区不受限,办公网只能访问服务器的 80/443,访客网工作时间内可访问服务器的 443;
- 所有访问互联网的流量,办公网走运营商 A,研发网走运营商 B;
- 服务器区的网段只允许向运营商宣告,不允许向内网其它网段泄漏。
逐条拆解成设备配置:
# 第一步:访客网只允许在工作时间访问 443,其余拒绝
time-range WORK_TIME 08:00 to 18:00 working-day
acl number 3001
rule 5 permit tcp source 172.16.5.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 443 time-range WORK_TIME
rule 10 deny ip source 172.16.5.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 20 permit ip source 172.16.5.0 0.0.0.255
quit
# 第二步:办公网只能访问服务器的 80/443
acl number 3002
rule 5 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 destination-port eq 80
rule 10 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 destination-port eq 443
rule 15 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 20 permit ip
quit
# 第三步:两个出口的流量分类,办公网走 A、研发网走 B
acl number 3010
rule 5 permit ip source 192.168.10.0 0.0.0.255
quit
acl number 3011
rule 5 permit ip source 192.168.11.0 0.0.0.255
quit
# 第四步:两条策略路由,分别指定下一跳
traffic behavior TO_ISP_A
redirect ip-nexthop 172.16.1.1
quit
traffic behavior TO_ISP_B
redirect ip-nexthop 172.16.2.1
quit
traffic classifier CLS_A operator or
if-match acl 3010
quit
traffic classifier CLS_B operator or
if-match acl 3011
quit
traffic policy PBR_DUAL
classifier CLS_A behavior TO_ISP_A
classifier CLS_B behavior TO_ISP_B
quit
# 第五步:服务器区路由只向单方向发布,用前缀列表精确限定
ip ip-prefix SRV_ONLY index 10 permit 192.168.20.0 24
ip ip-prefix SRV_ONLY index 20 deny 0.0.0.0 0 less-equal 32
# 第六步:接口上调用
interface GigabitEthernet0/0/1
traffic-filter inbound acl 3001
traffic-filter inbound acl 3002
quit
interface GigabitEthernet0/0/3
traffic-policy PBR_DUAL inbound
quit
save
这个演练要说明三件事。第一,同一个接口可以挂多个 ACL,前提是它们针对的流量互不重叠,否则第一条命中即停的规则会吞掉后面的判定。第二,策略路由只影响"从哪个口出去",不影响"这个报文能不能进来"——能不能进来靠 traffic-filter,两者要分开设计。第三,前缀列表的双向兜底(一条 permit + 一条 deny 所有)是路由过滤的安全带,永远两条一起写。
17.4 华为 / H3C 命令对照表
| 功能 | 华为(VRP) | H3C(Comware V7) | 差异说明 |
|---|---|---|---|
| 建基本 ACL | acl number 2000 |
acl basic 2000 |
视图名不同 |
| 建高级 ACL | acl number 3000 |
acl advanced 3000 |
视图名不同 |
| 建二层 ACL | acl number 4000 |
acl layer2-acl 4000 |
视图名不同 |
| 配规则 | rule 5 permit tcp source ... destination-port eq 80 |
同左 | 基本一致 |
| 接口包过滤 | traffic-filter inbound acl 3000 |
packet-filter 3000 inbound |
命令名与参数顺序都不同 |
| 时间范围 | time-range X 08:00 to 18:00 working-day |
time-range X 08:00 to 18:00 working-day |
相同(两家都用单数) |
| 前缀列表 | ip ip-prefix X index 10 permit ... |
ip prefix-list X index 10 permit ... |
词序与连字符 |
| 路由策略 | route-policy X permit node 10 |
route-policy X permit node 10 |
相同 |
| 匹配前缀列表 | if-match ip-prefix X |
if-match ip-prefix X |
相同 |
| 路由过滤 | filter-policy ip-prefix X export |
filter-policy ip-prefix X export |
相同 |
| 策略路由-行为 | traffic behavior → redirect ip-nexthop |
traffic behavior → redirect next-hop |
关键字略有差别 |
| 策略路由-调用 | traffic-policy X inbound |
qos apply policy X inbound |
框架不同 |
| 策略路由体系 | 华为用 traffic policy(无 plan-based-route 主推) |
policy-based-route X permit node N + 接口 ip policy-based-route X |
H3C 独有的一套短写法 |
17.5 配置验证
ACL 是否生效,看匹配计数是最硬的证据。华为用 display acl all:
display acl all
期望看到每条规则后面有匹配计数在增长:
Basic ACL 3000, 5 rules
Acl's step is 5
rule 5 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq www (128 matches)
rule 20 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 (37 matches)
rule 30 permit ip (1021 matches)
重点看三个数字:放行规则有匹配、拒绝规则有匹配、兜底规则有匹配,说明 ACL 真的在起作用而且规则顺序是对的。如果拒绝规则的计数是 0,多半是前面的放行规则把流量都吸走了。
接口上调用得对不对,用 display current-configuration interface 看:
display current-configuration interface GigabitEthernet0/0/1
期望输出里有 traffic-filter inbound acl 3000 这一行。H3C 上对应 packet-filter 3000 inbound。
验证时间范围是否生效,先看时钟再等一会儿看计数:
# 确认设备时间在时间范围内
display clock
# 再看 ACL 匹配计数,时间范围外计数应该不增长
display acl 3001
验证前缀列表,用 display ip ip-prefix(H3C 是 display ip prefix-list):
display ip ip-prefix PERMIT_LAN
期望看到 index 10 permit 192.168.0.0/16 greater-equal 16 less-equal 28 这样的展开描述——注意这里必须同时出现 greater-equal 和 less-equal,只写 less-equal 时设备会把 greater-equal 默认成前面的前缀长度 16。
验证路由策略是否真的改了属性,去邻接的路由表里看:
display bgp routing-table community
期望能看到从本端发出的路由带有 65001:100 团体属性。如果看不到,先查 advertise-community 有没有配。
验证策略路由生效,用 tracert 从内网 PC 出去,看第一条跳是不是 172.16.1.1,而不是按路由表算出的下一跳。
17.6 排错与故障树
ACL 和路由策略的排错有一个共同的致命问题:配置错了通常不报错,只是静默不生效。所以必须靠"匹配计数 + 逐段抓包"来定位。故障树如下:
现象:某个业务不通
├─ 1. 先把 ACL 全部撤掉试试
│ └─ 撤掉就通了 → 100% 是 ACL 问题,往下走
├─ 2. 看 ACL 匹配计数
│ ├─ 所有规则计数都不涨 → ACL 没被调用 / 调错了接口 / 方向反了
│ └─ 某条规则计数暴涨 → 规则顺序或匹配条件写错
├─ 3. 检查通配符掩码
│ ├─ 0.0.0.255 表示前 24 位固定、后 8 位任意(想成"反掩码"就不会错)
│ └─ 写反了 → 匹配范围完全不对,计数会异常
├─ 4. 检查时间范围
│ ├─ display clock 看设备时间对不对
│ └─ 时间范围外的规则永远不匹配
└─ 5. 路由类问题单独走查
├─ filter-policy 只在协议层面生效,不影响直连路由
├─ route-policy 没匹配上 = 最终拒绝(不是默认放行)
└─ BGP 团体属性要 advertise-community 才传出
| 症状 | 可能原因 | 排查命令 |
|---|---|---|
| 配了 ACL 后业务全断 | 忘了写末尾 permit,被隐含拒绝 |
display acl all |
| ACL 规则计数一直是 0 | 没在接口调用 / 调用方向反了 | display current-configuration interface |
| 本该拒绝的流量被放行 | 放行规则写太宽且排在前面 | display acl all 看顺序 |
| 时间范围 ACL 从不生效 | 设备时钟不对 | display clock |
| 前缀列表只匹配了一个网段 | 忘了 less-equal |
display ip ip-prefix |
| 重发布后路由全没了 | filter-policy 把不匹配的都拒了 |
display bgp routing-table |
| 团体属性传不过去 | 没配 advertise-community |
display bgp routing-table community |
| 策略路由配了没效果 | 接口方向错 / 优先级被其他策略覆盖 | tracert + display traffic policy |
通配符掩码陷阱要展开说。这是新手最常错的一处。ACL 里写的 0.0.0.255 是通配符掩码(wildcard mask),不是子网掩码。它的语义是"该位为 0 表示必须匹配,为 1 表示不关心"。所以 192.168.10.0 0.0.0.255 的意思是"前 24 位必须等于 192.168.10,最后 8 位任意",等价于 192.168.10.0/24。而 192.168.10.0 255.255.255.0 的意思是"前 8 位固定、后 24 位任意",等于匹配了 192.x.x.x 整个 A 类范围——这个错误极难从配置文件表面看出来,只能靠计数和 ping 定位。
一个隐蔽的坑:ACL 的空规则。新建的 ACL 里如果只有 permit 没有 deny,末位隐含拒绝所有。但如果只有一条 deny ip 没有 permit,那就是拒绝所有。更隐蔽的是,引用一个空 ACL(一条规则都没有)时,行为取决于调用点的实现:有些版本空 ACL 等于"全放行"(因为没有任何规则匹配,走隐含规则之前的判定逻辑),有些版本等于"全拒绝"。所以永远不要引用空 ACL。
怎么一眼看出 ACL 规则顺序错了。用一个简单的判据:去查匹配计数最大的那条规则是哪条。正常设计里,匹配计数最大的应该是兜底的 permit ip(它要兜住所有上网流量),其次是精确的放行规则。如果某条 deny 的计数排在最前面、而且远超其他规则,基本可以断定它排在了本该放行的规则前面,或者它的通配符范围写得过大。这个判据不需要抓包、不需要登到 PC 上,一条 display acl all 就能得到结论,是现场排查最快的招。
抓包是最后手段,但不是唯一手段。设备上还有几个不花钱的辅助手段:一是 display traffic-filter applied-record,能直接列出"哪个接口的哪个方向调用了哪个 ACL",一次看清全部挂载点,避免漏挂或重挂;二是 reset counters interface 之后观察接口出入方向和丢包计数,能判断包是被丢了还是根本没来;三是策略路由场景下,从内网 PC 上 tracert 到外网,第一条跳即是实际出口,比看配置文件直观得多。
四类典型现象与结论对照表,现场有个这张表就能少走弯路:
| 现象 | 高度怀疑 | 一句话验证 |
|---|---|---|
| 配完 ACL 全网立断 | 缺兜底 permit 或通配符写反 | display acl all 看末条与计数分布 |
| 个别 PC 不通、同类 PC 通 | ACL 里有基于源地址的精确规则 | 对比两台 PC 的源 IP 与规则范围 |
| 特定端口不通、ping 通 | 高级 ACL 只放行了协议没放行端口 | 查 destination-port 那几条规则 |
| 只有某个时段不通 | 时间范围 + 时钟不对 | display clock 与 display time-range all |
17.7 新手踩坑与注意事项
- 用子网掩码当通配符用——
0.0.0.255才是掩码 24,255.255.255.0是翻了个天,错误极难发现。 - 忘写末尾 permit——ACL 末尾隐含拒绝,只写 deny 规则等于把对应的流量全部拒掉,包括本该放行的。
- ACL 建了没调用——建完 ACL 一定要在接口或其它功能里引用,否则它只是一张纸。
- 调用方向搞反——
inbound是"从接口进来的方向",outbound是"从接口出去的方向",改完配置务必用计数验证。 - 编号区间写错——基本 ACL 里写
destination会直接报错,反过来高级 ACL 用rule permit source x只匹配源地址时行为正确但容易被误读,建议一律用高级 ACL。 - 时间范围写了但设备时间不对——先配 NTP,
display clock确认时区与时间都正确。 - 前缀列表不加
less-equal——这是路由过滤的头号杀手,导致"过滤后只剩一条路由"。 - route-policy 没匹配上就当放行——错,没匹配上最终是拒绝,必须有兜底 node。
- BGP 团体属性没加
advertise-community——本地打上了标记,邻居收不到。 - 策略路由与路由表打架——PBR 优先级高于路由表,配了 PBR 的那部分流量不再看路由表,写完必须 tracert 验证一遍。
- 改 ACL 时直接删规则——删掉一条 permit 后底下的 deny 会立刻生效,业务可能瞬间全断,改前先
display截图。 - 不同版本的默认匹配顺序不同——有的版本 auto 排序会打乱,一律显式写
match-order config。 - ACL 规则只增不删——历史规则越堆越多,最后没人敢动。正确做法是每次变更都同步更新注释和归档,一年清理一次。
- 在交换机上做策略路由期待"所有流量都改走"——PBR 只对入方向调用的那部分流量有效,回程流量仍然按路由表走,单向策略路由会导致回包走另一条链路。要么两边都配,要么改用路由层面的方案(改优先级、改 cost)。
- 把 ACL 当成表来"读"而不当成流程来"跑"——看配置时要在脑子里从上往下走一遍报文,先问"这个源 IP 会命中第几条",才能看出顺序问题。
17.8 流量镜像(端口镜像)
17.8.1 这功能是干嘛的(通俗版)
你怀疑家里的水管漏水,但管子埋在墙里看不见。怎么办?在管子上接一个三通阀,把水复制一份引到一个桶里,你在桶那儿慢慢观察——水照样往原来的方向流,你只是多了一份"样本"。
流量镜像(Port Mirroring / Mirrored Traffic)就是给网络接口接一个"三通阀"。交换机把某个接口进出的报文原样复制一份,从另一个指定接口送出去,你在那个接口上接一台装了 Wireshark 的电脑,就能看到全量报文。
三个关键点先记住:
- 镜像 ≠ 阻断。它只是复制,不影响原流量的转发。想拦流量得用上一节讲过的 ACL。
- 镜像 ≠ 抓本机。你在自己电脑上抓包,只能抓到发给你的、以及广播报文;镜像能让你看到"别人的流量"——这才是它能做排障和审计的原因。
- 镜像有成本。复制出来的报文一样占带宽,配不好还会把业务拖慢。
三大用途:
| 用途 | 典型场景 | 关注点 |
|---|---|---|
| 抓包排障 | 用户说"上不了网",抓包看是没发出去还是没回包 | 双向镜像、时间戳准确 |
| 流量分析 | 接 IDS/态势感知/流量探针,做安全检测和流量画像 | 大流量、需要专用设备 |
| 合规审计 | 记录敏感访问行为,留存举证 | 长时间镜像、存储容量 |
17.8.2 核心概念
先分清四个角色,这是配镜像最容易搞混的地方:
| 概念 | 华为术语 | H3C 术语 | 说明 |
|---|---|---|---|
| 被监控的口 | 源端口(镜像口) | 源端口(mirroring-port) | 你要观察流量的那个口 |
| 接分析设备的口 | 观察端口 | 目的端口(monitor-port) | Wireshark/探针插这里 |
| 镜像的方向 | inbound / outbound / both | inbound / outbound / both | 只抓进、只抓出,还是都抓 |
| 镜像组 | observe-port 索引 | mirroring-group | 一组源+目的的绑定关系 |
方向怎么选,这是新手第一个大坑:
| 方向 | 抓什么 | 典型用途 |
|---|---|---|
inbound |
只有从外部进入该端口的报文 | 看"用户发上来什么" |
outbound |
只有从该端口发出去的报文 | 看"设备回给用户什么" |
both |
进出都抓 | 排障首选,因为只看一半经常判断不出问题 |
举个具体的:用户投诉"网页打不开",如果你只抓 inbound,你会看到用户的 TCP SYN 包发出去了;但你看不到服务器有没有回 SYN-ACK。只抓一半,就断不了案。所以排障第一动作永远是 both。
VLAN 标签行为。这是第二个大坑。镜像出来的报文到底带不带 VLAN Tag?
| 厂商 | 默认行为 | 说明 |
|---|---|---|
| 华为 | 观察口配置里有个 untag-packet 参数控制 |
需要按分析设备能否识别 Tag 来决定 |
| H3C | 取决于目的端口对镜像 VLAN 的成员属性 | 官方文档要求把目的端口加入镜像 VLAN |
如果分析设备(比如普通 PC 上的 Wireshark)不认 VLAN Tag,你抓到的报文可能显示不出正常的 IP 层;反之,如果你需要看到 Tag 来判断 VLAN 问题,就必须保留 Tag。这一点必须在上线前确认,配错了现象是"能抓到包但解析不出来"。
17.8.3 华为设备配置详解
华为的端口镜像分两步:先定义观察端口(全局),再在源端口上引用它。
第一步:定义观察端口。在系统视图下配,给这个"三通阀"分配一个索引号:
# 进入系统视图
system-view
sysname HUAWEI
# 定义观察端口 1:把 GigabitEthernet0/0/24 作为镜像出口
observe-port 1 interface GigabitEthernet0/0/24
官方命令格式是 observe-port [ observe-port-index ] interface interface-type interface-number,索引号可省(省了默认 1)。
第二步:在源端口上开启镜像。进到要被监控的那个接口,指定抓哪个方向:
# 监控 GigabitEthernet0/0/1,双向抓包
interface GigabitEthernet0/0/1
port-mirroring to observe-port 1 both
quit
官方格式:port-mirroring to observe-port observe-port-index { both | inbound | outbound }。
一个完整例子(监控接入口的同时,把镜像从 24 口送给分析机):
system-view
sysname HUAWEI
# 1) 定义观察端口(接分析电脑的口)
observe-port 1 interface GigabitEthernet0/0/24
# 2) 在要监控的接入口上开启双向镜像
interface GigabitEthernet0/0/1
port-mirroring to observe-port 1 both
quit
# 3) 一次监控多个口:重复第 2 步即可,多个源端口可以共享同一个 observe-port
interface GigabitEthernet0/0/2
port-mirroring to observe-port 1 both
quit
save
第三步(进阶):流镜像——只镜像"符合条件"的流量
上面的做法是"整个口全抓",流量大的时候会给观察口造成巨大压力。如果只想看"某个网段访问某个服务器的流量",就要用流镜像(ACL 方式),思路和上一节的 traffic policy 完全一样:
# 1) 用高级 ACL 圈出要镜像的流量(复用 17.2 讲过的高级 ACL)
acl number 3000
rule 5 permit tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 80
quit
# 2) 定义流量行为:动作为"镜像到观察端口 1"
traffic behavior MIRROR_WEB
mirror to observe-port 1
quit
# 3) 定义流量分类:匹配上面那条 ACL
traffic classifier CLASS_WEB operator or
if-match acl 3000
quit
# 4) 组装成流量策略
traffic policy POLICY_MIRROR
classifier CLASS_WEB behavior MIRROR_WEB
quit
# 5) 在源端口入方向调用
interface GigabitEthernet0/0/1
traffic-policy POLICY_MIRROR inbound
quit
流行为里的命令格式是 mirror to observe-port { both | inbound | outbound }(不带方向时按配置位置决定)。
第四步:验证
# 看观察端口配在哪、参数是什么
display observe-port
# 看各接口的镜像关系
display port-mirroring
# 看流镜像(ACL 方式)的实际生效情况,能看到命中计数
display traffic-applied interface GigabitEthernet0/0/1 inbound
display observe-port 的典型输出(注意 Untag-packet 和 Forwarding 两行,它们决定了镜像报文带不带 Tag、观察口是否还做正常转发):
----------------------------------------------------------------------
Index : 1
Untag-packet : No
Forwarding : No
Interface : GigabitEthernet0/0/2
Vlan : 10
出处:
observe-port [ observe-port-index ] interface interface-type interface-number、port-mirroring to observe-port observe-port-index { both | inbound | outbound }:华为命令参考(references/huawei/EDOC1100333406.txt、EDOC1100420127.txt等,VRRP/镜像相关章节)mirror to observe-port { both | inbound | outbound }与display observe-port、display traffic-applied输出样例:references/huawei/EDOC1000069579.txt(Sx300 典型配置案例,第 46999~47010 行附近)display port-mirroring:多份命令参考中出现(references/huawei/共 65 处)
17.8.4 H3C 设备配置详解
H3C 的组织方式和华为不同:不单独定义"观察端口",而是先建一个"镜像组",再往组里填源端口和目的端口。
本地镜像组配置(最常用):
# 进入系统视图
system-view
sysname H3C
# 1) 创建本地镜像组 1
mirroring-group 1 local
# 2) 指定源端口及方向(可一次写多个端口)
mirroring-group 1 mirroring-port gigabitethernet 1/0/1 gigabitethernet 1/0/2 both
# 3) 指定目的端口(接分析设备的口)
mirroring-group 1 monitor-port gigabitethernet 1/0/24
save force
官方还推荐一个动作:在目的端口上关闭 STP。原因很实在——目的端口只往外发镜像报文、不参与正常转发,让它参与生成树计算没有意义,还可能因为 BPDU 处理影响镜像:
# 在目的端口上关闭生成树(H3C 官方配置举例中的做法)
interface GigabitEthernet 1/0/24
undo stp enable
quit
接口视图下的另一种写法(当源端口/目的端口分散时更好用):
# 在接口视图里把自己指定为镜像组 1 的源端口
interface GigabitEthernet 1/0/1
mirroring-group 1 mirroring-port both
quit
# 在接口视图里把自己指定为镜像组 1 的目的端口
interface GigabitEthernet 1/0/24
mirroring-group 1 monitor-port
quit
H3C 的流镜像:思路和华为一样(分类→行为→策略→应用),但行为里的命令不同——华为是 mirror to observe-port 1,H3C 是 mirror-to interface <接口名>:
# 1) 流分类:匹配要镜像的流量
traffic classifier tech_c operator or
if-match acl 3000
quit
# 2) 流行为:动作为"镜像到指定接口"
traffic behavior tech_b
mirror-to interface gigabitethernet 1/0/3
quit
# 3) QoS 策略:把分类和行为绑起来
qos policy tech_p
classifier tech_c behavior tech_b
quit
# 4) 应用到接口入方向
interface GigabitEthernet 1/0/1
qos apply policy tech_p inbound
quit
验证:
# 看所有镜像组的配置(官方配置举例中最常用的验证命令)
display mirroring-group all
H3C 官方命令参考中
display mirroring-group还支持按组号或按类型查看(如display mirroring-group <组号>),但本章语料(references/h3c/下的镜像配置文档)中只出现了display mirroring-group all这一种写法,故正文只给这一条;需要按组查看时以设备display mirroring-group ?补全为准。
display mirroring-group all 的典型输出:
Mirroring group 1:
Type: Local
Status: Active
Mirroring port:
GigabitEthernet1/0/1 Both
GigabitEthernet1/0/2 Both
Monitor port: GigabitEthernet1/0/3
重点看三行:Type 应为 Local(远程镜像会是 Remote Source/Remote Destination)、Status 应为 Active(不是 Inactive)、Mirroring port 后面的 Both 就是方向。
出处:
mirroring-group group-id local、mirroring-group group-id mirroring-port interface-list { both | inbound | outbound }、mirroring-group group-id monitor-port interface-list、display mirroring-group { group-id | all | local }:H3C 07-镜像配置 、H3C 11-镜像配置 (已存为references/h3c/2083533_mirror_cfg.txt、2754346_mirror_cfg.txt)- 接口视图写法
[DeviceC-GigabitEthernet1/0/2] mirroring-group 2 monitor-port、目的端口undo stp enable:同上文档的远程目的镜像组示例- 流镜像
mirror-to interface gigabitethernet 1/0/3与display mirroring-group all输出样例:同上
17.8.5 华为 / H3C 命令对照表
| 功能 | 华为(VRP) | H3C(Comware V7) | 差异说明 |
|---|---|---|---|
| 定义镜像出口 | observe-port 1 interface Gi0/0/24 |
无此独立步骤,并入镜像组 | 架构差异:华为"先定口再引用",H3C"先建组再填口" |
| 创建镜像组 | 隐含在 observe-port 里(索引号即组号) |
mirroring-group 1 local |
H3C 显式建组 |
| 配源端口 | 进接口视图 port-mirroring to observe-port 1 both |
mirroring-group 1 mirroring-port Gi1/0/1 both |
华为在源口上配,H3C 在系统视图配(也可在接口视图) |
| 配目的端口 | 并入 observe-port 命令 |
mirroring-group 1 monitor-port Gi1/0/24 |
H3C 单独一条 |
| 方向参数 | both / inbound / outbound |
both / inbound / outbound |
相同 |
| 流镜像行为 | mirror to observe-port 1 |
mirror-to interface Gi1/0/3 |
关键字不同(mirror to vs mirror-to;观察口 vs 直接写接口) |
| 流镜像框架 | traffic classifier + traffic behavior + traffic policy + traffic-policy |
traffic classifier + traffic behavior + qos policy + qos apply policy |
与本章前面讲的一致 |
| 祖断目的口 STP | 无此要求 | 官方示例建议 undo stp enable |
H3C 特有建议 |
| 查看配置 | display observe-port、display port-mirroring |
display mirroring-group all |
命令名不同 |
| 查看流镜像生效 | display traffic-applied interface Gi0/0/1 inbound |
display qos policy interface |
命令名不同 |
| 保存 | save |
save force |
H3C 免交互 |
两个最该记的差异:
- 组织方式不同。华为是"全局定义观察口 1 → 多个源口引用它";H3C 是"建镜像组 1 → 往组里填源和目的"。逻辑上等价,但配置的先后顺序和视图完全不同,抄配置必翻车。
- 流镜像的关键字:华为
mirror to observe-port <索引>,H3Cmirror-to interface <接口名>。注意 H3C 是连字符mirror-to,华为是空格mirror to。
17.8.6 典型场景与注意事项
场景一:排障抓包(最常用)
用户投诉某台 PC 上不了网。标准动作:找到这台 PC 接的接入交换机端口 → 双向镜像到观察口 → 笔记本接观察口开 Wireshark → 让用户重现问题。抓到的报文能直接回答三个问题:请求发出去了吗?(inbound 有包)服务器回了吗?(outbound 有包)回的什么错?(看 TCP RST / ICMP 不可达)。
场景二:接安全探针/态势感知
IDS 需要看全流量。这时镜像口要接专用设备,而且要注意带宽匹配。
场景三:合规审计
需要在出口镜像所有上网流量做留存。这类场景对带宽和存储的要求都高,通常配合抽样比率使用。
六个必须知道的坑:
-
观察口绝不能同时当业务口用。如果观察口上还跑着业务,镜像流量会和业务流量混在一起发出去,把企业网的正常转发打乱。华为的
display observe-port输出里那个Forwarding : No就是在说"这个口不做正常转发"。观察口必须是空闲口。 -
带宽不匹配会大量丢包。如果你镜像一个万兆口到千兆观察口,万兆流量灌进千兆口,超出部分直接丢弃,你抓到的包是残缺的——排障时据此得出的结论可能完全错误。镜像前先算:源口峰值流量是多少?观察口和 Wireshark 机器的接收能力够不够?
-
镜像方向配反,什么都抓不到。想抓"用户发上来的请求"却配了
outbound,结果只有一个方向,看起来像"没抓到包"。排障一律先用both。 -
VLAN Tag 行为没对齐,抓到了但解析不出来。上线前先用几条 ping 验证一下 Wireshark 能不能正常解析。
-
堆叠/IRF 环境下跨设备镜像。华为 iStack/CSS 与 H3C IRF 都可以跨成员口镜像,但需要确认型号支持,且镜像流量会在堆叠线缆上传输、占用堆叠带宽。跨设备镜像前先查产品文档的限制。
-
镜像叠加流策略可能互相影响。同一个口既配了流量策略又配了端口镜像时,两者可能都生效、也可能有优先级关系,具体要看产品实现。配之前先想清楚"我到底要全抓还是要抓一部分":
| 需求 | 用什么 | 理由 |
|---|---|---|
| 排障看全貌 | 端口镜像(port-mirroring / mirroring-group) |
全流量,不遗漏 |
| 只看特定业务 | 流镜像(ACL 方式) | 省观察口带宽 |
| 长时间监控 | 流镜像 + 抽样 | 降低设备负载 |
七个常见故障对应的排查方向:
| 现象 | 可能原因 | 怎么查 |
|---|---|---|
| 观察口一个包都抓不到 | 源口没配镜像 / 观察口接错口 | display observe-port 确认接口名 |
| 只抓到一个方向 | 方向配成了 inbound 或 outbound | 改成 both |
| 抓到包但解析不出来 | VLAN Tag 行为不匹配 | 看 Untag-packet 配置 |
| 抓到的包有大量缺失 | 观察口带宽不足或线路丢包 | 对比源口流量与观察口速率 |
| 配了镜像后业务变慢 | 观察口被当成业务口用了 | 确认观察口空闲 |
H3C 上 display mirroring-group 显示 Inactive |
源口或目的口没配全 | 补齐源+目的两个必配项 |
| 流镜像不生效 | ACL 没匹配上 / 策略调用方向错 | display traffic-applied 看命中计数 |
适用版本:华为 VRP V200R019 及以上(S5700/S6700 系列,
observe-port/port-mirroring语法以交换机产品线为准,路由器产品线命令可能不同);H3C Comware V7(R2610 及以上)。⚠ 待核实:待核实 华为路由器产品线(AR 系列)的端口镜像命令与交换机是否一致(本章命令以 S 系列交换机文档为准,路由器可能使用不同的观察口配置方式),以及 S 系列不同版本中
observe-port索引号的取值范围
⚠ 待核实:待核实 华为 iStack/CSS 与 H3C IRF 环境下跨成员设备镜像的具体配置方式与型号限制,本章仅给出风险提示未给配置
17.9 本章小结
- ACL 是"规则表 + 逐条比对 + 命中即停",末尾隐含拒绝;路由策略是"匹配 + 改属性",所有 node 都不匹配时最终拒绝。
- 基本 ACL 只匹配源 IP(2000
2999),高级 ACL 匹配五元组(30003999),二层 ACL 匹配 MAC/VLAN(4000~4999),编号区间写错直接报错。 - 通配符掩码是"反着写"的掩码,
0.0.0.255=/24,这是新手最容易踩的坑。 - 前缀列表比 ACL 多一个"掩码长度范围"能力,用
less-equal/greater-equal表达,过滤路由必学。 - 华为用
traffic-filter做包过滤、traffic policy做策略路由;H3C 用packet-filter做包过滤、qos policy做策略路由。 - 验证的硬证据永远是"匹配计数",配置写得再对,计数不涨就是没生效。
一套可以照抄的 ACL 命名与维护规范。给新手一个能长期不乱的工程习惯,比记住一百条命令更有用:
| 项目 | 建议写法 | 理由 |
|---|---|---|
| 命名 | ACL_<用途>_<方向>,如 ACL_OFFICE_TO_SRV_IN |
看名字就知道挂在哪、干什么 |
| 规则序号 | 5、10、15、20 留间隔 | 将来插规则不用重排 |
| 注释 | 每 5 条规则上方写一行 description |
半年后接手的人(很可能是你自己)能看懂 |
| 匹配顺序 | 显式 match-order config |
不给版本差异留机会 |
| 兜底 | 白名单必写 permit ip,黑名单必写 deny ip 倒数第二条 |
让默认动作显式化 |
| 变更 | 改前 display acl all 截图,改后立刻验证 |
删除一条 permit 会导致后续 deny 立刻生效 |
一个完整的排错示例,把本章工具串起来。现象:某部门反映"打印机能 ping 通但打不出来"。这个故障一次用到了 ACL 与策略两类工具,值得完整走一遍。
第一步,别急着登设备,先在 PC 上确认现象边界:ping 打印机IP 通,说明三层可达、ACL 没拦 ICMP;telnet 打印机IP 9100 不通,说明 9100(打印端口)这个 TCP 连接建不起来。此时已经能定位到"某条 ACL 只放行了 ICMP 没放行 9100"或"策略路由把打印流量导到了错误路径"。
第二步,在网关设备上查 ACL 的匹配计数:
# 看哪条规则吃掉了打印流量
display acl all
如果 9100 那次连接对应的规则计数一直是 0,说明报文根本没走到这条 ACL,问题在策略路由或路由层面,不在 ACL;如果某条 deny 的计数在涨,那就是它拦的,直接检查该规则前后顺序。
第三步,如果 ACL 计数不涨,就去看策略路由把流量导到了哪儿:
# 华为:看接口上应用的流量策略
display traffic-policy applied-record
# 从 PC 上 tracert 到打印机,看实际走的下一跳
tracert 的首跳如果与路由表算出来的不一致,就是 PBR 在起作用。到这里问题就清楚了:要么补一条 ACL 放行 9100,要么调整 PBR 的匹配范围。
这个例子想说明的是:ACL 与策略路由都会"静默"改变流量的命运,唯一的可靠线索是匹配计数和实际路径。配的时候多写一行注释、改的时候多看一眼计数,比事后翻配置文件省力得多。
自测题
rule permit ip source 192.168.10.0 0.0.255.255这条规则匹配的是哪个范围?它和192.168.10.0 0.0.0.255有什么本质区别?- 一个 ACL 里只有三条 permit 规则,没有 deny 规则,会有什么后果?
- 前缀列表
ip ip-prefix TEST permit 192.168.0.0 16 less-equal 24能匹配192.168.5.0/24吗?能匹配10.0.0.0/8吗?为什么? - 华为和 H3C 分别用什么命令在接口上调用 ACL 做包过滤?
- 为什么说"route-policy 所有 node 都没匹配上 = 拒绝"?这对写策略有什么影响?
- 匹配的是
192.168.0.0 ~ 192.168.255.255这个大范围(前 16 位固定);192.168.10.0 0.0.0.255才是只匹配192.168.10.0/24。区别在于通配符掩码的位含义:0 表示必须匹配、1 表示任意。 - 没被三条 permit 规则匹配到的流量会撞上末尾隐含的 deny,被立即丢弃,表现为"配了 ACL 反而全断"。
- 能匹配
192.168.5.0/24(在 192.168.0.0/16 下且掩码 24 恰好等于 less-equal 上限);不能匹配10.0.0.0/8,因为前缀不在 192.168.0.0/16 范围内。 - 华为
traffic-filter inbound acl 3000;H3Cpacket-filter 3000 inbound。 - 因为 route-policy 的隐含默认动作是 reject,所以任何一类路由如果想被放行,必须至少要有一个 node 能匹配到它,否则会被静默丢弃。实践里要写专门的 permit 兜底 node。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/17/。
如有其它需要,请邮件联系!版权所有,违者必究!