通过本地网络连接到 WSL2服务器

我正在我的 Windows 10机器上使用 WSL2/Ubuntu 开发一个 Rails 应用程序,非常棒。

为了进一步清晰起见,我在 localhost: 3000上运行 Puma 服务器

我试过以下方法:

  1. 直接连接到分配给以太网适配器 vEthernet (WSL)的 IP 地址-> 172.26.208.1:3000
  2. 直接连接到主机的 IPv4地址-> 192.168.0.115
  3. 添加防火墙异常(使用 BitDefense)
  4. 绑定 rails s -b 172.26.208.1 -p 3000之上的 IP

到目前为止,上述方法都没有奏效... ... 我想做的是:

  • 在另一台笔记本电脑/平板电脑/手机上测试网站
  • 使用其他计算机的 VScode

我有没有遗漏什么至少能正确浏览网站?(如对 VScode 部分有任何意见,我们将不胜感激)

197382 次浏览

试试 -b 0.0.0.0 这就是其他操作系统的工作原理

选项1: 使用端口转发

这个对我很管用:

  1. 通过来自 xmeng1: https://gist.github.com/xmeng1/aae4b223e9ccc089911ee764928f5486的脚本运行端口转发

那个脚本中的防火墙命令在我的系统上不起作用。因此,我完全关闭了 Windows 防火墙,并使用了以下剥离版本。(最终用户将使用3D 防火墙,所以没关系)。

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';


if ($found)
{
$remoteport = $matches[0];
} else {
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}


#[Ports]


#All the ports you want to forward separated by coma
$ports=@(123,456);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


for ($i = 0; $i -lt $ports.length; $i++)
{
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}


#Then so something, e.g.
#bash.exe -c "cd /g-inverter; ./start_docker.sh"

对于脚本中的 ifconfig,您可能需要“ apt install net-tools”。还有一个解决方案,“ ip addr”在互联网的某个地方,不需要 ifconfig”在一个伟大的线程,我没有一个链接在这里,现在。

注意

这只适用于 TCP 流量。 netsh 接口端口代理不支持端口转发的 UDP 流量。

选项2: 桥接模式

解决方案: 从 NAT 切换到桥接模式

WSL2 comes by default in NAT mode. There the wsl2 system has another ip in another subnet than the host. The PC is from external peers only visible by the windows IP and the wsl2 ip/net is hidden/internal. So all traffic would need to be accepted by the windows IP and then forwarded to the wsl2 ip (port forwarding).

还有另一种模式叫做桥接模式。在桥接模式下,您的网络接口卡将共享给 wsl2系统,它将在 wsl2中获得自己的 IP/Net。因此,实际上您的网卡被两个系统(windows/wsl2)共享,并且将有两个 IP,就好像您有两个系统,每个系统都有自己的网卡一样。很酷的事情: 当 Windows 和你的 wsl2应用程序(比如111)使用相同的端口时,你永远不会有端口冲突。

启动连接模式

作为管理员打开 Hyper-V Manager

选择你的电脑,打开虚拟交换机管理器

选择 WSL

Set to external network

选择流量通过的网卡

然后登录到 wsl2终端并配置一个 IP 地址。

sudo ip addr add 192.168.0.116/24 dev eth0

您需要使用另一个免费的 IP (而不是您的 Windows IP)。如果您的网络有一个 DHCP 服务器,您的 wsl 可以通过以下方式获得:

sudo ip addr flush dev eth0
sudo dhclient eth0

注意

我还没有详细说明,如何让 DNS 在这种情况下工作的情况下,你想仍然能够访问互联网(适合等)。有一些来自 MS 的文档写在/etc/Resolv.conf 中,也许执行写在那里的内容并安装 Resolvconf (在上述所有步骤之前,因为一旦开始连接就没有互联网)可能会起到作用。

不幸的是,对我来说,这是一个简化的情况,因为我的家庭网络是由我的路由器定义的。由于我的家庭设备不使用背靠背连接进行通信,而且我的网络受到路由器防火墙的保护,所以我必须尊重路由器的配置。

  1. 有一个 DNS 的列表-8.8.8.8.8.8.4.4,9.9.9.9支持我的 ISP DNS。这意味着必须精心制作 Resolv.conf。 Nslookup 反映了正确的配置。
  2. 可以将 DHCP 中继配置为外部 DHCP
  3. 我可以定义和配置设备如何获得动态 IP,包括静态租约。它假设设备使用正确的 DHCP IP 地址。
  4. 当然,我可以为路由器设备配置已知的端口转发。
  1. 在 WSL 上安装 ssh 服务器

  2. 在窗口中找到一些 ssh 客户端

  3. 在 Windows 上执行: (Windows 的 IP 为192.168.x.x,WSL IP 为172.28.x.x)

    ssh -L 192.168.x.x:3000:172.28.x.x:3000 someuser@172.28.x.x

如果它不能工作,尝试使用另一个本地端口,如(192.168.x. x: 3001:172.28.x. x: 3000)

关于桥接模式—— Windows 将防止在任何 Linux 发行版运行时修改 WSL 虚拟交换机(访问拒绝错误)。另一方面,WSL 交换机是在第一个 Linux 发行版启动时创建的。 我是这样做的:

  1. Started wsl
  2. 左边的 wsl shell 并检查所有发行版是否已停止(wsl-l-v)
  3. 改进的 WSL 虚拟交换机
  4. 又开始 WSL 了

看看这个视频,它帮助了我:

https://www.youtube.com/watch?v=yCK3easuYm4

netsh interface portproxy add v4tov4 listenport=<port-to-listen> listenaddress=0.0.0.0 connectport=<port-to-forward> connectaddress=<forward-to-this-IP-address>

比如说

netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=172.30.16.3

微软已经在他们的 WSL1到 WSL2比较页上发布了一些关于这方面的信息

让您的 WSL2发行版像网络上的任何其他客户端一样工作

基于 Roelofs 的第二条建议,以下是我的情况。不幸的是,我太年轻了,不能随便留言。

我的出发点:
赢10分
WSL2下的 Ubuntu
(带 Linux 容器的 Docker)

我的目标是:
Getting an rtmp stream from a client on the network into and back out of an nginx server running on the Ubuntu machine.

搭桥

在我的情况下,我无法让 Hyper-V 正确地架设桥梁。在 Hyper-V Manager 的 Virtual switch 部分为 WSL 开关选择 外部网络并点击 application 之后,它最终以错误0x80070490失败。不知道为什么,也没时间调查。WSL 没有运行,Docker 服务也没有运行。

相反,我只是将设置保留在 内部网络上,并在 Network Connections (run-> ncpa.cpl)下以手动方式桥接接口。在我的情况下,WiFi 连接和 以太网(WSL)。 这样做之后,我立即失去了互联网连接,我花了很长时间才发现需要重新启动。(这一次窗户没有要求我这么做!)

让虚拟机恢复正常

重新启动后,我现在可以从主机上访问互联网,网桥被设置为 DHCP,并继承了 WiFi 接口的 IP (192.168.1.246)。很好。

然而,虚拟机仍然获得虚拟交换机的 IP 地址(或者不管你想怎么查看它,Windows 似乎分配给交换机和虚拟机的随机172.x.x.x 地址)。

启动 Ubuntu,我决定做一个:

sudo ip addr flush dev eth0

继续:

sudo dhclient eth0

自从我使用 Windows 商店的普通 Ubuntu 发行版,没有 系统,没有乐趣,我就犯了一些错误。尽管如此,它还是设法将桥的 IP 添加到 eth0。由于这个不是很方便,我用以下方法摆脱了它:

sudo ip addr del 192.168.1.248/24 dev eth0

但在此之前,我先看了一眼路由表:

user@vm:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

删除旧 IP 后,我从 DHCP 范围之外添加了一个独特的 IP:

sudo ip addr add 192.168.1.50/24 dev eth0

我又检查了一遍路由表,第一条记录不见了。在这个阶段,我可以 ping LAN,但不是 WAN。

在条目后面添加了:

sudo ip route add default via 192.168.1.1 dev eth0

现在可以对广域网 IP 进行定位,但是没有 DNS 解析。 添加永久 DNS 如果解决方案不见了,这就是 非静电干扰的功劳:

Create a file: /etc/wsl.conf.
Put the following lines in the file


[network]
generateResolvConf = false


In a cmd window, run wsl --shutdown
Restart WSL2
Create a file: /etc/resolv.conf. If it exists, replace existing one with this new file.
Put the following lines in the file


nameserver 8.8.8.8


Or the IP of whatever DNS server you want to use, repeat step 3 and 4.

因此,最后,检查您的路由和设置您的 DNS-conf 正确。不幸的是,每次重新启动 WSL 时都会恢复 IP 设置。如果你不同意这样做手动每次有关于如何自动化它 给你给你的讨论。我还没来得及找到我最喜欢的。

最好的问候 亚历山大

这里有一个解决方案,可能比许多其他已提供的方案更简单。除了正在使用的 WSL2实例之外,还需要安装了 socat的 WSL1实例。

在 WSL1实例上,像这样启动 socat:

socat -d TCP-LISTEN:3000,reuseaddr,fork TCP:localhost:3000

When you start socat like this, Windows will ask if you want to allow network access to the port. Confirm.

确保彪马绑定到所有接口上的3000端口。

您现在可以从局域网访问您的开发服务器。这里发生的情况是 socat 将请求转发到以太网端口上的3000,然后将请求转发到 localhost 上的3000,这将神奇地被 Windows 转发到 WSL2。

(I'm currently using this exact setup to access my Django dev server on WSL2 from an iOS app on my LAN.)

考虑到上述(正确的)解决方案,这是一个简化的一行程序版本,为我工作:

  1. 使用“ ifconfig”查找 wsl2公共 IP 地址。请记住,当 Windows 重新启动时,Hyper-V Switch IP 每次都会发生变化,因此 wsl2中的 Public IP 也会发生变化。 enter image description here
  1. 使用连接地址参数中前一步中找到的 IP 运行以下命令:

    netsh interface portproxy add v4tov4 listenport= listenaddress=0.0.0.0 connectport= connectaddress=172.24.26.277

Parameters explanation:

  • listenport: the port that Windows will listen

  • listenaddress: the address that your Windows will listen. Usually 0.0.0.0 should do.

  • connectport: the port that your Linux Distro through wsl2 will listen.

  • connectaddress: the public IP of your Linux wsl2 instance (found in step 1)

Use cmd or PowerShell as Administrator to run the above command.

下面是我发现的用于局域网开发的完整 三步,可以访问运行在 WSL2(Windows 1020H2上的 Ubuntu 20)中的内容:

1. One time at the start: open Expo ports inbound in Windows Firewall

Windows 防火墙 应该为ーー don't turn it off!ーー,默认情况下应该阻止入站尝试。

下面将打开端口19000-19001,入站,但只能在配置为“ private”的网络上使用(这是 -Profile Private的一部分,如果您在域上,则用 Domain替换) :

  • 用所需的端口替换 19000-19001
  • DisplayName替换为一个适合您的 DisplayName,这对于以后查找规则非常方便。

(powershell as Admin)

New-NetFireWallRule -Profile Private -DisplayName 'Expo ports for LAN development' `
-Direction Inbound -LocalPort 19000-19001 -Action Allow -Protocol TCP

(您可以在之后用 Get-NetFirewallRule |Where-Object {$_.DisplayName -Match "Expo.*"}检查它ーー将 -Match参数替换为您选择的 DisplayName)

2. 点 portproxy到 WSL; 重新运行“每次 WSL 有一个新的 IP 地址”

(我还不确定 WSL IP 地址变化的频率,但我怀疑只有重新启动才会变化)

我在网上看到了一些东西,包括这里的其他答案,比如说对 connectaddress=127.0.0.1的端口代理,但是它确实为我工作(WSL2,Windows 1020H2)。
我不能说为什么其他人发现它工作,我只能说,重复测试证实了我的 127.0.0.1不工作,但 WSL 的 IP 地址工作。

因此,这里有一个可重用的命令来自动将 Connectaddress 设置为正确的 WSL 地址:
(Powershell ーー仅用于简单的内联 Trim()ーー作为管理员)

netsh interface portproxy add v4tov4 listenport=19000 listenaddress=0.0.0.0 `
connectport=19000 connectaddress=$($(wsl hostname -I).Trim());


netsh interface portproxy add v4tov4 listenport=19001 listenaddress=0.0.0.0 `
connectport=19001 connectaddress=$($(wsl hostname -I).Trim());

3. (可选)如果您的 WSL 需要知道您的开发机器 LAN IP 地址

(例如二维码流动应用程式,例如 Expo)

您需要在 WSL 内部重新运行以下命令“每次 dev 主机有一个新的 IP 地址”

  • 这可能是变化最频繁的一个。当你改变网络(如家庭/办公室)时,你的笔记本本地网络 IP 肯定会发生变化,其他时候也会发生变化。

幸运的是,它也是可糊的/别名的:
WSL2 shell

netsh.exe interface ip show address "Wi-Fi" | grep 'IP Address' | sed -r 's/^.*IP Address:\W*//'


# e.g. for Expo, I used:
export REACT_NATIVE_PACKAGER_HOSTNAME=$(netsh.exe interface ip show address "Wi-Fi" | grep 'IP Address' | sed -r 's/^.*IP Address:\W*//')


echo Meteor will use dev machine IP address: $REACT_NATIVE_PACKAGER_HOSTNAME

I "wish I didn't have to re-run things and it could all be automated",
但是同样的懒惰使我很高兴至少有命令2(和命令3)可以“重新运行”,并且始终能够访问我的 WSL2托管服务所需的局域网。

最后,我得到了一个解决方案,它必须在 Windows 主机启动后运行一次,同时处理多个 WSL2实例,并且在 WSL2实例重新启动时不必重新运行!

缺点: 不能监听0.0.0.0; 必须指定 IP 或适配器来显式监听。(此版本只侦听一个 IP 地址,但可以很容易地扩展为使用列表)。

$ports = @(8000,8001);     # ports to forward
$iface = "Ethernet";       # alias of the Adapter to listen on


# if your host has a fixed IP, you can specify it here explicitly
# and remove the ping-and-if safeguard;
# but 0.0.0.0 won't work!
$external_ip = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias $iface).IPv4Address;


ping -n 1 "$external_ip" > $null


if( !$?  ) {
echo "error: cannot determine the external IP address";
exit 1;
}


$firewall_rule_name = "WSL2 Firewall Hole"
Remove-NetFireWallRule -DisplayName "$firewall_rule_name"


New-NetFireWallRule -DisplayName "$firewall_rule_name" -Direction Outbound -LocalPort $ports -Action Allow -Protocol TCP
New-NetFireWallRule -DisplayName "$firewall_rule_name" -Direction Inbound -LocalPort $ports -Action Allow -Protocol TCP


ForEach( $port in $ports ) {
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$external_ip
netsh interface portproxy add v4tov4 listenport=$port listenaddress=$external_ip connectport=$port connectaddress=127.0.0.1
}

图片来源:

  • 起点是 edwindijas 关于 WSL Github 问题 # 4150的 这个剧本
  • Charl Botha 从 这个答案中收集了使用 localhost而不是获取正在运行的 WSL2实例的 IP 地址的想法。

最初的 edwindijas 脚本对我来说不起作用,因为我在有限的用户下运行 WSL2,脚本必须作为管理员运行,而作为管理员运行 bashwsl -e会得到一个具有不同 IP 地址的新 WSL2实例。

首先,您需要在您的计算机中打开一个端口,以便能够从您的网络访问它。

netsh advfirewall firewall add rule name="Allowing LAN connections" dir=in action=allow protocol=TCP localport=5000

在您打开端口(在我的例子中是5000)之后,您将需要使端口从这个端口转发到您的应用程序在 WSL 中侦听的端口。

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=5000 connectaddress=localhost connectport=<the port that your app is listening on>

注意: 我将 连接地址设置为 localhost而不是 WSL 的 IP 地址,因为默认情况下,发送到 localhost 的请求会被转发到 WSL。通过这样做,您不必在每次重新启动计算机时都设置端口转发,因为 WSL 的 IP 地址是动态的。

WSL2在本地接口上公开端口(这就是为什么在 Windows 中,当 8080服务在 WSL2中运行时,你可以访问 localhost:8080) ,但是它们监听 127.0.0.1(这就是为什么你不能在其他计算机上访问你的 LAN)。

有一个名为 WSLHostPatcher 的工具可以解决这个问题,您可以在这里找到它(通过发布版本部分下载) : https://github.com/CzBiX/WSLHostPatcher

WSLHostPatcher 更改监听所有 IP 的行为,将任何 WSL2服务公开给网络上的所有计算机。

  1. https://github.com/CzBiX/WSLHostPatcher/releases下载最新版本(我测试了 v0.1.0)
  2. 解压文件
  3. 运行 WSLHostPatcher.exe
  4. (重新)在 WSL2中启动服务

该服务现在应该可以通过网络上的其他计算机访问。

另一种解决方案是将 WSL2直接连接到相关的网络适配器。我试过在 Hyper-V 里面做,但是没有成功。然而,真正起作用的是到 Control Panel\Network and Internet\Network Connections,选择 NIC (在我的例子中是 Ethernet 3)和 vEthernet (WSL),然后通过右键单击并选择“桥接连接”来连接它们:

Bridge Connections Menu Item

你应该得到这样的结果:

Bridged Connections

在桥梁建立之后,让 Windows 做它的事情一分钟左右(真的!) ,然后继续。

接下来打开 WSL,让它运行 dhcp 来获得一个新地址:

sudo ip addr flush dev eth0 && sudo dhclient eth0

At this point, both WSL and Windows should have connectivity. Check by pinging some IP address like 1.1.1.1 or 8.8.8.8. If that doesn't work, dismantle the bridge and try again. Remember to wait for a minute or two while Windows configures everything.

另外,确保 eth0有一个来自 LAN (ip addr sh eth0)的地址。

现在的问题是,WSL 可能无法解析域名,因为 WSL 在启动时创建 /etc/resolv.conf,它指向不再存在的虚拟网关。可以通过要求 wsl 不要创建 /etc/resolv.conf来解决这个问题,方法是将以下内容附加到 /etc/wsl.conf(如果不存在则创建文件) :

[network]
generateResolvConf=false

然后通过重新启动 LxssManager窗口服务来重新启动 wsl。 剩下的唯一事情就是在 WSL 中设置替代 DNS 服务器。代替生成的 /etc/resolv.conf,只要创建一个 /etc/resolv.conf,其内容如下:

nameserver 1.1.1.1
nameserver 1.0.0.1

就是这样! WSL 现在应该连接到您的网络,并在网络上有自己的唯一地址。

所以,在过去的两天里,我在这个问题上挣扎了一段时间,似乎没有任何东西起作用,无论是在这条线上还是在别的地方。我最终通过拼凑我所看到的一些东西得到了解决,我想我应该把我的解决方案贴在这里,以防它对任何人都有帮助。不过有几点需要注意。首先,我肯定不是 Linux 专家,所以“它能工作”只是我真正唯一的考虑:)其次,这是在一个家用开发服务器上,这意味着安全不是我最大的问题(服务器不会以任何方式暴露在我的局域网之外) ,所以我做了一些事情,我不会在一个真正的,重要的机器上做。最后,我不需要它一直工作,这意味着我可以在服务器重启后自己做一些事情来让它全部工作。

考虑到所有这些,第一步是,正如上面麦芽所描述的,将 WSL 适配器与服务器的物理适配器连接起来。在我的例子中,服务器有一个静态 IP,所以我配置了 NetworkBridge 适配器,它为 IPv4提供了一个静态 IP、网关和 DNS 服务器。

之后,我在主目录中编写了以下名为 Start _ asks. sh的脚本:

#!/bin/bash


clear
echo Running startup tasks...


# Clear existing IP config
sudo ip addr flush eth0
echo .
sleep 2
# Add static IP
sudo ip addr add 192.168.1.100/24 dev eth0
echo .
sleep 2
# Remove existing default gateway
sudo ip route del default
echo .
sleep 2
# Add default gateway
sudo ip route add default via 192.168.1.1
echo .
sleep 2
# Remove existing name resolution config file
sudo rm /etc/resolv.conf
echo .
sleep 2
# Create name resolution config file
sudo touch /etc/resolv.conf
echo .
sleep 2
# Update permissions on file so we can edit it
sudo chmod 777 /etc/resolv.conf
echo .
sleep 2
# Add name servers
sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo .
sleep 2
sudo echo "nameserver 1.1.1.1" >> /etc/resolv.conf
echo .
sleep 2


echo - Static IP set
echo .
echo ...done!

为了实现这一点,我还必须确保我的用户帐户拥有 sudo 权限而不需要密码,因此这被添加到 sudoer 的文件中:

devuser=(ALL) NOPASSWD:ALL

我只是在服务器重新启动后运行这个脚本,结果是 WSL 获得一个静态 IP 地址,我运行的所有服务器(都在 Docker 容器中,尽管我从上面的脚本中删除了所有内容)都可以访问。

对我来说,就这么简单。

我也考虑过写一个简单的。Vbs 文件,并将其放到我的启动文件夹中,以便在重新启动后自动运行该脚本。这应该可以工作的很好,使它完全自动化,但我只是还没有做到这一点。

WSL2-PortForward. cmd

@ECHO OFF
REM ** Set WSL Distro, Distro Port, Host Port
SET LXDISTRO=WinKDE
SET WSL2PORT=3389
SET HOSTPORT=13389
REM ** Reset any existing port proxies and delete any stale firewall rule
NETSH INTERFACE PORTPROXY RESET & NETSH AdvFirewall Firewall delete rule name="%LXDISTRO% Port Forward" > NUL
REM ** Get IP from WSL2 instance and write it out to IP.tmp
WSL -d %LXDISTRO% -- ip addr show eth0 ^| grep -oP '(?^<=inet\s)\d+(\.\d+){3}' > IP.TMP
REM ** Read IP.tmp back into batch variable
SET /p IP=<IP.TMP
REM ** Create the port proxy
NETSH INTERFACE PORTPROXY ADD v4tov4 listenport=%HOSTPORT% listenaddress=0.0.0.0 connectport=%WSL2PORT% connectaddress=%IP%
REM ** Create a new firewall rule for the port listening on the LAN
NETSH AdvFirewall Firewall add rule name="%LXDISTRO% Port Forward" dir=in action=allow protocol=TCP localport=%HOSTPORT% > NUL
REM ** Summary
ECHO WSL2 Virtual Machine %IP%:%WSL2PORT%now accepting traffic on %COMPUTERNAME%:%HOSTPORT%

Output::

WSL2 Virtual Machine 172.17.109.95:3389 now accepting traffic on MYCOMPUTER:13389

我在 wsl2中有一个应用程序监听端口 4200,在一个 管理员升级 Powershell中:

添加代理

netsh interface portproxy add v4tov4 listenport=8080 connectport=4200 connectaddress=127.0.0.1

请注意缺少 listenaddress=参数和不同的监听端口 8080而不是 4200

添加防火墙规则

netsh advfirewall firewall add rule name= "Open Port 8080" dir=in action=allow protocol=TCP localport=8080

然后在我的无线连接手机访问 http://192.168.1.2:8080

Cleaning up

您可以使用 netsh interface portproxy delete v4tov4 listenport=8080删除代理,使用 netsh advfirewall firewall delete rule name="Open port 8080"删除防火墙规则

笔记

显然,改变你的端口到你的情况和 192.168.1.2到你的个人电脑 IP 在你的局域网。用 ipconfig找到它。您可能需要确保在 wsl2中运行的代码绑定在 0.0.0.0上。

祝你好运。

对于一个可能和我一样绝望的人来说

I tried so many ways, I was desperate things get messed up, I can't even keep accessing localhost:3000 as default (at first, I could)

我将 wsl2转换为 wsl 并将其转换回 wsl2(看起来我重置了 wsl2的所有配置,不管怎样,我不确定) 然后我只是添加了端口代理,并没有做更多的工作,它工作

PS C:\Windows\system32> netsh interface portproxy add v4tov4 listenport=3001 listenaddress=0.0.0.0 connectport=3001 connectaddress=localhost


PS C:\Windows\system32> netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=localhost


PS C:\Windows\system32> netsh interface portproxy show all


Listen on ipv4:             Connect to ipv4:


Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         3001        localhost       3001
0.0.0.0         3000        localhost       3000