hirokuma

View the Project on GitHub

2024/05/08

WSL2のmirroredネットワークモード

WSL2でサーバを立て、そこにスマホでアクセスしたいことがあった。
WSL1のときは特に何もせずにできたのだが、WSL2は何かしないとダメだそうだ。

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

下の方に「ミラーモードのネットワーク - Microsoft Learn」という項目がある。
いくつか制約はあるものの、dockerなどを使わずに動かしたサーバであればホスト側、つまりWindowsのIPアドレスおよびポートでアクセスできるようになる。

設定方法は、.wslconfigファイルに設定を書くこと。

[wsl2]
networkingMode=mirrored

この.wslconfigファイルだが、これはWindows側のc:\Users\<hoge>\.wslconfigのようなファイルになる。デフォルトではファイルはないので作る。
最初に見たサイトで~/.wslconfigとなっていたからWSL2にログインして作っていたのだが、そうではないのだ。そこに書いても意味はない。
mirroredの設定が反映されたかどうかはip aなどでIPアドレスを出力させるとわかる。
うちではWindowsは192.168.0.xのようなアドレスで、WSL2は172.17.x.yのようなアドレスになっていた。mirroredが有効になるとWSL2もWindows側と同じアドレスとして見えるようになった。確認するコマンドもある。

$ wslinfo --networking-mode
mirrored

これでWSL2側でnode.jsを使ってHTTPサーバを作ってホスト(Windows)から http://localhost:xxxx でアクセスすると、読み込めた。
しかし localhost ではなくホストのIPアドレスを指定すると読み込めない。
ファイアウォールや .wslconfig の変更を見直してみたのだが、どうにもダメだった。
あれこれやっていると、Windowsがブルースクリーンになってしまった。久々に見たよ。

できている人もいるし、Microsoftのミラーモードの説明にも「ローカル エリア ネットワーク (LAN) から WSL に直接接続する」とあるからできると思うのだよね。しかし、まったく思いつかない。 これができないと VirtualBox にまた戻さないといけないかもしれない、くらいに面倒なのだよ。
困ったものだ。