はじめに
- WSL2でNode.jsのExpressサーバーを立ててローカルで動作確認OK
- 同一ネットワーク内のスマホからアクセスしようとしたが繋がらない問題に遭遇
環境情報
- Windows 11
- WSL2(Ubuntu)
- Node.jsのExpressサーバーを3000番ポートで起動
- 同一Wi-Fi内のスマホからアクセス予定
問題の詳細
-
Windows側でファイアウォールでポート3000を許可済み
-
netsh interface portproxy でポートフォワーディング設定済み
-
それでもWindowsからWSLのサーバに接続できない(Test-NetConnectionで失敗)
-
WSLのIPにpingは通るがTCP接続はできない状態
原因
-
WSL側のUbuntuでufwが有効でポート3000を許可していなかった
-
WSL2のネットワークはWindowsホストから仮想的に分離されているためファイアウォール設定が必要
解決手順
今回はWindowsのファイアウォール設定およびポートフォワーディングは完了している前提(参考記事)で話を進めます。
-
WSL内の
ufwの状態を確認します。sudo ufw status -
ポート3000が許可されていなければ、許可します。
sudo ufw allow 3000 -
WSLのIPアドレスを確認します。
ip addr show eth0 | grep inet -
接続をテストします。
- Windows PowerShellで以下を実行して接続を確認。
Test-NetConnection -ComputerName <WindowsのIPアドレス> -Port 3000 -
スマホなどから
http://<WindowsのIPアドレス>:3000/にアクセスし動作確認します。
まとめ
-
WSL2ではWindows側とWSL側でそれぞれファイアウォールの設定が必要
-
ポートフォワーディング設定も忘れずに
-
これらが揃うと、スマホなどからもアクセス可能になる
参考リンク
こちらの記事を参考にWSLのポートフォワーディングなどを行いました。
https://qiita.com/y-hys/items/4ddb95e68ba55a31080e
UFWについてはこちらで詳しく解説されています。
https://qiita.com/010Ri/items/f37f7f5fb35265823c7c