如何将 wsl 连接到 Windows 本地主机?

如何将 wsl 连接到 Windows 本地主机?

我正在尝试让 WSL 在我的 Windows 上使用本地主机代理(实际上是它的 Fiddler),但我看不到任何这样的连接,并且下载通常会失败,我该如何解决这个问题?

我知道我可以从 Windows 连接到 Linux 本地主机,但是我该如何逆转这一过程呢?

WSL 是 Ubuntu 18.04

答案1

我不确定以下内容是否适用于绑定到只是localhost,但这适用于 Fiddler 和 WSL2:

  1. 设置Fiddler选项“允许远程计算机连接”,并重启Fiddler Fiddler 选项:允许远程计算机连接

  2. 获取你的 WSL 网络连接信息(在我的计算机上,该适​​配器称为vEthernet (WSL)WSL 网络连接详细信息

  3. 使用该地址,例如 172.26.224.1,而您通常使用 localhost WSL2 中的 curl -I 172.26.224.1 输出

答案2

您应该在以管理员身份运行的 powershell 中运行以下命令:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

此命令来自此WSL2 门票。任何与 WSL IP 地址相关的防火墙规则都不会有效,因为 WSL2 IP 每次都会发生变化。

编辑 2023:一个新的网络镜像模式和一个新的防火墙管理工具已经实施。

答案3

与 WSL 1 相比,WSL 2 需要一些额外的工作。

  1. 允许所需端口通过防火墙。

    1.1 发布Windows Defender Firewall with Advanced Security

    1.2 在左侧窗格中选择Incoming Rules

    1.3 在右侧窗格中单击New Rule

    1.4 对于规则类型,选择Port。下一步。

    1.5 选择TCPSpecific local ports。插入端口、逗号分隔的端口列表或端口范围。下一步。

    1.6 选择Allow connection。下一步。

    1.7 仅检查Public配置文件。下一步。

    1.8 输入规则的名称。例如WSL。完成。

  2. 从其中找出 WSL 的 IP 地址:

grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'

这是网络接口的 IPv4 地址vEthernet (WSL)

  1. curl使用或测试与 Windows 主机的连接telnet

    3.1curl ip.from.step.2:port

我已经使用此过程连接到在 Windows 上运行的 Oracle 服务器和 X 服务器。

更新:由于每次Windows重启时WSL的IP地址都会改变,因此自动获取并更新文件会比较方便hosts

在 WSL 中:

  1. 执行cat /etc/hosts以找出 Windows 主机的名称。

  2. 添加以下代码到~/.profile

    HOST=<WINDOWS_HOSTNAME>
    IP_HOST=$(grep -m 1 $HOST /etc/hosts)
    OLD_IP=$(echo "$IP_HOST" | awk '{print $1}')
    NEW_IP=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}')
    
    if [ "$NEW_IP" != "$OLD_IP" ]; then
       echo "Updating IP Address-hostname mapping"
       sudo sed -i "s|$IP_HOST|$NEW_IP\t$HOST|" /etc/hosts
       echo "$HOST has the IP Address $NEW_IP"
    fi
    

答案4

有一个方便的“功能”WSL-VPNKit。如果您按照 README 说明安装并导入此发行版,则您可以使用它host.internal来访问 Windows 主机而无需知道其 IP 地址。

下载后,

wsl --import wsl-vpnkit --version 2 $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz

添加到你的 ~/.bashrc,

wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit status >/dev/null || wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit start

重新加载终端后,尝试host.internal从 WSL 中点击。例如,如果 Fiddler 代理端口是 8888,

nc -v -w5 -z host.internal 8888

相关内容