![WSL2 使用時のネットワークの問題](https://rvso.com/image/1628807/WSL2%20%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E5%95%8F%E9%A1%8C.png)
現在、開発には 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 はインターネット ネットワーク アダプターと適切にブリッジされていない仮想アダプターを作成します。
この記事では以下の点を指摘しています。
WSLでは、サーバーがIPv4を使用していることを確認する
WSLでファイアウォールを使用している場合は、関連するポート(3390)を許可します。
Windows では、管理者権限を持つコマンド プロンプトまたは Powershell を使用して、ポートをパブリック IP ポートから WSL ポートに転送します。
netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
Windows では、新しい受信規則を使用して、Windows ファイアウォールを通過できるポートを許可します。
インターネットからアクセスする場合は、ルーターのポートにポート転送を設定します。
若干の違いはあるものの、そのプロセスを説明したYouTube動画は WSL 2 ネットワーキング。
答え2
これを機能させるには、次の 3 つのものが必要でした。
- 最新バージョンのWindowsにアップグレードする
wsl --shutdown
- 設定 > ネットワークとインターネット > ネットワークをリセットここで説明
答え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