1. 项目缘起为什么要在核心交换机上远程抓包在数据中心或者大型企业网里做运维最头疼的莫过于定位一些偶发性的、难以复现的网络问题。比如业务部门突然反馈某个关键应用访问时快时慢或者监控系统偶尔报出几个丢包告警但等你登录设备查看一切指标又都恢复了正常。这种“幽灵”问题往往需要抓取流量包进行深度分析才能找到根因——是某个服务器的TCP重传异常还是特定应用协议交互出了问题亦或是网络设备自身有bug。传统的抓包方式比如在服务器上装个Wireshark或者在接入层交换机上做端口镜像在很多场景下都力不从心。服务器抓包只能看到本机的流量视角太窄而接入层交换机的镜像又无法捕捉到核心交换层内部或者跨设备流转的流量。这时候直接在核心交换机上抓包就成了最直接有效的手段。华为CE系列交换机尤其是像CE6865这样的数据中心级核心交换机本身就内置了强大的流量镜像和抓包功能。但问题来了CE6865这种设备通常部署在核心机房运维人员不可能每次都跑到机房去接电脑、敲命令。所以“远程抓包”这个需求就变得非常刚性。我们需要一套方法能够从办公网络甚至互联网通过安全通道远程登录到交换机在不中断业务、不影响性能的前提下精准地抓取到我们想要的流量并把抓包文件拿回来分析。这不仅仅是敲几个命令那么简单它涉及到访问控制、镜像策略、性能影响评估、文件传输等一系列环节。接下来我就结合多次在CE6865上的实战经验把远程抓包的完整流程、核心命令、以及那些容易踩坑的细节给大家掰开揉碎了讲清楚。2. 远程访问与基础环境准备远程抓包的第一步是得能安全、稳定地登录到交换机。对于CE6865我们通常通过SSHv2协议进行管理。确保交换机的管理接口通常是MEth0/0/0或某个三层VLANIF接口已经配置了IP地址并且与你的运维网络路由可达。2.1 SSH连接与用户权限确认使用SSH客户端如SecureCRT、Xshell或Linux/Mac下的终端连接交换机。这里有个关键点用于抓包操作的账号必须具备足够的权限。display users命令可以查看当前登录用户及其权限级别。HUAWEI display users User-Intf Delay Type NetworkAddress AuthenStatus AuthorcmdFlag VTY 0 00:00:03 SSH 10.1.1.100 Authen-success 15注意AuthorcmdFlag字段它代表了用户的命令级别。华为交换机命令级别从0到1515是最高级。抓包相关的命令如capture-packet通常需要3级或以上权限。如果你的账号权限不够需要让管理员在AAA视图下调整你的用户级别或者使用super命令提权如果知道高级别密码。注意生产环境强烈建议使用独立的、权限精细划分的运维账号并为抓包这类高危操作设置专门的权限模板避免使用超级管理员账号进行日常操作这是安全运维的基本要求。2.2 理解CE6865的抓包能力边界在开始前我们必须清楚CE6865抓包功能的底层原理和限制这决定了我们方案的可行性和对业务的影响。CE6865的抓包功能本质是基于交换芯片的流量镜像Mirroring。它可以将指定端口、VLAN或ACL匹配的流量复制一份送到一个叫做“观察端口”Observe-port的地方。而我们的抓包工具正是从这个观察端口获取数据。CE6865支持两种主要的镜像方式本地端口镜像将设备上某个端口的流量镜像到本设备另一个指定端口观察端口。这是我们远程抓包最常用的方式。远程端口镜像RSPAN将流量镜像到一个特殊的VLANRemote-probe VLAN通过三层网络传递到远端的观察设备。这适用于跨设备集中抓包但配置更复杂。对于远程抓包我们通常采用“本地端口镜像管理网口抓包”或“本地端口镜像虚拟观察口”的方案。CE6865有一个非常实用的特性它支持将管理网口MEth0/0/0或某个环回口Loopback作为观察端口。这意味着我们不需要额外占用业务光口直接通过管理通道就能抓到镜像流量。性能影响评估镜像和抓包会消耗交换机的CPU和内存资源尤其是当镜像的流量非常大如万兆端口线速流量时。CE6865作为高端交换机处理能力很强但对于长时间、大流量的抓包仍需谨慎。一个基本原则是尽量精确地使用ACL来过滤只抓取问题相关的流量而不是镜像整个端口的所有流量。例如如果问题只涉及IP为10.2.2.100的服务器那么镜像时就应该用ACL只匹配这个IP从而将抓包对设备性能的影响降到最低。3. 核心抓包方案一基于管理口MEth的镜像与抓包这是最直接、对现有业务拓扑零影响的方案。它的思路是在交换机内部将业务端口的流量镜像到管理口MEth0/0/0然后我们通过SSH连接在交换机本地启动抓包进程将管理口上收到的镜像流量保存为文件。3.1 配置流量镜像会话首先我们需要创建一个镜像会话。假设我们要监控业务端口10GE1/0/1的入方向inbound流量并将其镜像到管理口MEth0/0/0。system-view # 创建一个名为remote_cap的镜像会话 observe-port 1 interface MEth0/0/0 # 配置镜像规则将10GE1/0/1入方向流量镜像到观察组1 interface 10GE1/0/1 port-mirroring to observe-port 1 inbound quit关键参数解析observe-port 1 interface MEth0/0/0定义编号为1的观察端口是MEth0/0/0。这个编号是本地有效的。port-mirroring to observe-port 1 inbound在业务端口视图下将入方向流量镜像到观察端口组1。inbound表示进入该端口的流量outbound表示从该端口发出的流量both是双向。为了精准定位问题通常先从inbound或outbound开始。3.2 启动本地抓包并保存文件镜像配置好后流量已经开始复制到MEth口。但MEth口本身也是一个三层接口如果它配置了IP并启用了路由这些镜像过来的二层数据包会被它丢弃因为目的MAC不匹配。所以我们需要在交换机上启动一个“捕包”进程直接从驱动层抓取MEth口上的原始数据包。CE6865使用capture-packet命令进行抓包。我们需要指定抓包的接口、过滤条件、保存的文件名和大小。# 在用户视图下执行 HUAWEI capture-packet interface MEth0/0/0 ? acl Specify ACL number or name for filtering packets destination-file Specify the destination file for saving packets limit-captured-frames Limit the number of captured frames limit-frame-size Limit the length of captured frames limit-time Limit the time for capturing packets一个完整的抓包命令示例HUAWEI capture-packet interface MEth0/0/0 destination-file flash:/cap.pcap limit-frame-size 1514 limit-captured-frames 10000 Info: The capture-packet command is being executed. To stop it, press CTRLC. Capturing...Press CTRLC to stop.这条命令的含义是在MEth0/0/0接口上抓包将抓到的包保存到交换机的flash:存储根目录下文件名为cap.pcap。limit-frame-size 1514表示抓取完整的以太网帧1514字节不含CRC。limit-captured-frames 10000表示最多抓1万个包后自动停止。如果不加这个参数会一直抓下去直到你手动CTRLC停止或者文件系统满这非常危险。3.3 传输抓包文件到本地分析抓包停止后文件cap.pcap保存在交换机的Flash中。我们需要将其传输到本地电脑上用Wireshark分析。常用的方法有FTP和SCP。使用SCP传输推荐更安全 首先确保你的电脑有SCP客户端如Linux/Mac的scp命令或WinSCP软件。假设交换机管理IP是192.168.1.1用户名为admin。在本地电脑的终端执行scp admin192.168.1.1:flash:/cap.pcap ./Desktop/输入密码后文件就会下载到本地桌面。使用FTP传输 需要在交换机上启用FTP服务器功能并配置用户和目录权限步骤相对繁琐且FTP是明文传输安全性不如SCP。除非环境限制否则不建议在生产环境使用。实操心得抓包前务必确认存储空间使用dir flash:命令查看Flash剩余空间。一个包含1万个完整数据包的pcap文件可能达到十几MB。如果空间不足抓包会失败甚至可能影响设备运行。使用ACL进行精准过滤在capture-packet命令中通过acl参数过滤能极大提升效率。例如只抓源IP为10.2.2.100的流量capture-packet interface MEth0/0/0 acl 3000 destination-file flash:/targeted_cap.pcap。这里acl 3000需要提前在系统视图下配置好例如acl 3000; rule 5 permit ip source 10.2.2.100 0。控制抓包时长和大小除了用limit-captured-frames控制包数量还可以用limit-time 120控制抓包时间为120秒。这对于抓取偶发性问题非常有用可以设置一个较长的定时抓包然后等待问题发生。抓包进程管理使用display capture-packet查看当前运行的抓包任务信息。如果发现抓包命令异常卡住或无法停止可以尝试切换到其他VTY终端或者使用undo capture-packet all强制停止所有抓包任务。4. 核心抓包方案二使用虚拟观察口与ERSPAN增强灵活性方案一虽然简单但有一个潜在问题管理口MEth的带宽通常只有100M或1G。如果镜像的万兆业务流量突发很大可能会超过MEth的处理能力导致丢包抓到的数据就不完整。此时我们可以考虑方案二使用虚拟观察口。4.1 创建虚拟观察口Virtual Observe PortCE6865支持创建一种特殊的虚拟接口作为观察端口这个接口不占用物理资源但能将镜像流量在设备内部“喂给”抓包进程。system-view # 创建一个虚拟观察口编号为2 observe-port 2 # 将业务流量镜像到这个虚拟观察口 interface 10GE1/0/1 port-mirroring to observe-port 2 inbound quit4.2 从虚拟观察口抓包创建后我们可以直接对这个虚拟观察口进行抓包无需绑定物理接口。HUAWEI capture-packet observe-port 2 destination-file flash:/virtual_cap.pcap limit-captured-frames 5000这个方案的优点是消除了物理带宽瓶颈。镜像流量直接在交换芯片和CPU之间的内部通道传输带宽上限更高更适合抓取高速流量。缺点是抓包文件依然只能保存在设备本地后续仍需传输。4.3 进阶ERSPAN实现流量远程封装回传如果我们希望抓包文件能直接发送到远端的抓包服务器比如部署了Wireshark或专业分析工具的服务器可以使用ERSPANEncapsulated Remote SPAN功能。这相当于把镜像流量用GRE隧道封装起来通过三层网络发送到指定目的地。配置步骤较为复杂在抓包服务器上配置一个网卡并设置IP。需要安装能解码ERSPAN流量的软件如较新版本的Wireshark或使用Linux的erspan内核模块。在CE6865上system-view # 配置ERSPAN目的地址抓包服务器IP和源地址交换机某个Loopback口IP erspan destination-ip 192.168.100.100 source-ip 10.255.255.1 # 创建ERSPAN会话并绑定镜像源 erspan session 1 destination-ip 192.168.100.100 source-ip 10.255.255.1 # 指定镜像的流量这里用ACL 3000匹配 mirror-to session 1 acl 3000 quit在抓包服务器上直接抓取接收网卡的流量就能看到被GRE封装的原始数据包。Wireshark可以自动解封装ERSPAN头部。ERSPAN功能强大可以实现流量的跨网络、集中式采集。但它对设备版本有要求且配置和排错复杂度较高一般用于有固定运维分析平台的场景。对于临时性的问题排查方案一和方案二更快捷。5. 实战排错一次典型的远程抓包故障定位过程理论讲完了我们来看一个真实案例。业务反馈在每天上午10点左右访问核心数据库IP: 10.10.10.10的应用会出现短暂延迟。怀疑是网络问题。5.1 制定抓包策略数据库服务器连接在CE6865的10GE1/0/10端口上。我们决定在问题可能发生的时间段抓取该端口入方向即发往数据库的请求的流量。 为了减少数据量我们配置ACL只抓取去往数据库10.10.10.10的TCP 1521端口假设数据库端口的流量。# 配置ACL acl number 3100 rule 5 permit tcp destination 10.10.10.10 0 destination-port eq 1521 # 配置镜像使用虚拟观察口方案避免带宽瓶颈 observe-port 3 interface 10GE1/0/10 port-mirroring to observe-port 3 inbound5.2 执行定时抓包我们计划在9:55开始抓包持续10分钟最多抓10万个包。HUAWEI clock datetime 09:54:50 2024-05-01 # 先同步一下时间 HUAWEI capture-packet observe-port 3 acl 3100 destination-file flash:/db_delay.pcap limit-time 600 limit-captured-frames 100000然后我们让业务人员照常操作。10:05分后按CTRLC停止抓包。5.3 文件传输与分析使用SCP将db_delay.pcap下载到本地用Wireshark打开。第一步看整体统计打开“统计”-“对话”查看TCP对话。我们发现大部分10.10.10.10:1521的对话都正常但其中一个来自应用服务器10.10.20.50的对话在10:01:23附近出现了大量TCP重传Retransmission和重复ACKDuplicate ACK。第二步追踪流右键这个有问题的对话选择“追踪流”-“TCP流”。在流的内容中我们看到了应用发出的SQL查询请求但后续的数据库响应包出现了间隔性的丢失和延迟。第三步深入分析切换到“专家信息”选项卡Wireshark提示了这个TCP流中存在“之前分片丢失”的警告。结合时间点我们怀疑是网络中存在瞬间拥塞或微突发Micro-burst。5.4 根因定位与解决仅仅抓包还不够需要结合交换机的计数器来验证。我们登录CE6865检查10GE1/0/10端口在问题时间段的统计信息。HUAWEI display interface 10GE1/0/10 | include error|discard|Output rate Input bandwidth utilization : 12% Output bandwidth utilization : 5% Input errors: 0 Output errors: 0 Input discards: 0 Output discards: 125发现输出方向有125个丢包Output discards这说明在10:01左右从数据库服务器返回给应用的流量在交换机的出口队列发生了拥塞丢弃。这完美解释了Wireshark中看到的TCP重传。进一步检查队列和缓冲区配置发现该端口的默认输出队列调度策略对突发流量的缓冲不足。通过调整该端口的QoS策略增加突发流量的缓冲区大小问题得到解决。踩坑记录与技巧时间同步是关键交换机、服务器、抓包分析电脑的时间必须同步最好都配置NTP。否则你无法将Wireshark里的时间点与交换机日志、业务故障时间对应起来分析会陷入混乱。ACL是双刃剑ACL能精准过滤但也可能“过滤掉”问题。比如上述案例如果只抓目标端口1521那么从数据库返回的流量源端口是1521就不会被抓到。为了看到完整的TCP交互更稳妥的ACL是rule permit tcp host 10.10.20.50 host 10.10.10.10双向抓取这对IP的所有TCP流量。抓包文件的管理养成好习惯用有意义的文件名如20240501_1000_db_delay.pcap并在抓包前后记录关键操作日志。避免几天后面对一堆cap1.pcap、cap2.pcap文件时想不起当时的情景。组合使用诊断工具抓包不是万能的。一定要结合display interface、display buffer、display qos queue statistics等命令从多个维度交叉验证你的分析结果。很多时候计数器的异常增长discard,error能给你最直接的线索。6. 性能、安全与最佳实践总结远程抓包是强大的诊断工具但用之不当也可能对生产网络造成影响。下面是一些必须遵守的最佳实践。6.1 性能影响最小化准则精准镜像永远使用ACL将镜像范围缩到最小。不要动不动就mirror both整个万兆端口。限时限量limit-time和limit-captured-frames参数必须用。一个失控的抓包进程可能写满Flash导致设备无法启动。选择虚拟观察口对于高速业务口10GE/25GE/40GE等优先使用observe-port虚拟观察口方案避免管理口成为瓶颈。避开业务高峰如果可能将抓包安排在业务低峰期进行。6.2 操作安全与审计权限分离为抓包操作创建专用账号赋予3-5级权限即可无需15级。记录所有抓包操作的日志。变更窗口将镜像配置的变更port-mirroring命令纳入标准的网络变更流程即使它通常不影响转发。及时清理抓包完成后立即删除交换机上的pcap文件并取消镜像配置。system-view interface 10GE1/0/1 undo port-mirroring inbound # 取消镜像 quit undo observe-port 1 # 删除观察口配置 delete flash:/cap.pcap # 删除抓包文件6.3 高阶技巧自动化与脚本化对于需要频繁抓包或长期监控的场景可以编写Python脚本利用Paramiko或Netmiko库自动完成登录、配置镜像、启动抓包、定时停止、下载文件、清理配置这一整套流程。这不仅能提升效率还能确保操作的标准性和可重复性。脚本的核心是模拟上述章节的手动命令序列并处理好异常情况如连接中断、命令执行失败。例如一个简单的脚本框架可能包括连接交换机。执行display clock确认时间。配置临时ACL和镜像。执行capture-packet命令并记录进程ID。等待指定时间或用信号量控制。发送CTRLC字符序列停止抓包。使用SCP模块下载文件。执行清理命令恢复配置。远程抓包从登录设备到分析出结果是一个系统工程。它考验的不仅是你对交换机命令的熟悉程度更是你对网络协议、流量模型和问题排查逻辑的综合理解。CE6865提供的工具很强大但能否用好取决于操作者的思路和细心程度。每次抓包前多花一分钟想清楚“我要抓什么”、“怎么抓最省资源”、“抓到后怎么分析”往往能省去后面数小时的徒劳。