使用虛擬交換器篩選
虛擬交換器篩選概觀
Windows 8 和更新版本的 Windows 支援虛擬交換器篩選。
此 WFP 功能允許篩選 MAC 標頭、IP 標頭和上層通訊協定埠的欄位,以及虛擬交換器特定欄位,例如虛擬埠 (VPort) 和虛擬機識別碼 (VM 識別符)。 系統會針對周遊虛擬交換器的所有封包,在每個封包的基礎上叫用這些層。 這些層是從虛擬交換器擴充篩選器存取的,這是一種 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(預設埠標識符)的流量是信任的,不應該篩選。 這通常是因為透過埠 0 的流量源自驅動程式堆疊中的其他延伸模組,因此數據路徑會被視為特殊許可權且受信任。 虛擬交換器擴充功能會謹慎地使用埠 0,例如,產生控制封包,任何基礎延伸模組都不應加以篩選和拒絕。 如需 Hyper-V 可延伸交換器來源埠修改的詳細資訊,請參閱 修改封包的可延伸交換器來源埠數據。
圖說文字比對規則
定義篩選的比對規則時,虛擬交換器圖說文字不應使用 MAC 位址作為比較的基礎。 MAC 位址可以在運行時間變更,某些埠可能會從多個 MAC 位址產生流量。 相反地,圖說文字應該使用更持久的比對規則,例如不會變更的 NIC 識別碼。
I/O 虛擬化 (IOV) 和 WFP 共存
在 IOV 交換器上無法啟用 WFP,如果嘗試啟用它,OS 就會封鎖它。
啟用或停用 WFP
WFP 虛擬交換器圖說文字的安裝程式不應修改已啟用WFP擴充功能的狀態;也就是說,他們不應該啟用或停用WFP本身。