WSL 下的虛擬網卡配置

第一部分:Windows 虛擬網卡創建指南

1. 原理

在 Windows 里,“虛擬網卡”本質是由網絡驅動在系統網絡棧中創建的一個 軟件網卡接口。它的作用和物理網卡類似,只不過不直接連接到物理硬件,而是通過內核網絡驅動與宿主機網絡進行交換。
常見用途:

  • 虛擬機網絡(VMware、Hyper-V、VirtualBox)

  • VPN 客戶端

  • 網絡測試 / 隔離環境

  • 網橋/中繼/Host-only 網絡

Windows 下虛擬網卡依賴的機制主要有:

  • NDIS 驅動模型(Network Driver Interface Specification)——所有網卡驅動基于它實現

  • 虛擬交換機 / 虛擬網橋(Hyper-V vSwitch、VMware vSwitch)

  • TAP/TUN 驅動(常用于 VPN)


2. 創建虛擬網卡的幾種方法

方法 A:使用 Hyper-V 創建(適合 WSL2)

原理:Hyper-V 創建虛擬交換機時,會自動在 Windows 系統生成一個 vEthernet (交換機名) 的虛擬網卡。

步驟:

  1. 啟用 Hyper-V(需要 Windows 專業版/企業版):

    • 控制面板 → 程序 → 啟用或關閉 Windows 功能 → 勾選 Hyper-V虛擬機平臺適用于 Linux 的 Windows 子系統

    • 重啟系統。

  2. 打開 Hyper-V 管理器 → 虛擬交換機管理器。

  3. 新建交換機:

    • 外部:橋接到物理網卡,可直接訪問局域網。

    • 內部:僅宿主機與虛擬機互通。

    • 專用:僅虛擬機間互通。

  4. 應用后,Windows 會多出一個 vEthernet (交換機名) 網卡。


方法 B:創建 Loopback 適配器(Host-only 常用)

原理:Loopback 是微軟提供的測試網卡,數據不會離開本機,常用于調試/虛擬機 Host-only 模式。

步驟:

  1. 按下 Win + X → 選擇“設備管理器”。

  2. 菜單欄 → 操作 → 添加過時硬件。

  3. 選擇“手動從列表中選擇硬件” → 網絡適配器。

  4. 廠商選“Microsoft” → 選擇“Microsoft KM-TEST Loopback Adapter”。

  5. 完成后,網絡設置中會出現一塊新的虛擬網卡。


方法 C:使用第三方工具(SoftEther / OpenVPN)

原理:這些軟件自帶 TAP/TUN 驅動,可創建虛擬以太網接口,流量由軟件控制。

SoftEther 創建步驟

  1. 安裝 SoftEther VPN Client。

  2. 打開 SoftEther 管理器 → 添加虛擬網卡。

  3. 選擇 TAP 模式,即可在系統中生成一塊可用的虛擬網卡。


方法 D:PowerShell 創建 Hyper-V 內部交換機(命令行)
New-VMSwitch -SwitchName "HostOnlySwitch" -SwitchType Internal

創建后,Windows 會出現 vEthernet (HostOnlySwitch) 網卡。


第二部分:WSL2 網卡原理 & 切換方法

  • 原理
    WSL2 內部是 Hyper-V 虛擬機,默認連接到 vEthernet (WSL)(NAT 模式)。
    IP 網段常見為 172.27.240.0/20,Windows 端作為 NAT 網關。

  • 切換方法

    1. 創建新的 Hyper-V 虛擬交換機(橋接、Host-only)。

    2. 使用 PowerShell:

      Get-VMNetworkAdapter -VMName "WSL"
      Connect-VMNetworkAdapter -VMName "WSL" -SwitchName "HostOnlySwitch"
      
    3. 重啟 WSL:

      wsl --shutdown
      wsl
      

第三部分:WSL 使用虛擬網卡跑通 DPDK

目標

  • 在 Windows 上創建一塊虛擬網卡

  • 讓 WSL2 使用它

  • 在 WSL2 內綁定該虛擬網卡給 DPDK

  • 跑通一個 DPDK 示例(如 l2fwd


1. 前提條件

  • Windows 10/11 專業版 + Hyper-V

  • 已安裝 WSL2(Ubuntu 20.04/22.04)

  • 已安裝 DPDK 25.03(或你已有的版本)

  • 已創建 Host-only 或外部橋接 虛擬網卡


2. 綁定虛擬網卡到 WSL

  1. 在 Windows Hyper-V 管理器創建一個 HostOnlySwitch,綁定到 Loopback Adapter(或者橋接到物理網卡)。

  2. 用 PowerShell 把 WSL2 虛擬機連接到這個交換機:

    Connect-VMNetworkAdapter -VMName "WSL" -SwitchName "HostOnlySwitch"
    
  3. 重啟 WSL:

    wsl --shutdown
    wsl
    
  4. 在 WSL 內查看:

    ip addr
    

    應該能看到 eth1(新網卡)。


3. 配置 DPDK HugePage

sudo mkdir -p /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge
echo 1024 | sudo tee /proc/sys/vm/nr_hugepages

4. 編譯 DPDK 并加載 igb_uio

cd ~/dpdk-25.03
meson build
ninja -C buildsudo modprobe uio
sudo insmod build/kernel/linux/igb_uio/igb_uio.ko

5. 綁定虛擬網卡到 DPDK

先找到新網卡的 PCI 地址:

dpdk-devbind.py --status

輸出示例:

0000:03:00.0 'Virtio network device'

綁定:

sudo dpdk-devbind.py --bind=igb_uio 0000:03:00.0

6. 運行 DPDK 示例程序

以 L2fwd 為例:

sudo ./build/examples/dpdk-l2fwd -l 0-1 -n 4 -- -q 1 -p 0x1

預期輸出:

EAL: Detected 2 lcore(s)
EAL: Probing PCI devices...
L2FWD: entering main loop on lcore 0
L2FWD: entering main loop on lcore 1
Port 0: MAC 00:15:5D:01:02:03
L2FWD: RX from port 0
L2FWD: TX to port 0

7. 實驗效果驗證

  • 數據回環:在宿主機/另一臺機器 ping 虛擬網卡的 IP(如 Host-only 模式的 192.168.200.2),觀察 DPDK 是否收發包。

  • 性能測試
    在宿主機運行 iperf3

    iperf3 -c 192.168.200.2 -t 10
    

    DPDK 會顯示收到的包數和轉發情況。


最終效果

  • WSL 內部成功識別并綁定 Windows 創建的虛擬網卡到 DPDK 驅動(igb_uio)。

  • DPDK 程序(l2fwd)能正常收發數據包。

  • 數據流完全走虛擬網卡,和物理網卡隔離,方便實驗和性能測試。

常見問題以及解答

修改配置文件的全局性及低耦合操作

修改 %USERPROFILE%\.wslconfig 文件(例如添加 networkingMode=mirrored)是全局性的。它位于用戶目錄下,影響所有 WSL2 實例(即所有安裝的 Linux 發行版),因為 .wslconfig 是 WSL2 的全局配置文件,主要用于設置內核、網絡模式、內存等系統級參數。這意味著如果你有多個發行版(如 Ubuntu 和 Debian),這個更改會同時應用到所有它們,導致潛在的兼容性問題或意外行為。

有沒有耦合度更低的操作?是的,WSL 支持一些 per-distribution(每個發行版獨立)的配置方式,這些方式不會影響全局其他實例,耦合度較低。以下是具體選項:

  • 使用 /etc/wsl.conf 文件(per-distribution):這個文件位于每個 WSL 發行版的根目錄下(例如,在 Ubuntu 中是 /etc/wsl.conf),用于設置特定發行版的啟動行為、自動掛載等。雖然它不支持直接設置 networkingMode=mirrored(這是全局的),但你可以結合其他方式實現類似效果。例如:

    • 添加 [network] 部分來配置 hostname 或生成 resolv.conf(DNS 設置),這可以間接影響網絡行為,而不影響其他發行版。

    • 示例:在 Ubuntu 的 /etc/wsl.conf 中添加:

      [network]
      generateResolvConf = false  # 禁用自動 DNS 配置,允許手動設置
      

      然后在 Ubuntu 中手動編輯 /etc/resolv.conf 來自定義 DNS。這是低耦合的,只影響當前發行版。

    • 局限:不支持直接添加網卡,但適合細粒度網絡調整。

  • 端口轉發(netsh interface portproxy):這是一個 Windows 側的操作,非常低耦合,因為它不修改 WSL 配置,只在主機上創建端口代理規則。可以針對特定發行版的 IP 地址設置,不影響全局網絡模式。

    • 示例:在 PowerShell(管理員模式)運行:

      netsh interface portproxy add v4tov4 listenport=你的端口 listenaddress=0.0.0.0 connectport=WSL中的端口 connectaddress=$(wsl -d Ubuntu hostname -I)
      

      這相當于為特定發行版 “綁定” 一個網絡通道,而不改變 WSL 的核心網絡棧。適用于暴露服務到 LAN,而耦合度低(易撤銷:netsh interface portproxy delete ...)。

  • 其他低耦合社區方法:如果需要更高級的接口添加,可以使用第三方工具如 WSLAttachSwitch(GitHub 項目),它允許附加自定義 Hyper-V 交換機到特定 WSL 實例,而不全局修改配置。但這不是官方支持,可能有穩定性風險。

這些方式的耦合度較低,因為它們要么是 per-instance,要么不涉及修改 WSL 的 VM 配置。如果你有多個發行版,優先用 wsl.conf 或 port proxy 避免全局影響。

Windows 創建虛擬網卡為什么需要虛擬交換機?它們的關系、用途

在 Windows 的 Hyper-V 環境中,創建虛擬網卡(Virtual Network Adapter)和虛擬交換機(Virtual Switch)是緊密相關的,不能孤立存在。下面詳細解釋:

它們的關系
  • 虛擬交換機是虛擬網卡的必要基礎:虛擬網卡不能獨立工作,它必須連接到一個虛擬交換機來處理網絡流量。虛擬交換機充當 “橋梁” 或 “路由器”,負責將虛擬網卡的流量轉發到物理網絡、其他 VM 或主機。簡單說,虛擬網卡是 “端點”(VM 的網絡接口),而虛擬交換機是 “中心樞紐”(管理所有端點的連接和流量)。
  • 為什么需要先創建交換機:Hyper-V 的設計是層級的——交換機定義網絡拓撲(例如外部訪問、內部隔離),然后網卡才能 “插入” 這個拓撲。沒有交換機,網卡就無法路由數據包(類似于物理網卡需要連接到交換機或路由器)。當你創建虛擬網卡時,Hyper-V 會要求指定一個交換機,否則操作失敗。這確保了網絡的安全性和可管理性,避免孤立網卡導致的混亂。
  • 創建過程:先用 New-VMSwitch 創建交換機,然后用 Add-VMNetworkAdapter 添加網卡并連接到交換機。WSL2 默認使用一個隱藏的 “WSL” 交換機(NAT 類型),這就是為什么直接修改受限。
各自的用途
  • 虛擬交換機(Virtual Switch)的用途

    • 創建虛擬網絡環境,支持三種類型:
      • External:橋接到物理網卡,允許 VM 訪問外部網絡(如互聯網),用途:生產環境中的 VM 聯網。
      • Internal:僅主機和 VM 間通信,不連外部,用途:測試隔離網絡或主機-VM 內部服務。
      • Private:僅 VM 間通信,不連主機,用途:多 VM 模擬私有 LAN。
    • 整體用途:管理流量轉發、VLAN 分割、安全策略(如 ACL),類似于物理交換機,但軟件實現。Hyper-V 用它來模擬復雜網絡拓撲,提高虛擬化靈活性。
  • 虛擬網卡(Virtual Network Adapter)的用途

    • 為 VM 提供網絡接口,支持 MAC 地址分配、帶寬限制、VLAN 等。
    • 用途:允許 VM 發送/接收數據包,實現互聯網訪問、文件共享、服務暴露等。沒有網卡,VM 就無法聯網;但網卡依賴交換機來 “激活” 其功能。
    • 示例:在 VM 中,它表現為 eth0/eth1 等接口,用于配置 IP、路由等。

總之,交換機是 “網絡基礎設施”,網卡是 “接入設備”,前者定義規則,后者執行連接。這種設計確保了 Hyper-V 的可擴展性和安全性。

如何將新創建的虛擬網卡連接到 WSL2

基于官方文檔和社區反饋,我認為直接將自定義虛擬網卡連接到 WSL2 VM 不受 Microsoft 官方支持,因為 WSL2 的 Hyper-V VM 是系統管理的,受保護的(不允許用戶直接修改其網絡適配器)。強制操作可能導致不穩定或網絡中斷。但有幾種可行的方式,從低風險到高級,優先推薦官方兼容的方法:

  1. 推薦首選:啟用鏡像模式(Mirrored Mode)來自動鏡像 Windows 網卡(低風險,全局但有效):

    • 這會將 Windows 的所有網絡接口(包括你新創建的虛擬網卡)鏡像到 WSL2 的 Ubuntu 中,作為額外接口出現(e.g., eth1)。
    • 步驟:
      1. 編輯 %USERPROFILE%\.wslconfig

        [wsl2]
        networkingMode=mirrored
        
      2. 重啟 WSL:wsl --shutdown

      3. 在 Ubuntu 中運行 ip addr 查看新接口。如果你的新虛擬網卡連接到 Windows 的某個交換機,它會自動出現在 WSL2 中。

      4. 配置 Hyper-V 防火墻允許入站:以管理員運行 PowerShell Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

    • 優點:無需直接連接 Hyper-V,兼容性好,支持 IPv6 和 LAN。缺點:全局影響所有 WSL 實例。
  2. 低耦合替代:使用端口轉發連接自定義網卡(per-instance,無需修改 VM):

    • 如果你的新虛擬網卡用于特定服務,創建端口代理來 “橋接” 流量。
    • 步驟:
      1. 確保新虛擬網卡在 Windows 中可見(e.g., 通過 Hyper-V Manager 創建并連接到交換機)。
      2. 獲取 WSL IP:wsl -d Ubuntu hostname -I
      3. 在 PowerShell:netsh interface portproxy add v4tov4 listenport=端口 listenaddress=新網卡的IP connectport=WSL端口 connectaddress=WSL IP
    • 這相當于間接連接,而不觸碰 WSL VM。適用于暴露 Ubuntu 服務到新網卡。
  3. 高級社區方法:使用第三方工具附加自定義交換機(有風險,但低耦合):

    • 如果需要直接附加,試用 GitHub 項目如 WSLAttachSwitch 或類似腳本。它允許創建自定義 Hyper-V 交換機(e.g., New-VMSwitch -Name "CustomSwitch" -SwitchType Internal),然后附加到 WSL VM。
    • 步驟(參考社區):
      1. 創建交換機:PowerShell New-VMSwitch -Name "HostOnlySwitch" -SwitchType Internal
      2. 使用工具如 https://github.com/dantmnf/WSLAttachSwitch 運行腳本附加到 WSL。
      3. 重啟 WSL,在 Ubuntu 中配置新接口。
    • 注意:這繞過官方限制,可能在 Windows 更新后失效。測試前備份 WSL。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dify web前端源碼本地部署詳細教程

目錄 1. 先啟動API 2. 啟動worker服務 3. 啟動web 4. 訪問登陸地址 在前面的文章中,Dify源碼部署,搭建二次開發環境(一) 已經記錄了如何在本地啟動API、work、中間件。在本篇文章中,將概述如何啟動dify web源碼項…

CVPR 2025|英偉達聯合牛津大學提出面向3D醫學成像的統一分割基礎模型

在 2D 自然圖像和視頻的交互式分割領域,基礎模型已引發廣泛關注,這也促使人們開始構建用于醫學成像的 3D 基礎模型。然而,3D 醫學成像存在的領域差異以及臨床應用場景,要求開發一種有別于現有 2D 解決方案的專用模型。具體而言&am…

解決“Win7共享文件夾其他電腦網絡無法發現共享電腦名稱”的問題

要讓運行 Windows 7 的電腦被局域網中其他設備(包括另一臺電腦、手機、NAS 等)“發現”,必須同時滿足三個條件: 網絡發現功能已啟用;對應的后臺服務已啟動;防火墻規則放行。 下面給出最簡、最穩妥的 3 步設…

Python pyzmq 庫詳解:從入門到高性能分布式通信

一、前言 在現代軟件開發中,進程間通信(IPC)與分布式系統通信已經成為基礎能力。無論是構建一個微服務架構的后端,還是實現大規模并行計算任務,如何讓不同的進程或節點之間高效地傳遞消息,都是核心問題。 傳…

CentOS 7更換國內鏡像源

第一步:檢查系統版本 在修改任何配置之前,先確定你的 CentOS 版本,因為不同版本的鏡像源配置文件不同。 cat /etc/redhat-release這個命令會顯示你的 CentOS 版本信息,例如 CentOS Linux release 7.9.2009 (Core)。從你的錯誤日志…

詳解 doclayout_yolo:Python 文檔布局檢測

目錄一、doclayout_yolo 核心功能二、安裝方法1. 直接安裝2. 通過 PDF-Extract-Kit 安裝三、使用示例1. 快速體驗(HuggingFace Demo)2. 本地推理代碼3. 批量處理四、技術亮點五、應用場景六、其他說明1.相關資源2. 注意事項doclayout_yolo 是一個基于 Y…

貓頭虎AI分享|一款Coze、Dify類開源AI應用超級智能體Agent快速構建工具:FastbuildAI

貓頭虎AI分享|一款 Coze、Dify 類開源 AI 應用超級智能體快速構建工具:FastbuildAI 區別在于它的易用度和商業閉環功能 摘要:FastbuildAI 是一個開源的 AI 應用“快速構建 商業化閉環”工具。它讓個人開發者與小團隊用 可視化 零代碼 的方…

GitLab 安全漏洞 CVE-2025-6186 解決方案

本分分享極狐GitLab 補丁版本 18.2.2, 18.1.4, 18.0.6 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼,我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS,技術團隊已經進行了升級,無需用戶采取任何…

【K8s】harbor安裝與推送鏡像

引言 在開發中,先推送鏡像到docker,然后直接在docker運行。但是在K8S中,需要動態創建或者分配機器,這里需要將鏡像推送到harbor倉庫,然后再從倉庫拉取到每臺集群機器。 docker安裝harbor:https://learnku…

FPGA讀取AHT20溫濕度模塊思路及實現,包含遇到的問題(IIC協議)

一.閱讀官方手冊 手冊在下方網址下載,該模塊在各個網店平臺均有銷售 百度網盤 請輸入提取碼 手冊重點關注IIC地址(讀地址0x71,寫地址0x70)、IIC命令和讀寫數據邏輯,手冊寫的比較簡單(感覺很多細節沒到位…

項目會議怎么開才有效

要提高項目會議的有效性,需要做到以下幾點:明確會議目的、制定具體的會議議程、合理控制會議時長、提前準備會議資料、選擇合適的參會人員、設定清晰的會議目標、確保會議有決策和行動方案、會后及時跟進與落實。其中,明確會議目的尤為重要。…

計算機視覺第一課opencv(二)保姆級教

目錄 簡介 一、邊界填充 1.函數說明 2.案例分析 二、圖像運算 1.號運算 2.cv2.add()函數 3.圖像加權運算 三、閾值處理 四、圖像平滑處理 1.椒鹽噪聲 2.均值濾波(Mean Filtering) 3.方框濾波 4. 高斯濾波(Gaussian Filtering&am…

母豬姿態轉換行為識別:計算機視覺與行為識別模型調優指南

> 在現代智能化養殖中,母豬姿態識別是健康監測的關鍵技術。本文將帶你從0到1構建高精度母豬姿態識別系統,準確率可達95%以上! ## 一、為什么母豬姿態識別如此重要? 母豬的行為姿態是其健康狀況的重要指標: - **站立姿態**:可能表示發情期或進食需求 - **側臥姿態**:…

循序漸進學 Spring (下):從注解、AOP到底層原理與整合實戰

文章目錄7. 自動裝配 (Autowiring)7.1 XML 自動裝配7.2 使用注解實現自動裝配Autowired vs Resource8. 使用注解開發(完全體)8.1 定義 Bean (Component 及其衍生注解)8.2 注入屬性 (Value)8.3 注入對象8.4 定義作用域 (Scope)8.5 小結:XML vs…

C#WPF實戰出真汁06--【系統設置】--餐桌類型設置

1、系統設置的基本概念系統設置是用于配置和管理餐桌類型和菜品類型,是維護整個系統的基礎數據。通過系統設置,用戶可以調整餐桌類型的添加,刪除,編輯,分頁,查詢,重置,列表&#xff…

旋鈕鍵盤項目---foc講解(閉環位置控制)

hello,周六休息了一天,出去打本了。趁著夜色,花費了幾個小時,也是將閉環代碼寫完,參考了燈哥的思路。接下來介紹一下我的整個流程: 一、閉環位置控制思路: 其實懂得了開環,那么閉環…

為什么有些相機“即插即用”,而有些則需要采集卡?

在工業生產中,工業相機是“眼睛”,它幫助我們看到世界,但你知道嗎?不同的工業相機接口就像不同的“通道”,有些“通道”直接就能與計算機連接,而有些則需要一個額外的小配件——圖像采集卡。那么&#xff0…

【計算機網絡 | 第7篇】物理層基本概念

文章目錄物理層基本概念及數據通信系統解析一、物理層的核心定位🥝二、物理層的功能🧾三、數據通信系統的模型🐦?🔥(一)源系統(二)傳輸系統(三)目的系統四、…

一般情況下,python函數都會返回對象,但有時只調用一個函數,這是在修改這個信息

class Model:def __init__(self):self.training Truedef eval(self):self.training Falsereturn Nonem Model() print(m.training) # True m.eval() # 返回 None print(m.training) # False,模型內部狀態已改變m.eval()是在修改m的…

2025-08-17 李沐深度學習17——語義分割

文章目錄1 語義分割1.1 介紹1.2 語義分割應用1.3 實例分割2 轉置卷積2.1 工作原理2.2 為什么叫“轉置”卷積2.3 轉置卷積也是一種卷積3 FCN3.1 核心思想3.2 網絡架構4 樣式遷移4.1 基于 CNN 的樣式遷移4.2 工作流程1 語義分割 1.1 介紹 語義分割(Semantic Segment…