第23篇:端口镜像——用镜像抓包排查故障
一、写在前面
排查网络故障时,最有效的手段之一就是抓包分析。但在交换机环境中,你不能随便把抓包软件装到交换机上,也不能直接拔线插到 PC 上抓包。
端口镜像(Port Mirroring) 就可以解决这个问题:将交换机某个端口(源端口)的流量复制一份,发送到另一个端口(目的端口),你在目的端口接上 PC 用 Wireshark 抓包分析。
二、端口镜像的应用场景
| 场景 | 说明 |
|---|---|
| 故障排查 | 用户报上不了网,镜像用户端口抓包分析 ARP/DHCP 过程 |
| 协议分析 | 分析 OSPF/BGP 邻居建立过程 |
| 安全监控 | 把流量镜像到 IDS/IPS 设备做入侵检测 |
| 性能分析 | 镜像出口流量分析带宽占用 |
| 合规审计 | 记录特定端口的通信内容 |
三、华为交换机端口镜像配置
3.1 本地镜像(最常用)
拓扑:
交换机
G0/0/1 G0/0/24
│ │
PC-A PC-抓包
(源端口) (观察端口)
需求:把 PC-A(G0/0/1)的收发流量镜像到 G0/0/24,在 PC-抓包上用 Wireshark 抓包。
配置:
[SW1] observe-port 1 interface gigabitethernet 0/0/24 ← 定义观察端口
# 方式一:镜像到端口(基于端口)
[SW1] interface gigabitethernet 0/0/1
[SW1-GigabitEthernet0/0/1] port-mirroring to observe-port 1 both
# both = 收+发双向;inbound = 只镜像接收;outbound = 只镜像发送
# 方式二:镜像到 CPU
[SW1] interface gigabitethernet 0/0/1
[SW1-GigabitEthernet0/0/1] port-mirroring to cpu
3.2 验证
[SW1] display port-mirroring
---------------------------------------------------------------------
Mirroring:
Observe-port 1 : GigabitEthernet0/0/24
---------------------------------------------------------------------
GigabitEthernet0/0/1 mirror to observe-port 1 (both)
---------------------------------------------------------------------
3.3 抓包操作
- 在 PC-抓包上打开 Wireshark
- 选择对应的网卡
- 应用过滤条件(如
arp或icmp或ip.addr==10.0.10.1) - 在 PC-A 上执行 ping / 打开网页
- 观察抓包结果
四、远程端口镜像(RSPAN)
4.1 适用场景
本地镜像只能在同一台交换机上,如果源端口和观察端口不在同一台交换机,就需要 RSPAN(Remote Switched Port Analyzer)。
Trunk
[SW1] ──────── [SW2]
G0/0/1 G0/0/24
│ │
PC-A PC-抓包
(镜像源) (观察口)
4.2 配置 RSPAN
# SW1(源端交换机)
[SW1] vlan 100
[SW1-vlan100] remote-span ← 设为 RSPAN VLAN
[SW1] interface gigabitethernet 0/0/1
[SW1-GigabitEthernet0/0/1] port-mirroring to remote-vlan 100 ← 镜像到 RSPAN VLAN
# 中间交换机(如果有多跳)只需让 Trunk 允许 RSPAN VLAN
[SW1] interface gigabitethernet 0/0/24
[SW1-GigabitEthernet0/0/24] port trunk allow-pass vlan 100
# SW2(目的端交换机)
[SW2] vlan 100
[SW2-vlan100] remote-span
[SW2] observe-port 1 interface gigabitethernet 0/0/24
[SW2] vlan 100
[SW2-vlan100] observe-port 1 interface gigabitethernet 0/0/24 ← 从 RSPAN VLAN 提取到观察口
注意:RSPAN VLAN 不能用于普通数据转发,只作为镜像流量的"传输通道"。
五、流镜像(Flow-Based Mirroring)
5.1 适用场景
端口镜像会把端口上所有流量都复制一遍,在流量很大时会给观察端口造成压力。如果只想镜像特定流量(比如只想看 PC-A 访问某个服务器的流量),就用流镜像。
5.2 配置
# 定义 ACL 匹配目标流量
[SW1] acl 3000
[SW1-acl-adv-3000] rule 5 permit ip source 10.0.10.1 0 destination 192.168.1.100 0
# 配置流行为:镜像
[SW1] traffic behavior mirror1
[SW1-behavior-mirror1] mirroring to observe-port 1
# 配置流策略绑定
[SW1] traffic policy capture
[SW1-policy-capture] classifier acl 3000 behavior mirror1
# 应用在镜像源端口(入方向)
[SW1] interface gigabitethernet 0/0/1
[SW1-GigabitEthernet0/0/1] traffic-policy capture inbound
只镜像 PC-A(10.0.10.1)到服务器(192.168.1.100)的流量,其他流量不镜像。
六、使用 Wireshark 分析抓包
6.1 常用过滤表达式
| 过滤表达式 | 说明 |
|---|---|
arp |
只看 ARP 报文 |
icmp |
只看 Ping 报文 |
ip.addr==10.0.10.1 |
只看该 IP 的流量 |
tcp.port==80 |
只看 HTTP 流量 |
dns |
只看 DNS 查询/响应 |
dhcp |
只看 DHCP 交互 |
!arp && !icmp |
排除 ARP 和 ICMP |
6.2 抓包排查常见场景
场景:PC 获取不到 IP 地址
# 镜像 PC 端口
filter: dhcp or arp
# 观察 DHCP 四步交互是否完整:
# DHCP Discover → DHCP Offer → DHCP Request → DHCP ACK
# 如果只有 Discover 没有 Offer → DHCP 服务器不可达
# 如果有 Offer 但没有 Request → PC 网卡问题
场景:Ping 丢包
# 镜像两端端口
filter: icmp
# 观察:
# Request 发出但无 Reply → 对端没收到或没回复
# Request 和 Reply 都有但间隔大 → 路径延迟
# 有重复的 Request → 网络中有环路
七、注意事项
| 注意事项 | 说明 |
|---|---|
| 观察端口不转发数据 | 镜像目的端口被占用,不能同时做业务口 |
| 镜像增加 CPU 负载 | 大量镜像会增加交换机 CPU 占用 |
| 1 个观察口可接收多个源 | 一个 observe-port 可以对应多个源端口 |
| 不要镜像 Trunk 全量 | 会复制所有 VLAN 的流量,数据量很大 |
| 不要一直开着 | 排查完记得关掉,避免影响性能 |
关闭镜像
[SW1] interface gigabitethernet 0/0/1
[SW1-GigabitEthernet0/0/1] undo port-mirroring to observe-port 1
八、思考
- 端口镜像会把源端口的流量复制一份到观察端口,原端口的流量会受影响吗?
- 本地镜像和 RSPAN 的区别是什么?什么场景要用 RSPAN?
- 观察端口本身还能作为业务端口使用吗?为什么?
- 流镜像比端口镜像好在哪?什么场景用流镜像?
- RSPAN 中为什么要定义一个专门的 VLAN?
- 写一个完整的用例:你收到用户报"上网慢",请写出从镜像到抓包到分析的完整排查步骤。
下篇预告:第24篇《堆叠Stack与集群Cluster基础概念》——理解堆叠和集群技术的基本概念和应用场景。