电商网站现状分析,网站建设毕业设计的分类号,产品市场推广计划书,郑州网站建设zhuotop第一部分#xff1a;Windows 虚拟网卡创建指南
1. 原理
在 Windows 里#xff0c;“虚拟网卡”本质是由网络驱动在系统网络栈中创建的一个 软件网卡接口。它的作用和物理网卡类似#xff0c;只不过不直接连接到物理硬件#xff0c;而是通过内核网络驱动与宿主机网络进行交换…第一部分Windows 虚拟网卡创建指南
1. 原理
在 Windows 里“虚拟网卡”本质是由网络驱动在系统网络栈中创建的一个 软件网卡接口。它的作用和物理网卡类似只不过不直接连接到物理硬件而是通过内核网络驱动与宿主机网络进行交换。
常见用途虚拟机网络VMware、Hyper-V、VirtualBoxVPN 客户端网络测试 / 隔离环境网桥/中继/Host-only 网络Windows 下虚拟网卡依赖的机制主要有NDIS 驱动模型Network Driver Interface Specification——所有网卡驱动基于它实现虚拟交换机 / 虚拟网桥Hyper-V vSwitch、VMware vSwitchTAP/TUN 驱动常用于 VPN2. 创建虚拟网卡的几种方法
方法 A使用 Hyper-V 创建适合 WSL2
原理Hyper-V 创建虚拟交换机时会自动在 Windows 系统生成一个 vEthernet (交换机名) 的虚拟网卡。
步骤启用 Hyper-V需要 Windows 专业版/企业版控制面板 → 程序 → 启用或关闭 Windows 功能 → 勾选 Hyper-V、虚拟机平台、适用于 Linux 的 Windows 子系统。重启系统。打开 Hyper-V 管理器 → 虚拟交换机管理器。新建交换机外部桥接到物理网卡可直接访问局域网。内部仅宿主机与虚拟机互通。专用仅虚拟机间互通。应用后Windows 会多出一个 vEthernet (交换机名) 网卡。方法 B创建 Loopback 适配器Host-only 常用
原理Loopback 是微软提供的测试网卡数据不会离开本机常用于调试/虚拟机 Host-only 模式。
步骤按下 Win X → 选择“设备管理器”。菜单栏 → 操作 → 添加过时硬件。选择“手动从列表中选择硬件” → 网络适配器。厂商选“Microsoft” → 选择“Microsoft KM-TEST Loopback Adapter”。完成后网络设置中会出现一块新的虚拟网卡。方法 C使用第三方工具SoftEther / OpenVPN
原理这些软件自带 TAP/TUN 驱动可创建虚拟以太网接口流量由软件控制。
SoftEther 创建步骤安装 SoftEther VPN Client。打开 SoftEther 管理器 → 添加虚拟网卡。选择 TAP 模式即可在系统中生成一块可用的虚拟网卡。方法 DPowerShell 创建 Hyper-V 内部交换机命令行
New-VMSwitch -SwitchName HostOnlySwitch -SwitchType Internal创建后Windows 会出现 vEthernet (HostOnlySwitch) 网卡。第二部分WSL2 网卡原理 切换方法原理
WSL2 内部是 Hyper-V 虚拟机默认连接到 vEthernet (WSL)NAT 模式。
IP 网段常见为 172.27.240.0/20Windows 端作为 NAT 网关。切换方法创建新的 Hyper-V 虚拟交换机桥接、Host-only。使用 PowerShell
Get-VMNetworkAdapter -VMName WSL
Connect-VMNetworkAdapter -VMName WSL -SwitchName HostOnlySwitch重启 WSL
wsl --shutdown
wsl第三部分WSL 使用虚拟网卡跑通 DPDK
目标在 Windows 上创建一块虚拟网卡让 WSL2 使用它在 WSL2 内绑定该虚拟网卡给 DPDK跑通一个 DPDK 示例如 l2fwd1. 前提条件Windows 10/11 专业版 Hyper-V已安装 WSL2Ubuntu 20.04/22.04已安装 DPDK 25.03或你已有的版本已创建 Host-only 或外部桥接 虚拟网卡2. 绑定虚拟网卡到 WSL在 Windows Hyper-V 管理器创建一个 HostOnlySwitch绑定到 Loopback Adapter或者桥接到物理网卡。用 PowerShell 把 WSL2 虚拟机连接到这个交换机
Connect-VMNetworkAdapter -VMName WSL -SwitchName HostOnlySwitch重启 WSL
wsl --shutdown
wsl在 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_hugepages4. 编译 DPDK 并加载 igb_uio
cd ~/dpdk-25.03
meson build
ninja -C buildsudo modprobe uio
sudo insmod build/kernel/linux/igb_uio/igb_uio.ko5. 绑定虚拟网卡到 DPDK
先找到新网卡的 PCI 地址
dpdk-devbind.py --status输出示例
0000:03:00.0 Virtio network device绑定
sudo dpdk-devbind.py --bindigb_uio 0000:03:00.06. 运行 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 07. 实验效果验证数据回环在宿主机/另一台机器 ping 虚拟网卡的 IP如 Host-only 模式的 192.168.200.2观察 DPDK 是否收发包。性能测试
在宿主机运行 iperf3
iperf3 -c 192.168.200.2 -t 10DPDK 会显示收到的包数和转发情况。最终效果WSL 内部成功识别并绑定 Windows 创建的虚拟网卡到 DPDK 驱动igb_uio。DPDK 程序l2fwd能正常收发数据包。数据流完全走虚拟网卡和物理网卡隔离方便实验和性能测试。常见问题以及解答
修改配置文件的全局性及低耦合操作
修改 %USERPROFILE%\.wslconfig 文件例如添加 networkingModemirrored是全局性的。它位于用户目录下影响所有 WSL2 实例即所有安装的 Linux 发行版因为 .wslconfig 是 WSL2 的全局配置文件主要用于设置内核、网络模式、内存等系统级参数。这意味着如果你有多个发行版如 Ubuntu 和 Debian这个更改会同时应用到所有它们导致潜在的兼容性问题或意外行为。
有没有耦合度更低的操作是的WSL 支持一些 per-distribution每个发行版独立的配置方式这些方式不会影响全局其他实例耦合度较低。以下是具体选项使用 /etc/wsl.conf 文件per-distribution这个文件位于每个 WSL 发行版的根目录下例如在 Ubuntu 中是 /etc/wsl.conf用于设置特定发行版的启动行为、自动挂载等。虽然它不支持直接设置 networkingModemirrored这是全局的但你可以结合其他方式实现类似效果。例如添加 [network] 部分来配置 hostname 或生成 resolv.confDNS 设置这可以间接影响网络行为而不影响其他发行版。示例在 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你的端口 listenaddress0.0.0.0 connectportWSL中的端口 connectaddress$(wsl -d Ubuntu hostname -I)这相当于为特定发行版 “绑定” 一个网络通道而不改变 WSL 的核心网络栈。适用于暴露服务到 LAN而耦合度低易撤销netsh interface portproxy delete ...。其他低耦合社区方法如果需要更高级的接口添加可以使用第三方工具如 WSLAttachSwitchGitHub 项目它允许附加自定义 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 是系统管理的受保护的不允许用户直接修改其网络适配器。强制操作可能导致不稳定或网络中断。但有几种可行的方式从低风险到高级优先推荐官方兼容的方法推荐首选启用镜像模式Mirrored Mode来自动镜像 Windows 网卡低风险全局但有效
这会将 Windows 的所有网络接口包括你新创建的虚拟网卡镜像到 WSL2 的 Ubuntu 中作为额外接口出现e.g., eth1。步骤编辑 %USERPROFILE%\.wslconfig
[wsl2]
networkingModemirrored重启 WSLwsl --shutdown。在 Ubuntu 中运行 ip addr 查看新接口。如果你的新虚拟网卡连接到 Windows 的某个交换机它会自动出现在 WSL2 中。配置 Hyper-V 防火墙允许入站以管理员运行 PowerShell Set-NetFirewallHyperVVMSetting -Name {40E0AC32-46A5-438A-A0B2-2B479E8F2E90} -DefaultInboundAction Allow。优点无需直接连接 Hyper-V兼容性好支持 IPv6 和 LAN。缺点全局影响所有 WSL 实例。低耦合替代使用端口转发连接自定义网卡per-instance无需修改 VM
如果你的新虚拟网卡用于特定服务创建端口代理来 “桥接” 流量。步骤
确保新虚拟网卡在 Windows 中可见e.g., 通过 Hyper-V Manager 创建并连接到交换机。获取 WSL IPwsl -d Ubuntu hostname -I。在 PowerShellnetsh interface portproxy add v4tov4 listenport端口 listenaddress新网卡的IP connectportWSL端口 connectaddressWSL IP。
这相当于间接连接而不触碰 WSL VM。适用于暴露 Ubuntu 服务到新网卡。高级社区方法使用第三方工具附加自定义交换机有风险但低耦合
如果需要直接附加试用 GitHub 项目如 WSLAttachSwitch 或类似脚本。它允许创建自定义 Hyper-V 交换机e.g., New-VMSwitch -Name CustomSwitch -SwitchType Internal然后附加到 WSL VM。步骤参考社区
创建交换机PowerShell New-VMSwitch -Name HostOnlySwitch -SwitchType Internal。使用工具如 https://github.com/dantmnf/WSLAttachSwitch 运行脚本附加到 WSL。重启 WSL在 Ubuntu 中配置新接口。
注意这绕过官方限制可能在 Windows 更新后失效。测试前备份 WSL。