大神网
大神网

暂无菜单项

首页/文章/技术折腾/
打开 MD 链接

为什么在 WSL2 中设置 /etc/wsl.conf 后无法访问外网?详细教程帮你解决!

大神
发布于 2024/6/24
2

在这篇文章中,我们将探讨为什么在 WSL2 中设置 /etc/wsl.conf 后会导致无法访问外网的问题,并提供详细的解决方法。我们将一步步指导你如何配置 WSL2 以实现既能访问外网,又能正常使用服务的目标。


前言

在使用 Windows Subsystem for Linux 2 (WSL2) 时,很多用户都会遇到配置网络的问题。尤其是在设置了 /etc/wsl.conf 后,可能会导致无法访问外网,但删除该文件后又无法使用某些服务。这篇文章将详细解析这个问题,并提供有效的解决方案。

环境配置

系统版本:Windows 11 专业工作站版 23H2

WSL 版本:2.2.4.0 内核版本:5.15.153.1-2 WSLg 版本:1.0.61 MSRDC 版本:1.2.5326 Direct3D 版本:1.611.1-81528511 DXCore 版本:10.0.26091.1-240325-1447.ge-release Windows 版本:10.0.22631.3447

.wslconfig (windows) 配置如下:

[wsl2]
memory=20GB                   #限制最大内存
processors=8                  #限制线程数
localhostforwarding=true
nestedVirtualization=true
guiApplications=true

[experimental]
autoMemoryReclaim=gradual  # gradual  | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
sparseVhd=true

[network]
generateResolvConf = false

/etc/wsl.conf 配置如下:

[boot]
systemd=true

[network]
generateResolvConf = false

[user]
default = root

/etc/resolv.conf 配置如下:

nameserver 8.8.8.8
nameserver 8.8.4.4

问题分析

在设置 /etc/wsl.conf 并且 generateResolvConf = false 后,WSL2 无法访问外网的主要原因可能是 DNS 配置的问题。当 WSL2 使用自定义的 DNS 配置时,可能会导致与 Windows 主机的网络配置不匹配,从而无法正确解析外部地址。

解决方案

方案一:让 WSL2 使用 Windows 的 DNS

  1. 修改 /etc/wsl.conf,确保 generateResolvConf 为 true:

    [boot]
    systemd=true
    
    [network]
    
    generateResolvConf = true
  2. 重启 WSL2:

    在 PowerShell 中运行以下命令:

    wsl --shutdown
    wsl
  3. 检查 /etc/resolv.conf 文件是否自动生成并包含正确的 DNS 服务器:

    cat /etc/resolv.conf

    确保里面包含类似以下内容:

    nameserver 172.XX.XX.XX  # 这里的IP应该是Windows虚拟网络的DNS地址

方案二:手动设置静态 IP 和 DNS

  1. 创建外部虚拟交换机:

    在 Hyper-V 管理器中,创建一个外部虚拟交换机。

  2. 修改 .wslconfig,使用桥接模式并设置固定 IP:

    [wsl2]
    networkingMode=bridged
    vmSwitch=你创建的虚拟交换机名称
    dhcp=false
  3. 设置 WSL2 的网络配置:

    创建或修改 /lib/systemd/network/wsl_external.network 文件:

    [Match]
    Name=eth0
    
    [Network]
    Description=bridge
    DHCP=false
    Address=192.168.1.10/24  # 自行修改
    Gateway=192.168.0.1  # 自行修改
  4. 修改 DNS 设置,禁止自动生成:

    在 /etc/wsl.conf 中加入以下内容:

    [boot]
    systemd=true
    
    [network]
    generateResolvConf = false

    删除现有的 /etc/resolv.conf 文件,并手动设置 DNS:

    sudo rm -f /etc/resolv.conf
    echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf
  5. 重启 WSL2:

    wsl --shutdown
    wsl

方案三:使用 mirrored 模式共享外部 IP

  1. 配置 .wslconfig 使用 mirrored 模式:

    [wsl2]
    networkingMode=mirrored
    dnsTunneling=true
    autoProxy=true
    firewall=true
    
    [experimental]
    sparseVhd=true
    autoMemoryReclaim=gradual
    hostAddressLoopback=true
  2. 重启 WSL2:

    wsl --shutdown
    wsl

    在 mirrored 模式下,WSL2 和 Windows 主机共享同一个外部 IP,这样可以确保 WSL2 可以顺利访问外网。

验证网络连接

  1. 在 WSL2 中验证网络连接:

    ping google.com

    如果可以 ping 通,说明网络配置成功。

  2. 在 Windows 主机中访问 WSL2 服务:

    使用 ipconfig 查看 Windows 虚拟网卡的 IP 地址,并确保可以通过该 IP 访问 WSL2 中运行的服务。

结论

通过以上几个解决方案,你应该能够解决在 WSL2 中设置 /etc/wsl.conf 后无法访问外网的问题。无论是使用 Windows 的 DNS,手动设置静态 IP 和 DNS,还是使用 mirrored 模式共享外部 IP,都可以帮助你实现既能访问外网,又能正常使用服务的目标。

希望这篇文章对你有所帮助。如果有其他问题或建议,欢迎在评论区留言讨论。

0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
把实践写下来。AI、教程、杂文与生活。
文章
教程
Skills
关于
关于大神
关于
AI 实践、杂文、生活记录、教程与下载分享。

装箱单空白模板:只记箱件、重量、尺码和唛头,不写货价

2次下载
免费
下载分享
24 000

商业发票空白模板:填写字段、费用说明与核对清单

2次下载
免费
下载分享
20 000

报价单空白模板:列出货价、术语地点、有效期和付款条件

2次下载
免费
下载分享
33 000

散人杂谈 国庆节特别篇|你可以随时打开自己,也可以随时关掉自己

杂文
65 000

从这里开始:大神网会分享什么

杂文
63 000

我在改写你们的过去

杂文
26 000
大神 AI 转型AI 转型把 AI 用进真实工作了解
教程与下载教程下载一步一步能跟着做查看
Skill HubSkill Hub自有 Skill 与工具入口进入
大神网
大神网
首页
文章
AI Hub
生活
小店
导航
社区
教程
关于
大神 · 把实践写下来
AI、教程、杂文与生活
关于文章教程小店隐私政策服务条款退款与交付联系客服
大神网 © 2026