windows下wsl2网络配置实现局域网机器直接访问wsl内linux系统服务
发布时间:2026/10/29 19:27:53 锦皓数字建站

期望通过每一次分享让技术的门槛变低落地更容易。 —— around前言为什么要在windows上安装linux这个问题当你是研发、测试、运维人员我相信应该有你使用的场景特别是部署和测试较大的服务直接本地模拟线上真实环境操作会更好。为什么不安装vmware、docker-desktop之类的虚拟化应用呢因为最终跑不掉还是要安装linux系统所以干脆直接运行一个可交互的双系统来的好并且vmware使用时间长了莫名其妙的问题和垃圾太多了。本文基础环境为windows10、wsl2、ubuntu22如果你还没有安装好基于wsl2的ubuntu系统请移步看我这篇文章傻瓜式操作windows通过wsl2安装linux章节目录前言正文1.清理乱七八糟的环境2.windows端 .wslconfig3.ubuntu端 /etc/wsl.conf4.ubuntu端 /etc/resolv.conf 访问外部网络绑定dns5.让外部网络访问本地机器内的wsl服务正文1.清理乱七八糟的环境影响wsl2操作系统配置的有几个关键配置文件请不要到网上随便乱搜索照着乱填容易出事如果你有配置过请根据自己的记忆把那些操作都还原。2.windows端 .wslconfig此文件为对wsl端网络、硬件资源、文件路径等相关配置参数所在目录为C:\Users\{你的系统用户名}\.wslconfig请将配置都删除掉。[wsl2] processors8 # 分配给linux的cpu memory10737418240 #分配给linux的内存上述不知道怎么配置也可以直接在系统上搜索wsl接着在打开的页面只更改内存、cpu资源即可如果你是windows11可以直接在这个页面勾选网络设置为镜像也是可以的。我接下来讲述的网络模式全部围绕着NAT网络方式做因为本地是windows10且windows环境的端口和ubuntu的端口可能冲突为了避免这个情况让我自由去控制端口映射更从容。如果你是windwos11也可以不使用NAT网络直接在WSL Setting里设置当前的网络直接勾选为镜像网络模式其他不用改了重启一下wsl服务就可以生效了。3.ubuntu端 /etc/wsl.conf此文件内用于记录系统端配置加载项如果其他项你控制不了请都删掉按我的配置[boot] systemdtrue # 开启systemctl [network] hostnameubuntu22 # 给自己主机起一个名字 generateResolvConffalse # 是否开启自动生成resolv配置文件用于生成dns [user] defaultroot # 系统登录默认用户完成上述配置后退出系统依次在windows命令行执行下列# windows 命令行界面执行 # 关闭wsl wsl --shudown # 查询是否关闭state显示为stopped wsl -l -v # 启动wsl wsl至此应该可以正常访问网络进行下载了不过执行ping www.baidu.com应该还是会出错因为dns解析出错了。# ubuntu环境下执行命令 rootubuntu22:/data# ping www.baidu.com ping: www.baidu.com: 域名解析暂时失败说明网络还未配置完毕我们继续。。。4.ubuntu端 /etc/resolv.conf 访问外部网络绑定dns此文件用于系统生成dns解析配置这里你需要了解一些网络知识包括ip、网关、dns等。当关闭了wsl.conf文件中自动生成resolv配置文件后需要手动去创建了。我们打开windows端的网络配置自己找到windows系统的网络连接入口。接着点开该网络配置继续查看属性信息再查看ip地址。这里可以发现再windows上wsl的网络地址ip为172.31.32.1你可以理解为wsl系统的网络ip地址就是这个。而我们在ubuntu内再查看一下当前ubuntu的ip地址可以发现都在一个网段172.31.32中说明wsl中每个操作系统都会有一个基于网关ip的精确ip地址。总结wsl就是一个网关地址它会将通过wsl进行创建的N个操作系统统一连接到该ip地址转发出去上网。所以作为内部操作系统的ubuntu只要能配置连接上wsl就能访问外部网络。下面我们来修复dns执行route -n查看到的网关就得到ip地址就是172.31.32.1。rootubuntu22:/data# route -n 内核 IP 路由表 目标 网关 子网掩码 标志 跃点 引用 使用 接口 0.0.0.0 172.31.32.1 0.0.0.0 UG 0 0 0 eth0注意看到的0.0.0.0对应的网关地址就是你windows机器上 虚拟网络wsl的ip地址。根据之前查询的内容说明网络已经完成了匹配和映射现在我们只需要绑定一下dns的nameserver即可。# ubuntu端 vi /etc/resolv.conf # 添加下列内容注意nameserver后面的地址一定是你上述route -n 查询到的网关地址 nameserver 172.31.32.1 options edns0 trust-ad配置完成保存该文件。再次测试ping命令显示成功。rootubuntu22:/data# ping www.baidu.com PING www.a.shifen.com (183.22.17.52) 56(84) bytes of data. 64 bytes from 183.22.17.52 (183.22.17.52): icmp_seq1 ttl49 time21.2 ms 64 bytes from 183.22.17.52 (183.22.17.52): icmp_seq2 ttl49 time21.1 ms如果你想让该网络配置长期生效请使用管理员账号配置并且修改完毕后调整该文件为只读不可修改以后wsl重启自动就按最新配置不会被还原到以前无法访问外网的情况。5.让外部网络访问本地机器内的wsl服务网络本身不复杂就是一个网络访问领一个网络的网关然后转发给该网络内的机器或网关设备继续转发简单画了个草图。如果需要电脑A访问电脑C中的wsl-ubuntu在保证电脑A可以正确访问到电脑B我们只需要解决电脑C访问本地wsl-ubuntu即可。如果按照上述配置wsl网络完成说明网络已经打通了剩下要解决的只有端口映射了NAT网络需要手动指定映射就像docker一样运行的docker容器需要指明内部服务的端口号和外部服务端口号绑定关系否则无法访问进去这种方式是为了避免端口冲突。实际操作在windows端命令行执行第一个IP显示为172.31.32.124它就是当前ubuntu的ip地址如果你有多个wsl系统建议还是通过ubuntu内执行ifconfig查看。PS C:\Users\Administrator wsl hostname -I 172.31.32.124 172.17.0.1接着直接在windows端的命令行界面中ping该ip地址如果畅通表示网络连接是成功的。PS C:\Users\Administrator ping 172.31.32.124 正在 Ping 172.31.32.124 具有 32 字节的数据: 来自 172.31.32.124 的回复: 字节32 时间1ms TTL64 来自 172.31.32.124 的回复: 字节32 时间1ms TTL64再根据该ip地址在windows端的命令行界面配置ip端口映射关系#listenport外部宿主机端口 #connectport内部wsl虚拟机端口 #connectaddress执行wsl hostname -I 查看的非127.0.0.1的ip地址 netsh interface portproxy add v4tov4 listenport1521 listenaddress0.0.0.0 connectport3006 connectaddress172.31.32.124上述命令表示在宿主机上的1521端口绑定访问wsl网络虚拟机172.31.32.124:3006的系统服务。若同局域网用户想访问该wsl服务正确访问地址应该是宿主机IP:1521。若需要对外互联网暴露该服务请在当前局域网段的网关中配置对外ip端口映射将宿主机IP:1521配置进去外部互联网就可以通过公网IP端口直接访问到该服务了。至此完成本地网络访问wsl内部网络。有问题再说
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。