我使用了以下配置,/etc/resolv.conf 是 WSL 自动生成的
```
[wsl2]
memory=18GB
localhostforwarding=true
```
在以前,我每次启动 WSL ,我必须执行以下 batch 脚本
``` batch
@
echo off
setlocal enabledelayedexpansion
rem Set Variables
set wsl_hosts=wsl.local
set win_hosts=win.local
set HOSTS_PATH=%windir%\System32\drivers\etc\hosts
rem Greping IPs
for /f %%a in ('wsl -- bash -c "ip r | grep default | head -1 | cut -f3 -d ' '"') do set winip=%%a
for /f %%a in ('wsl -- bash -c "hostname -I"') do set wslip=%%a
echo win ip: %winip%
echo wsl IP: %wslip%
echo Setting below lines to Clipboard...
echo !wslip! !wsl_hosts! # wsl_hosts
echo !winip! !win_hosts! # win_hosts
rem clear clipboard
echo off | clip
rem write to clipboard
(
echo %wslip% %wsl_hosts% # wsl_hosts
echo %winip% %win_hosts% # win_hosts
) | clip
echo Done
rem echo new blank line
echo.
echo Opening editor to replace Hosts file manually...
start explorer.exe C:\Windows\System32\drivers\etc\hosts
echo.
echo Ready to exec below lines, [press Any Key to continue] when you updated the host file
echo ipconfig /flushdns
pause >nul
ipconfig /flushdns
endlocal
```
上述脚本设置了两个 host 映射 `wsl.local` 以及 `win.local` ,并把映射写到粘贴板,再打开 hosts 文件,人手粘贴更新,最后在 cmd 界面按下任意按键执行 DNS 缓存刷新。
操作完之后,可以通过 `wsl.local` 访问到 wsl 里的服务端口,通过 `win.local` 访问到 Windows 里的服务端口,在 Windows 里使用 localhost 也能访问到 wsl 里。
在今年不知道哪个版本开始,wsl 的 IP 固定了,基本上也就不需要执行上面的脚本了,但每次我开启 wsl 还是执行它,确认 host 有没有更新的必要。