如何让运行在 WSL2 上的节点服务器通过 LAN 转发,以便可以通过电话访问?

问题描述 投票:0回答:1

我尝试过以下方法:

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

https://medium.com/codemonday/access-wsl-localhost-from-lan-for-mobile-testing-8635697f008

https://superuser.com/questions/1679757/how-to-access-windows-localhost-from-wsl2

https://superuser.com/questions/1131874/how-to-access-localhost-of-linux-subsystem-from-windows

https://superuser.com/questions/1732399/cannot-communicate-with-windows-localhost-from-wsl2

https://superuser.com/questions/1594420/cant-access-127-0-0-180-outside-of-wsl2-ubuntu-20-04

https://www.reddit.com/r/vscode/comments/11bp9oo/how_do_i_access_live_server_from_phone_i_tried/

https://www.reddit.com/r/bashonubuntuonwindows/comments/m1eb49/cant_access_web_server_from_wsl2_on_my_home/

https://learn.microsoft.com/en-us/windows/wsl/networking#accessing-a-wsl-2-distribution-from-your-local-area-network-lan

它们都有一个共同的程序:

  • 为相关端口创建防火墙例外
  • 在管理员 PowerShell 中运行:
    netsh interface portproxy add v4tov4 listenport=3001 listenaddress=0.0.0.0 connectport=3001 connectaddress=(wsl hostname -I)
  • 使用
    ipconfig
  • 在 PowerShell 中查找 Windows IPv4 地址
  • 在手机上,连接到同一个wifi网络
  • 前往
    <windows_IPv4_address>:3001
  • 为了更好地衡量,在 Node.js Express 应用程序中,我运行:
server.listen(PORT, '0.0.0.0', ()=> {
    console.log(`⚡️ listening on ${PORT}`);
})

发生了什么:

  • 在手机上访问
    <windows_IPv4_address>:3001
    localhost:3001
    0.0.0.0:3001
    127.0.0.1
    超时
  • 尽管将
    localhost
    设置为
    0.0.0.0
     的参数,但只能在本地计算机上查看为 
    127.0.0.1
    ,而不是 
    '0.0.0.0'
    server.listen

所以这些说明不起作用。我想知道这些建议是否已经过时,我不确定我错过了什么。我希望从 LAN 访问 wsl2 localhost 以在移动设备上进行测试。谢谢

node.js windows-subsystem-for-linux wsl-2
1个回答
0
投票

如果

localhost
工作(从电脑本身)并且
127.0.0.1
和主机自己的 IP 地址(例如
192.168.1.110
)不工作 - 那么基本是错误的,应该首先排除故障。这是一个简单的 python http.server 运行并监听 wsl 中的
0.0.0.0
的屏幕截图:

0.0.0.0
是一个占位符,基本上表示“服务器拥有的任何 IP 地址”。如前所述,WSL 本质上是计算机内部的一个容器,这也意味着主机可能有一个对您隐藏的 IP,这是它与容器通信的 IP。在 WSl 容器内设置
0.0.0.0
并不意味着主机 PC 拥有的任何 IP 地址都会将流量转发到 WSL 您需要在配置中添加一些内容,以便主机将其外部 IP 上的流量转发到 WSL 容器。

举个例子,这里是相同窗口的屏幕截图,但在主机上运行完全相同的命令:

请注意,这次外部 IP

192.168.1.110
的响应与
localhost
127.0.0.1
相同。

阅读https://jwstanly.com/blog/article/Port+Forwarding+WSL+2+to+Your+LAN/你必须做一些端口转发。

在 WSL2 中执行

ip addr
并复制它(不适用于
lo
)。就我而言,它是
172.20.204.41

在您的主机上打开管理powershell窗口并执行

netsh interface portproxy add v4tov4 listenport=3001 listenaddress=0.0.0.0 connectport=3001 connectaddress=172.20.204.41

在同一个 PS 控制台中,执行
netsh interface portproxy show v4tov4
来验证您的更改。

如果不起作用,您必须在防火墙中打开该端口。

在主机上的PS窗口中执行

New-NetFirewallRule -DisplayName "WSL2 Port Bridge" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3001

这将打开 Windows Defender 防火墙中的端口:

注意我所有的屏幕截图都使用端口 8000,因为我不想在这方面花费太多时间 - 但所有命令都使用您问题中的端口(3001)。

© www.soinside.com 2019 - 2024. All rights reserved.