📤

WSL2でホストと同一のIPアドレスにする「ネットワークミラーモード」の設定

に公開

はじめに

通常、WSL2(Windows Subsystem for Linux 2)は、ホストPCとは異なるネットワークセグメントに属するローカルIPアドレス(例:172.xx.xx.xx)が割り当てられる。
このとき、別セグメントのデフォルトゲートウェイを介してNAT経由で外部へアクセスする仕組みになっている。
そのため、外部(LAN上の他端末など)からWSL内で起動したサービスに直接アクセスすることはできない。
これを解決するにはポートフォワードの設定が必要であり、やや煩雑である。

WSL1ではホストとゲストは同じIPアドレスだったが、WSL2で別セグメントに変更された。

ネットワークミラーモード

この問題を簡単に解決するのがネットワークミラーモードで、Windows 11 22H2以降で利用できる。
ネットワークミラーモードを有効にすると、WSLがホストPCと同一のIPアドレスを共有するようになり、LAN上の他デバイスから直接アクセスできるようになる。
NATを経由せず、同一セグメント上で動作するため、より自然なネットワーク環境を実現できる。
開発用途でWebサーバーを立て、それを外部PCから確認する場合などに、非常に便利な機能だ。

設定方法

.wslconfig に直接記述して設定することもできるが、専用のGUIアプリ「WSL Settings」が提供されており、こちらを使う方が簡単でミスも少ない。

  1. タスクバーの検索窓に「WSL Settings」と入力して起動する。
  2. 「ネットワーク」タブを開く。
  3. 一番上の 「ネットワークモード」を「Mirrored」 に変更する。
  4. その下にある 「Hyper-V ファイアウォール」を「無効」 に設定する。

この「Hyper-V ファイアウォール」は、WSLとホスト間の通信を制御するものであり、Windows標準のファイアウォールが無効化されるわけではない。

設定の反映

設定を変更しても、WSLが起動中であれば即時には反映されない。
ターミナルを閉じていてもWSLがバックグラウンドで動作していることがあるため、以下のコマンドで一度シャットダウンしてから再起動するのが確実だ。

wsl --shutdown
wsl

これでミラーモードが有効化され、WSLはホストと同一IPアドレスにすることができる。
なおポート番号が競合した場合はホストが優先される。

Zenn + GitHub 連携で

Windows 11 + WSL2 環境でプレビューサーバーを起動(npx zenn preview)し、ホストのPCでそれを見る時に、このネットワークミラーモードが使える。
WSL2じゃなく、素直にWindowsでプレビューサーバーを起動すれば何の問題もないのだが・・・

Discussion