在 WSL2 中,IP 地址是动态分配的,每次重启或恢复时都可能变化。获取 WSL2 当前 IP 地址的方法如下:
1. 在 WSL2 内部获取 IP
在 WSL2 终端中执行:
bash
# 方法一:查看 eth0 接口的 IP
ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1
# 方法二:使用 hostname 命令(更简洁)
hostname -I | awk '{print $1}'
示例输出:172.28.112.1
2. 在 Windows 宿主机上获取 WSL2 IP
在 Windows 的 PowerShell 或 CMD 中执行:
powershell
# 通过 wsl 命令直接获取
wsl hostname -I | ForEach-Object { $_ -split ' ' | Select-Object -First 1 }
该命令会返回 WSL2 虚拟网卡的 IP 地址(通常是 172.x.x.x 或 192.168.x.x)。
3. 在端口转发中的使用
当你使用 netsh interface portproxy 进行端口转发时,需要将 connectaddress 设置为这个动态 IP。例如:
powershell
# 假设获取的 WSL2 IP 为 172.28.112.1
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.28.112.1
由于 IP 可能变化,建议在每次 WSL2 启动后重新执行转发命令,或编写脚本自动完成:
powershell
$wsl_ip = wsl hostname -I | ForEach-Object { $_ -split ' ' | Select-Object -First 1 }
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=$wsl_ip