使用虚拟交换机筛选
虚拟交换机过滤概述
Windows 8 及更高版本的 Windows 支持虚拟交换机过滤功能。
此 WFP 功能允许筛选 MAC 标头、IP 标头和上层协议端口的字段,以及虚拟交换机特定字段,例如虚拟端口 (VPort) 和虚拟机标识符 (VM ID)。 对于穿过虚拟交换机的所有数据包,这些层都会按数据包逐个调用。 这些层是从虚拟交换机扩展筛选器,NDIS 轻型筛选器 (LWF) 驱动程序类型访问的。
标注驱动程序调用 FwpsvSwitchEventsSubscribe0 函数来注册虚拟交换机层事件的回调入口点。
回调通知函数的入口点在 FWPS_VSWITCH_EVENT_DISPATCH_TABLE0 结构中指定。 可用的回调函数包括:
- FWPS_VSWITCH_FILTER_ENGINE_REORDER_CALLBACK0
- FWPS_VSWITCH_INTERFACE_EVENT_CALLBACK0
- FWPS_VSWITCH_LIFETIME_EVENT_CALLBACK0
- FWPS_VSWITCH_POLICY_EVENT_CALLBACK0
- FWPS_VSWITCH_PORT_EVENT_CALLBACK0
- FWPS_VSWITCH_RUNTIME_STATE_RESTORE_CALLBACK0
- FWPS_VSWITCH_RUNTIME_STATE_SAVE_CALLBACK0
FWPS_VSWITCH_EVENT_TYPE 枚举定义虚拟交换机通知函数的 eventType 参数的值。
标注驱动程序最终必须调用 FwpsvSwitchEventsUnsubscribe0 以释放系统资源。
如果标注驱动程序从 WFP 通知函数返回 STATUS_PENDING,则 WFP 会将 STATUS_PENDING 返回到 OID 请求处理程序。 标注驱动程序必须调用 FwpsvSwitchNotifyComplete0 函数才能完成挂起操作。 在 FwpsvSwitchNotifyComplete0 调用后,WFP 调用 NdisFOidRequestComplete 函数以完成虚拟交换机的 OID。
回调不应在通知函数的上下文中同步添加或删除 WFP 筛选器。 此外,如果通知函数允许回调返回 STATUS_PENDING,并且标注返回 STATUS_PENDING,则标注在完成通知之前不应添加或删除 WFP 筛选器。
WFP 虚拟交换机过滤器层和字段
用于虚拟交换机筛选的运行时筛选层标识符 包括:
- FWPS_LAYER_INGRESS_VSWITCH_ETHERNET
- FWPS_LAYER_EGRESS_VSWITCH_ETHERNET
- FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4
- FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6
- FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4
- FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6
用于虚拟交换机筛选的数据字段标识符 包括:
- FWPS_FIELDS_EGRESS_VSWITCH_ETHERNET
- FWPS_FIELDS_EGRESS_VSWITCH_TRANSPORT_V4
- FWPS_FIELDS_EGRESS_VSWITCH_TRANSPORT_V6
- FWPS_FIELDS_INGRESS_VSWITCH_ETHERNET
- FWPS_FIELDS_INGRESS_VSWITCH_TRANSPORT_V4
- FWPS_FIELDS_INGRESS_VSWITCH_TRANSPORT_V6
WFP 虚拟交换机标注编写器指南
端口 0 流量
对于 WFP 虚拟交换机标注,来自端口 0(默认端口 ID)的流量是受信任的,不应筛选。 这是因为,端口 0 上的流量通常源自驱动程序堆栈中的其他扩展,因此数据路径被视为特权和受信任。 虚拟交换机扩展将很少将端口 0 用于发起控制数据包等情况,这些数据包不应被任何底层扩展过滤和拒绝。 有关 Hyper-V 可扩展交换机源端口修改的详细信息,请参阅修改数据包的可扩展交换机源端口数据。
标注匹配规则
定义用于过滤的匹配规则时,虚拟交换机标注不应将 MAC 地址用作比较的基础。 MAC 地址可以在运行时更改,某些端口可能会生成来自多个 MAC 地址的流量。 相反,标注应使用更持久的匹配规则,例如不会更改的 NIC ID。
I/O 虚拟化 (IOV) 和 WFP 共存
在 IOV 交换机上无法启用 WFP,如果尝试启用它,会被操作系统阻止。
启用或禁用 WFP
WFP 虚拟交换机标注的安装程序不应修改已启用 WFP 扩展的状态;也就是说,它们不应启用或禁用 WFP 本身。