諸事情で家のネットワークの系統を増やした際,不意にWSLのネットワークアドレスと増設したネットワークのアドレス範囲が被ってしまった.そのままだとWSLから増設ネットワークに出れなくなってしまうので,WSL側で振られるネットワークを変更した.その際のメモ.

WSLのネットワークモード

デフォルトではHyper-V仮想スイッチの内部ネットワークモード (NAT) が使われるようになっている.
2025/09/27時点で以下のモードが使用できる.

  • None
    • その名の通り何もなし
  • NAT
    • デフォルト
    • WSL用に独立したネットワークが構築され,外への通信はNATを経てホストWindowsのネットワークを通る
  • Mirrored
    • ホストWindowsのNICがそのままミラーリングされ,同一のIPアドレスが振られる
    • NICを複数挿してると,その分のデバイスが追加される
    • MACもホストのNICのものがそのまま
  • VirtioProxy
    • Mirroredの代替?らしい
    • ドキュメントに記載が無いのでよくわからん
    • ホストWindowsのNICと同じIPをもつネットワークインターフェースと,169.254.XXX.XXXをもつlookbackデバイスが追加される
    • 試したときはNIC一台分しか追加されなかった
    • ホストWindowsとの通信がMirroredより効率化できるとかなんとか…
  • Bridge (Deprecated)
    • Hyper-V仮想スイッチのブリッジモード
    • ホストのNICを1台占有し,そのNICが接続しているネットワークをブリッジ配下に展開する
    • ローカルネットワークのIPをそのまま振りたいときに便利だったが,そのうち消えるらしい

しばらく見ないうちにMirroredとVirtioProxyが新たに追加されていて,BridgeはDeprecatedになっていた.

NATモードのアドレス

恐らく初めてWSLの環境を構築した際の状況を基に,重複を避けて自動的に決定される.この辺もUndocumentedだけど,個人的にはどっかに書いといてほしい.
なので,初回構築時とネットワーク環境が変わったり,ラップトップなど複数のネットワークに繋ぐような場合は普通に競合がありえる.

問題なのは,WSL側で振られるネットワーク設定を変更するインタフェースを用意していない点.せっかくWSL SettingsなんてGUIまで用意したんだから,それくらいやってもいいだろと.普通に需要はあると思う.

で,肝心のNATネットワークの設定はレジストリに書かれている.以下の3つのキーがその設定.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\NatGatewayIpAddress
    • NATネットワークのゲートウェイアドレス
    • 要はホストWindows上のvSwitchのIPアドレス
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\NatNetwork
    • ネットワークアドレス
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\NatIpAddress
    • WSLインスタンスに振られるIPアドレス
    • ディストリビューション問わず共通

変更

上記レジストリキーの値を変更し,Windowsを再起動すればよい.WSLの再起動のみでは効かなかったので,Windowsを丸々再起しないと恐らく意味が無い.勝手に値が元に戻されてしまう.

レジストリエディタは Win+Rregeditを実行すれば開ける.