諸事情で家のネットワークの系統を増やした際,不意に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+R
でregedit
を実行すれば開ける.