Skip to content
Frank
Back

WSL2 的 NAT 和 Mirrored 模式到底有什么区别

Edit on GitHub

wsl2的nat,mirrored都是啥? 前置问题与解决
之前每次打开WSL2时,顶部均会报错:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。

通过谷歌搜索,参考知乎帖子的方法(推测为切换到Mirrored网络模式,或配置代理镜像),该代理报错问题立竿见影地解决。
后续新问题
解决代理问题后,在WSL2中运行Java后端程序时,出现如下错误:

Error: JMX connector server communication error: service:jmx:rmi://0.0.0.0:26203  
jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 26203; nested exception is:  
    java.net.BindException: Address already in use  

不同模式的区别

对比维度NAT 模式Mirrored 模式
默认状态默认启用需手动启用(Win11 22H2+)
IP 分配私有子网 IP(动态)复用宿主机 IP
局域网可达性外部设备无法直接访问外部设备可直接访问
端口转发需手动配置无需配置(共享宿主机端口)
网络切换适应性较差(切换网络后需重新获取 IP)优秀(同步宿主机网络)
性能中等中等
兼容性最佳(全平台支持)有限(仅 Win11 22H2+)
一、默认模式:NAT(网络地址转换)
 1. 工作原理

NAT 是 WSL2 的默认网络模式,基于 Hyper-V 虚拟交换机实现。Windows 会创建一个内部虚拟网络(通常为 WSL 虚拟交换机),WSL2 实例被分配一个私有子网IP(如 172.x.x.x 网段),通过宿主机的网络接口进行 NAT 转换,从而访问外部网络(互联网、局域网)。

 2. 核心特性
  1. 定位占用端口的进程

    • 在Windows中(PowerShell/命令提示符):
      netstat -ano | findstr :26203    查找占用26203端口的进程PID  
      tasklist | findstr <PID>         查看该PID对应的进程名称  
    • 在WSL2中(需安装net-tools):
      sudo netstat -tulpn | grep 26203    检查WSL2内部是否有进程占用  
  2. 释放冲突端口

    • 若占用进程为非必要程序,直接在Windows任务管理器(通过PID查找)或WSL2中结束进程(kill -9 <PID>)。
  3. 修改Java程序端口
    若无法释放端口,修改Java程序的JMX端口为未被占用的值(例如26204),启动命令示例:

    java -Dcom.sun.management.jmxremote \  
         -Dcom.sun.management.jmxremote.port=26204 \  
         -Dcom.sun.management.jmxremote.rmi.port=26204 \  
         -Dcom.sun.management.jmxremote.ssl=false \  
         -Dcom.sun.management.jmxremote.authenticate=false \  
         -jar your-program.jar  

Edit on GitHub
Share this post

Previous
连接 AWS EC2 失败:DNS 污染导致解析异常
Next
RoomieSync:从课程作业到创业冲动