WSL2 ubuntu はホスト IP にアクセスできますが、ホスト ポートにアクセスできません

WSL2 ubuntu はホスト IP にアクセスできますが、ホスト ポートにアクセスできません

Windows 構成:

  1. ポート 5000 を開いた状態でサンプル Web サーバーを実行する (図 1 を参照)
  2. Windowsファイアウォールが完全に閉じている

WSL2:

  1. インターネットに正常にアクセスし、ホストIPまたはでWindowsにpingを実行できます$(hostname).localが、curl http://172.18.16.1:5000
sandowner@ENIGMATIC-MACHINE:~$ hostip=$(ip route | grep default | awk '{print $3}')
sandowner@ENIGMATIC-MACHINE:~$ echo $hostip
172.18.16.1
sandowner@ENIGMATIC-MACHINE:~$ ping 172.18.16.1
PING 172.18.16.1 (172.18.16.1) 56(84) bytes of data.
64 bytes from 172.18.16.1: icmp_seq=1 ttl=128 time=0.514 ms
64 bytes from 172.18.16.1: icmp_seq=2 ttl=128 time=0.690 ms
^C
sandowner@ENIGMATIC-MACHINE:~$ ping $(hostname).local
PING ENIGMATIC-MACHINE (172.18.16.1) 56(84) bytes of data.
64 bytes from ENIGMATIC-MACHINE (172.18.16.1): icmp_seq=1 ttl=128 time=0.355 ms
64 bytes from ENIGMATIC-MACHINE (172.18.16.1): icmp_seq=2 ttl=128 time=0.729 ms
^C
sandowner@ENIGMATIC-MACHINE:~$ curl http://172.18.16.1:5000
^C (will timeout)
  1. ホストの5000ポートもWSL2ブラウザからはアクセスできず、次のように終了しますERR_CONNECTION_TIMED_OUT(図2を参照)。

写真1

写真2

どのような助けでも大歓迎です! ありがとうございます!

答え1

接続したいときWSL 2からホストへ特別なメカニズムは用意されていません。WSL 2 は VM 内で実行され、Windows ネットワーク スタックに関してはリモート ホストです。つまり、

  • またはlocalhostのIPにバインドされたアプリケーションにアクセスできません127.0.0.0/8::1
  • ファイアウォールは受信接続を許可する必要がある

残念ながら、WSL 2 仮想ネットワークには完全に予測不可能な動的アドレスがあるため、そこでのみリッスンすると、ネットワーク サービス構成を常に更新する必要があります。代わりに、0.0.0.0または::(「すべてのインターフェイス」) にバインドする方が簡単です。つまり、誰でも接続できるため、信頼できないネットワーク上にいる場合は、その結果に注意してください。

関連情報