由于 WSL 2 基于 Hyper-V,其与宿主 Windows 的关系可以看作是同一网络下的不同主机。要实现 WSL 2 到 Windows 的通信,首先要让 WSL 2 知道 Windows 的 IP 地址。
在 Windows 中,打开终端,执行 ipconfig,可以看到 WSL 相关的网络信息:

需要注意的是,在没有特殊配置的情况下,电脑的 IP 地址通常会随网络环境的变化而变化,此处及后文的 IP 地址仅供参考,具体 IP 地址需要以自己实际操作时的输出为准。
通过 ipconfig 的输出可以发现,在 Windows-WSL 2 这一体系中,Windows 的 IP 地址为 192.168.176.1。
Linux 系统中,/etc/resolv.conf 为 DNS 配置文件,对于 WSL 2 也是如此。在 WSL 2 中,执行 cat /etc/resolv.conf,查看其中的内容:

可以发现,此处指向的 DNS 服务器 IP 为 192.168.176.1,正是 Windows 的 IP,说明 WSL 2 是借助 Windows 去寻找真正的 DNS 服务器的。
可以尝试在 WSL 2 中 ping Windows,即执行 ping `cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`,能 ping 通即表示 WSL 2 能通过网络访问 Windows。
因为每次启动 WSL 2 都会重新分配虚拟网络,可以在 ~/.bashrc 中加入 Windows 网络相关环境变量,便于后续使用:
# Windows 宿主机 IP WINDOWS_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}' | head -1) # Windows 宿主机代理端口 WINDOWS_PROXY_PORT=7890 # 更新 Windows 网络信息 function update_windows_net_info() { WINDOWS_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}' | head -1) WINDOWS_PROXY_PORT=7890 } 如果有需要的话,还可以在 update_windows_net_info 中将 Windows 的 IP 地址写入 /etc/hosts。
如果局域网内非本机 Windows 设备开放了防火墙入站,WSL 2 无需额外配置就能直接访问。
本机 Windows 可以直接通过 localhost 访问 WSL 2。
要实现局域网内非本机 Windows 设备访问 WSL 2,需要在 Windows 上配置端口转发以及防火墙入站规则。
为了便于操作,可以将配置端口转发和防火墙入站规则的操作封装成函数,在 Windows PowerShell 的配置文件 PROFILE 中添加以下内容:
# 添加 WSL 端口转发以及防火墙入站规则 function Add-WSLPortForwarding ($Port = '23333', $Protocol = 'TCP') { $WSLIP = wsl -- hostname -I $WSLIP =