如何將 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. 使用該位址,例如通常使用 localhost 的 172.26.224.1 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-VPN套件。如果您按照 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

相關內容