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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…