2023年9月的WSL更新添加了一些新的实验性功能,其中包括一些关于新的网络模式“镜像”。镜像网络带来了一些实用的特性,例如从WSL2中访问Windows服务。

0x00 前言

WSL2默认的网络模式为NAT。尽管WSL2原生提供了localhost转发这种能够方便地在Windows中访问子系统服务的特性,但如果想反过来,则只能通过局域网或者想办法桥接,这两种方法都有些许的繁琐。但是新版本的WSL2带来的镜像网络特性,使得这一切都更加自然。

更新日志中提到,镜像网络带来的新特性如下:

  • IPv6支持
  • 在Linux中透过127.0.0.1访问Windows服务
  • 通过局域网直接连接WSL
  • 对虚拟专用网络更好的兼容性
  • 多播支持

本文主要介绍其中的第二项特性。

0x01 使用

首先,这项特性需要22621.2359及以上版本的Windows 11以及2.0以上版本的WSL。使用wsl --version命令可以检查是否符合需求,wsl --update命令可以更新WSL。

> wsl --version
WSL 版本: 2.0.9.0
内核版本: 5.15.133.1-1
WSLg 版本: 1.0.59
MSRDC 版本: 1.2.4677
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22631.2787

之后,在Windows的用户文件夹下的.wslconfig文件中填入以下配置(如果没有,就创建一个):

[experimental]
networkingMode=mirrored

最后,使用wsl --shutdown命令关闭WSL2实例。在下次打开WSL的时候,镜像网络就配置好了。是不是很方便?

额外的配置

在镜像模式下可以使用一些额外的配置。

  • ignoredPorts:让Linux下的一些端口不会被绑定到Windows,例如3000,9000,9090
  • hostAddressLoopback:允许使用除了127.0.0.1之外所有的主机IP进行容器与主机之间的连接。

0x02 体验

新的镜像网络使用起来非常方便。对我来说,最明显的改变是在镜像网络模式下借助autoProxy=true配置可以让WSL直接套用Windows的代理设置。不过,在刚配置好的时候,我遇到了vscode的wsl远程无法读取配置的问题,不过在用任务管理器kill掉进程再重新打开vscode就正常了。


参考链接:

  1. https://learn.microsoft.com/en-us/windows/wsl/wsl-config#wslconfig
  2. https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/

标签: WSL

添加新评论