【问题标题】:WSL-2: Which ports are automatically forwarded?WSL-2:自动转发哪些端口?
【发布时间】:2021-02-07 08:13:44
【问题描述】:

我已经对 WSL-2 进行了一段时间的修改,但并不完全了解主机和 WSL-2 之间的流量是如何路由的。

在某些来源中,似乎 WSL-2 使用的所有端口都自动可供主机使用。比如this tutorial by Microsoft。 同样,我设法托管了一个 Jupyter 实例,该实例可通过 localhost:8888 直接在我的主机上使用。

但是,当尝试其他服务时,例如 ssh(也在非标准端口上尝试过),端口不会自动通过 localhost 变得可用,我必须使用分配给我的 WSL 发行版的 IP 地址(来自 @ 987654324@)

为了通过 localhost 提供服务,我找到了this portforwarding script,它有效。但我想了解为什么需要它。

为什么某些服务需要端口转发,而不是全部?

【问题讨论】:

    标签: networking windows-subsystem-for-linux portforwarding wsl-2


    【解决方案1】:

    我的困惑来自 WSL-2 的防火墙问题。

    我发现的是:

    • 在 WSL-2 中的端口上侦听的服务可以从主机访问为 localhost:<port>
    • 无法从主机外部访问 WSL-2 端口
    • WSL-2 端口可以通过netstat interface portproxy 或其他使用 WSL 实例 IP 地址的端口转发工具提供。

    防火墙不允许仅通过列出端口来访问 WSL 端口。我必须在我的防火墙规则中专门选择 iphlpsv 服务(IP 助手服务)以允许流量通过 WSL 实例。

    【讨论】:

    • 您能否详细说明您是如何设法托管 Jupyter 实例的?我正在尝试通过 wsl.exe SSH 到 EC2 实例,我认为这种阐述会有所帮助。
    【解决方案2】:

    当您运行 WSL-2 时,像虚拟机这样的机器会在您的窗口设备上运行。 Windows 将创建一个本地网络,与您的 LAN 相同,并将 WLS-2 连接到该网络。

    • 在您的 WSL2 上,您可以运行 ip a | grep eth0,结果如下:

    5: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 inet 172.27.5.124/20 brd 172.27.15.255 范围全局 eth0

    • 然后在 Windows 上的终端(或 PowerShell)上运行 ipconfig,在结果中找到,如下所示:
    Ethernet adapter vEthernet (WSL):
    
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : fe80::1532:a8ea:6b34:8df2%73
       IPv4 Address. . . . . . . . . . . : 172.27.0.1
       Subnet Mask . . . . . . . . . . . : 255.255.240.0
       Default Gateway . . . . . . . . . :
    

    WSL-2 和 Windows 设备在同一网络上,并且 WSL-2 未连接到您的 LAN。

    我的解决方案(在 Windows 上使用端口转发)

    在 Windows 上用管理员打开终端,然后运行脚本:

    netsh 接口 portproxy 设置 v4tov4 监听端口=8888 监听地址=0.0.0.0 连接端口=8888 连接地址=$(wsl 主机名 -I)

    【讨论】:

    • 欢迎来到 Stack Overflow。感谢您的贡献,但在大多数情况下,这并没有添加 OP 在问题和答案中尚未涵盖的任何内容。特别是,现有答案中提到了您使用 netsh interface portproxy 的“我的解决方案”。另请注意,原始问题并未询问 LAN 访问,仅询问 localhost 访问。只有 OP 的自我回答提到了 LAN 访问。
    【解决方案3】:

    按照这些步骤帮助我在 Windows 上本地连接到我的端口:

    1. 使用here 中的脚本并将端口更改为您需要转发的端口。将此文件保存到路径。
    2. 在wsl中,sudo apt install net-tools
    3. 在 powershell(管理员模式)中,type ".\script.ps1" | powershell.exe -c -。这是运行文件。右键单击文件“使用 powershell 运行”将不起作用。
    4. 要测试它是否有效,请在 powershell 中输入 netsh interface portproxy show v4tov4

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2018-05-01
      • 2012-03-20
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多