WSL を Windows ローカルホストに接続するにはどうすればいいですか?

WSL を Windows ローカルホストに接続するにはどうすればいいですか?

Windows 上で WSL にローカルホスト プロキシ (実際は 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)を使用します。 curl -I 172.26.224.1 の WSL2 での出力

答え2

管理者として実行される PowerShell で次のコマンドを実行する必要があります。

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

このコマンドはここから来ていますWSL2 チケットWSL2 では IP が毎回変更されるため、WSL IP アドレスに関連するファイアウォール ルールは有効になりません。

編集 2023: 新しいネットワークミラーモードそして新しいファイアウォール管理ツール実装されました。

答え3

WSL 2 では、WSL 1 と比較して追加の作業が必要になります。

  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.7Publicプロファイルのみを確認します。次へ。

    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 サーバーに接続しました。

アップデート: WSL の IP アドレスは Windows を再起動するたびに変更されるため、自動的に取得してファイルを更新すると便利です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.internalIP アドレスを知らなくても Windows ホストにアクセスできるようになります。

ダウンロード後、

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.internalWSLから実行してみてください。たとえば、Fiddlerプロキシポートが8888の場合、

nc -v -w5 -z host.internal 8888

関連情報