WSL を使用したネットワーク アプリケーションへのアクセス

ネットワーク アプリを使用する場合は、Windows アプリから Linux ネットワーク アプリにアクセスするにせよ、または Linux アプリから Windows ネットワーク アプリにアクセスするにせよ、注意すべき考慮事項がいくつかあります。使用している仮想マシンの IP アドレスを特定することが必要になる場合があり、これはローカルの物理マシンの IP アドレスとは異なります。

Windows からの Linux ネットワーク アプリへのアクセス (localhost)

Linux ディストリビューションでネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) を構築する場合、(通常の場合と同様に) localhost を使用して (Microsoft Edge または Chrome インターネット ブラウザーなどの) Windows アプリからアクセスすることができます。

Linux からの Windows ネットワーク アプリへのアクセス (ホスト IP)

Linux ディストリビューション (つまり、Ubuntu) から Windows 上で実行されているネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) にアクセスする場合は、ホスト マシンの IP アドレスを使用する必要があります。 これは一般的なシナリオではありませんが、次の手順に従ってこれを実現できます。

  1. Linux ディストリビューションから次のコマンドを実行して、ホスト マシンの IP アドレスを取得します: cat /etc/resolv.conf
  2. 次の語句の後に IP アドレスをコピーします: nameserver
  3. コピーした IP アドレスを使用して、Windows サーバーに接続します。

次の図は、これを実行するために、curl を介して Windows で実行されている Node.js サーバーに接続する例です。

Curl を介して Windows で NodeJS サーバーに接続する

リモート IP アドレスを使用した接続

リモート IP アドレスを使用してアプリケーションに接続すると、ローカル エリア ネットワーク (LAN) からの接続として扱われます。 これは、アプリケーションで LAN 接続を受け入れることができるようにする必要があることを意味します。

たとえば、場合によっては、127.0.0.1 ではなく 0.0.0.0 にアプリケーションをバインドする必要があります。 Flask を使用する Python アプリの例では、次のコマンドを使用してこれを実行できます: app.run(host='0.0.0.0')。 これらの変更を行うと、LAN からの接続が許可されるため、セキュリティに注意してください。

ローカル エリア ネットワーク (LAN) からの WSL 2 ディストリビューションへのアクセス

WSL 1 ディストリビューションを使用している場合、LAN からアクセスできるようにコンピューターが設定されていれば、WSL で実行されているアプリケーションに LAN からもアクセスできます。

WSL 2 では、これは既定の動作ではありません。 WSL 2 には、独自の一意の IP アドレスを持つ仮想化されたイーサネット アダプターがあります。 現在、このワークフローを有効にするには、通常の仮想マシンの場合と同じ手順を実行する必要があります。 (Microsoft は、このエクスペリエンスを改善する方法を検討しています)。

次に、ホスト上のポート 4000 でリッスンし、それを IP アドレス 192.168.101.100 の WSL 2 VM のポート 4000 に接続するポート プロキシを追加する PowerShell コマンドの例を示します。

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

IPv6 アクセス

WSL 2 ディストリビューションは、現在、IPv6 のみのアドレスに到達できません。 Microsoft は、この機能の追加に取り組んでいます。