OVS端口镜像需明确指定源(select_src_port/select_dst_port)和目的(output-port),观察端口须为可抓包的internal接口或veth一端,且必须up;源方向易混淆:select_src_port为入桥流量(如VM发出包),select_dst_port为出桥流量(如VM接收包)。

直接上结论:OVS 的 port mirror 不是“开个开关就能抓包”的黑盒功能,它依赖你明确指定镜像源(哪些流量)、镜像目的(发到哪),且必须确保观察端口能被 Wireshark 正常捕获——这通常意味着它得是 type=internal 或直连物理网卡的 veth pair 一端,不能是普通 VM 端口或带 VLAN tag 的混杂口。
镜像源选错:select_src_port 和 select_dst_port 容易混淆方向
OVS 把“进”和“出”严格按桥内转发视角定义:select_src_port 指进入该端口的流量(ingress),select_dst_port 指从该端口发出的流量(egress)。比如想抓虚拟机 tap0 发出去的所有包,得用 select_src_port=@tap0;如果误写成 select_dst_port,实际抓到的是从 tap0 收到的、本该进 VM 的响应包——审计时会漏掉关键请求。
常见错误现象:
- Wireshark 抓不到任何业务请求,只看到零星 ARP/ICMP
- 镜像流量里全是反向响应,没有 HTTP POST 或 DNS 查询
实操建议:
- 先确认你要审计的端口角色:是 VM 的 tap 接口?是 patch port?还是 VXLAN 隧道口?
- 对 VM 出向流量审计,优先加
select_src_port;对入向(如外部访问 VM)审计,加select_dst_port - 不确定时,两个都加:
select-src-port=@tap0 select-dst-port=@tap0
观察端口配不稳:output-port 必须可抓包,不能是普通 bridge port
output-port 必须是一个能被宿主机网络栈接收并交付给用户态工具(如 tcpdump/Wireshark)的接口。OVS 默认不允许把镜像流量发到普通 type=internal port(比如 br-int 上的 qvoxxx),因为这类端口没有 Linux 协议栈绑定。
正确做法是创建一个独立的 veth pair:
智能模型自动切换 V5.0.2 - 多模态感知,自动识别图片/视频/音频/代码/文本任务,切换最优模型。支持图片理解(qwen3-vl-plus)、视频音频(qwen3.5-plus)、代码(glm-5)、Office文档(MiniMax-M2.5)、推理等场景。零感知切换,无需手动操作。
ip link add veth-mirror0 type veth peer name veth-mirror1 ip link set veth-mirror0 up ovs-vsctl add-port br-int veth-mirror0
然后把 veth-mirror1 作为抓包口:
- 运行
tcpdump -i veth-mirror1 -w audit.pcap - 或者在宿主机上直接
tcpdump -i veth-mirror1
别踩的坑:
- 别把
output-port设成br-int自身或patch-int这类控制通道口 - 别用
output-vlan替代output-port做本地抓包——那是 RSPAN 场景,需要跨交换机 VLAN 泛洪,且观察设备得在对应 VLAN 内 - 如果用
type=internalport(如mirror-if),记得ip link set mirror-if up并确认它没被防火墙或 netfilter 规则丢弃
OpenStack 场景下:br-tun 和 br-int 的镜像位置很关键
在 Neutron + OVS 的典型部署中,VM 流量路径是:tapX → qvoX → br-int → patch-int → br-tun → vxlan → 远端。审计点不同,镜像效果差异极大:
- 想看原始未封装包(含 VM IP/MAC):镜像
br-int上的qvoX或tapX - 想看 VXLAN 封装后形态(含 outer IP/UDP/VXLAN header):镜像
br-tun上的vxlan-xxxx或patch-int - 想看隧道解封装后的包(远端 VM 收到的):只能在远端
br-int镜像,本地 br-tun 抓不到
性能影响注意点:
- 镜像所有流量(
select_all=true)会显著增加 CPU 和内存拷贝开销,尤其在高吞吐场景 - 避免在
br-tun上对多个 vxlan port 同时镜像,容易打满物理网卡带宽 - 审计完成后务必
ovs-vsctl remove Bridge br-X mirrors @m清理,否则镜像规则持续生效
最常被忽略的一点:镜像生效后,观察端口(如 veth-mirror1)必须处于 UP 状态且没被 NO-FLOOD 或 STP 阻断;OVS 不校验这个,但 Linux 内核会静默丢包。运行前先 ip link show veth-mirror1 确认状态,比抓不到包再回头查快十倍。

















