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

ygy*_*ygy 8 proxy localhost windows-10

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

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

WSL 是 Ubuntu 18.04

Mar*_*duk 8

与 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 选择TCP和Specific 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}'
Run Code Online (Sandbox Code Playgroud)

这是网络接口的 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
    
    Run Code Online (Sandbox Code Playgroud)


小智 7

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

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
Run Code Online (Sandbox Code Playgroud)

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


Ada*_*ter 5

我不确定以下内容是否适用于仅绑定到localhost 的应用程序,但这适用于 Fiddler 和 WSL2:

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

  2. 获取您的 WSL 网络连接信息(在我的机器上,适配器被称为vEthernet (WSL)) WSL 网络连接详细信息

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