Windows 構成:
- ポート 5000 を開いた状態でサンプル Web サーバーを実行する (図 1 を参照)
- Windowsファイアウォールが完全に閉じている
WSL2:
- インターネットに正常にアクセスし、ホスト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)
- ホストの5000ポートもWSL2ブラウザからはアクセスできず、次のように終了します
ERR_CONNECTION_TIMED_OUT
(図2を参照)。
どのような助けでも大歓迎です! ありがとうございます!
答え1
接続したいときWSL 2からホストへ特別なメカニズムは用意されていません。WSL 2 は VM 内で実行され、Windows ネットワーク スタックに関してはリモート ホストです。つまり、
- または
localhost
のIPにバインドされたアプリケーションにアクセスできません127.0.0.0/8
::1
- ファイアウォールは受信接続を許可する必要がある
残念ながら、WSL 2 仮想ネットワークには完全に予測不可能な動的アドレスがあるため、そこでのみリッスンすると、ネットワーク サービス構成を常に更新する必要があります。代わりに、0.0.0.0
または::
(「すべてのインターフェイス」) にバインドする方が簡単です。つまり、誰でも接続できるため、信頼できないネットワーク上にいる場合は、その結果に注意してください。