在Windows 10上配置WSL2桥接网络模式

背景

WSL2默认使用NAT网络模式,这会导致在部署需要监听特定端口(尤其是UDP端口)的服务时遇到困难。本文记录了如何在Windows 10上为WSL2配置桥接网络模式,使其获得独立的IP地址,能够直接接收来自网络的连接请求。

环境

  • Windows 10
  • WSL2 (Ubuntu)
  • 8GB内存

需要用到的工具

步骤详解

1. 启用Hyper-V功能

可以通过以下方式启用:

  • 在PowerShell(管理员)中执行:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    
  • 或通过"控制面板" -> "程序" -> "启用或关闭Windows功能"启用Hyper-V

注意:启用后需要重启计算机

2. 创建Hyper-V虚拟交换机

在PowerShell(管理员)中执行:

# 查看网络适配器
Get-NetAdapter

# 创建虚拟交换机(将"WLAN"替换为你实际使用的网卡名称)
New-VMSwitch -SwitchName "VETH" -NetAdapterName "WLAN" -AllowManagementOS $True

3. 下载并使用WSLAttachSwitch

  1. 从GitHub下载WSLAttachSwitch:https://github.com/dantmnf/WSLAttachSwitch/releases

  2. 将下载的可执行文件放在一个方便访问的位置

  3. 在PowerShell(管理员)中执行:

    C:\path\to\WSLAttachSwitch.exe "VETH"
    

4. 在WSL2中配置新网卡

  1. 查看网络接口:

    ip a
    

    此时应该能看到新增的eth1接口,但状态是DOWN

  2. 启用eth1接口并获取IP地址:

    sudo ip link set eth1 up
    sudo dhclient eth1
    
  3. 再次检查网络接口,确认eth1已获取IP地址:

    ip a
    

此时状态是up,代表已经分配到了局域网的ip

解决IP地址频繁变化问题

使用DHCP自动获取IP地址时,可能会遇到IP地址频繁变化的问题,即使WSL2实例一直运行且网络连接稳定。为解决这个问题,可以为WSL2配置静态IP地址:

1. 清除当前动态IP配置

# 停止DHCP客户端
sudo dhclient -r eth1

# 清空eth1的所有IP地址配置
sudo ip addr flush dev eth1

2. 配置静态IP地址

# 设置静态IP(根据你的网络环境选择合适的IP地址)
sudo ip addr add 192.168.3.210/24 dev eth1

# 删除现有默认路由
sudo ip route del default

# 添加新的默认路由(使用你的网关地址)
sudo ip route add default via 192.168.3.1 dev eth1

3. 验证配置

# 检查IP配置
ip addr show dev eth1

# 测试网络连接
ping 8.8.8.8