WSL2 使用時のネットワークの問題

WSL2 使用時のネットワークの問題

現在、開発には Windows10 と WSL2 を Ubuntu 20.04 で使用しています。ほとんどの場合、これは 1 つの問題を除いてうまく機能します。Windows/WSL2 間のネットワーク層に何か問題があるようです。'ng serve' を使用して Angular を提供する場合、Windows からアクセスできません。

VS Code でターミナルを使用し、ターミナル出力のリンクからブラウザーを開いた場合にのみ、Windows がそれを開きます。ただし、「localhost:4200」は開かれず、プロキシで許可されていない 127.0.0.1:「ランダム ポート」が開かれます。つまり、Angular アプリケーションは表示されますが、使用できません。これを行うと、アプリケーションは localhost:4201 から使用できるようになりますが、VS Code から開く前は使用できなくなります。つまり、他のターミナル (新しい Windows ターミナルや ConEmu など) を使用してアプリケーションを起動することはできません。

私の知る限り、これは Linux インストール自体の問題ではなく、Windows の問題ですが、Linux インストールのすべてのデータを失うことなく WSL2 の Windows 部分を「再インストール」する方法が見つかりませんでした。何かアドバイスがあれば、ぜひ教えてください。

答え1

私の答えは記事に基づいています WSL 2からパブリックサーバーを実行する理論的には、Windows はインターネット ネットワーク アダプターと適切にブリッジされていない仮想アダプターを作成します。

この記事では以下の点を指摘しています。

  1. WSLでは、サーバーがIPv4を使用していることを確認する

  2. WSLでファイアウォールを使用している場合は、関連するポート(3390)を許可します。

  3. Windows では、管理者権限を持つコマンド プロンプトまたは Powershell を使用して、ポートをパブリック IP ポートから WSL ポートに転送します。

     netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
    
  4. Windows では、新しい受信規則を使用して、Windows ファイアウォールを通過できるポートを許可します。

  5. インターネットからアクセスする場合は、ルーターのポートにポート転送を設定します。

若干の違いはあるものの、そのプロセスを説明したYouTube動画は WSL 2 ネットワーキング

答え2

これを機能させるには、次の 3 つのものが必要でした。

  1. 最新バージョンのWindowsにアップグレードする
  2. wsl --shutdown
  3. 設定 > ネットワークとインターネット > ネットワークをリセットここで説明

答え3

私もこれに遭遇しました。これが私の解決策です:WSL2-ポートフォワード.cmd

ポート プロキシとファイアウォールのルールを自動的に処理し、後処理も自動的に行います。

@ECHO OFF
SET LXDISTRO=MyWSL2vm & SET WSL2PORT=3399 & SET HOSTPORT=3398
NETSH INTERFACE PORTPROXY RESET & NETSH AdvFirewall Firewall delete rule name="%LXDISTRO% Port Forward" > NUL
WSL -d %LXDISTRO% -- ip addr show eth0 ^| grep -oP '(?^<=inet\s)\d+(\.\d+){3}' > IP.TMP
SET /p IP=<IP.TMP
NETSH INTERFACE PORTPROXY ADD v4tov4 listenport=%HOSTPORT% listenaddress=0.0.0.0 connectport=%WSL2PORT% connectaddress=%IP% 
NETSH AdvFirewall Firewall add rule name="%LXDISTRO% Port Forward" dir=in action=allow protocol=TCP localport=%HOSTPORT% > NUL
ECHO WSL2 Virtual Machine %IP%:%WSL2PORT%now accepting traffic on %COMPUTERNAME%:%HOSTPORT%

次のコマンドを実行します:

.\WSL2-PortForward.cmd

結果:

WSL2 Virtual Machine 172.17.109.95:3399 now accepting traffic on MYCOMPUTER:3398

答え4

これらを実行すると問題は解決しました:

管理者としてHyper-Vマネージャーを開く

PCを選択し、仮想スイッチマネージャーを開きます

WSLを選択

外部ネットワークに設定

トラフィックが通過するネットワークカードを選択します

次に、wsl2ターミナルにログインしてIPアドレスを設定します。例:

sudo ip addr flush dev eth0 sudo dhclient eth0

私がそれを見つけたのはここです:https://stackoverflow.com/a/62438375/10853017

関連情報