WSL2の「ミラーリングモード」とネットワーク接続・ファイル高速化の設定完全ガイド

Windows 上で Linux 環境を快適に動かすツールとして、WSL2(Windows Subsystem for Linux 2)は多くのエンジニアやクリエイターに愛用されています。しかし、従来通りの初期設定で使っていると、「社内VPNに接続するとWSL2側のネットワークが途切れる」「WindowsとWSL2間でlocalhostのアクセスがうまくいかない」「ファイルの読み書きが遅くて開発効率が落ちる」といった悩みに直面することがあります。

これらの問題を劇的に解決するのが、WSL 2.0以降で追加された「ミラーリングモード(networkingMode=mirrored)」と、正しいファイルアクセス・パフォーマンス設定です。

この記事では、WSL2のミラーリングモードの仕組みやメリット、具体的な.wslconfigの編集方法、そしてファイルアクセス速度を最大限に引き出す設定手順までを分かりやすく解説します。

この記事で行うこと

  • WSL2の従来のNATモードとミラーリングモード(networkingMode=mirrored)の違いの理解
  • .wslconfigを使用したネットワーク設定(ミラーリング、DNSトンネリング、自動プロキシ設定)
  • 設定の反映手順(wsl –shutdown)と動作確認
  • WSL2のファイルアクセス速度を低速な9Pプロトコルから高速なLinuxネイティブ環境へと最適化するポイント
  • トラブルシューティング(エラーへの対処や動作しない場合の確認事項)

前提条件

ミラーリングモード機能を利用するには、以下の動作環境が必要です。

  • OS: Windows 11 Version 22H2(ビルド 22621.2428 以降)または Windows 11 Version 23H2 以降
  • WSLバージョン: WSL 2.0.0 以降(ストア版WSL)
  • 権限: 設定ファイルを配置するためのユーザー権限およびPowerShell操作権限

利用中のWSLバージョンが古い場合は、PowerShellから最新版にアップデートを行ってから設定を行ってください。

WSL2のネットワークモード:NATとミラーリングの違い

従来のWSL2と新しいミラーリングモードでは、ネットワークの仕組みが大きく異なります。

従来のNATモードの課題

初期状態のWSL2は「NATモード」で動作しています。NATモードでは、Hyper-Vの仮想スイッチを介してLinux側に専用のIPアドレス(例: 172.x.x.x)が割り当てられます。

この方式には以下のような使いづらさがありました。

  • VPN切断問題: Windows側でVPN(Cisco AnyConnect, GlobalProtect等)に接続すると、WSL2内のネットワーク経路が途切れ、インターネットや社内サーバーにアクセスできなくなる。
  • localhostアクセスの制限: Windows側からWSL2上のWebサーバーにアクセスする際のフォワーディングが不安定になったり、逆にLinuxからWindows側のlocalhostへ接続する際にホストのIP(/etc/resolv.confのネームサーバーIP)を毎回調べる必要があった。
  • IPv6非対応: WSL2内からIPv6アドレスを使った通信が直接行えなかった。
  • LANからのアクセス難易度: 外部ネットワークやLAN内の別のPCからWSL2上のサービスにアクセスする場合、netsh interface portproxy などのコマンドでポートフォワーディングを手動設定する必要があった。

ミラーリングモード(networkingMode=mirrored)のメリット

ミラーリングモードを有効にすると、Windowsのネットワークインターフェース(Wi-Fiやイーサネット)がLinux側に直接投影(ミラーリング)されます。

これによって以下のメリットが得られます。

  • VPNとの完全な互換性: ホストOS(Windows)のVPN接続環境がそのままWSL2内にも共有されます。
  • 双方向のlocalhostアクセス: 127.0.0.1(localhost)を指定するだけで、LinuxからWindows上のサービス、またはWindowsからLinux上のサービスへ直接相互通信が可能になります。
  • IPv6のフルサポート: Windows側がIPv6環境であれば、WSL2側でも標準でIPv6通信が利用可能になります。
  • シンプルなLAN公開: 条件を満たせば、LAN内の他機器からWindowsのIPアドレス宛てにアクセスするだけでWSL2上のサービスに直接接続できるようになります。

手順1:WSLのバージョン確認とアップデート

まずは、現在のWSLバージョンが2.0.0以上であるか確認します。

PowerShellを起動し、以下のコマンドを実行します。

wsl --version

出力結果の「WSL バージョン」が 2.0.0 以上であることを確認してください。

もしコマンドが存在しないか、バージョンが古い場合は以下のコマンドを実行して最新化します。

wsl --update

アップデート完了後、念のため再度 wsl –version を実行してバージョンを確認します。

手順2:.wslconfig ファイルの作成・編集

WSL2の全体設定は、Windowsのユーザーホームディレクトリ直下にある .wslconfig ファイルで管理します。

設定ファイルの保存場所

  • パス: C:\Users[ユーザー名].wslconfig
  • 環境変数での表記: %USERPROFILE%.wslconfig

エクスプローラーのアドレスバーに %USERPROFILE% と入力してEnterキーを押すか、メモ帳等のテキストエディタで直接作成・更新します。

推奨される .wslconfig の設定内容

以下の内容を .wslconfig に記述します。

[wsl2]
# ネットワークモードをミラーリングに設定
networkingMode=mirrored

# DNSトンネリングを有効化(VPN環境下でのDNS解決失敗を防止)
dnsTunneling=true

# Windowsのプロキシ設定をWSL2へ自動適用
autoProxy=true

# Hyper-Vファイアウォール規則の適用
firewall=true

# (オプション)メモリやCPU割り当ての最適化
memory=8GB
processors=4

[experimental]
# 空きメモリを自動的にWindowsへ返還する設定
autoMemoryReclaim=gradual

# VHDXディスクサイズを自動的に縮小する設定
sparseVhd=true

各設定の役割は以下の通りです。

  • networkingMode=mirrored: ミラーリングモードを有効にします。
  • dnsTunneling=true: WSL2からのDNSリクエストを仮想化機能経由でWindowsに引き渡すことで、VPN環境等でのDNSトラブルを防ぎます。
  • autoProxy=true: Windows側で設定されているHTTP/HTTPSプロキシをWSL2に自動反映します。
  • firewall=true: Windows FirewallのルールをWSL2の通信にも適応し、セキュリティを高めます。

手順3:WSLの再起動と動作確認

設定ファイルを保存したら、WSL2を再起動して設定を適用します。

WSL2の停止と起動

PowerShellを開き、一度WSLを完全停止します。

wsl --shutdown

その後、ターミナルやPowerShellから再度Linuxディストリビューション(例: Ubuntu)を立ち上げます。

wsl

動作確認の手順

  1. localhost接続の確認 WSL2上で簡単なWebサーバー(例: python3 -m http.server 8000)を起動し、Windows側のブラウザから http://localhost:8000 にアクセスしてページが表示されるか確認します。 逆に、Windows側で起動している開発サーバーに対して、WSL2のターミナルから curl http://localhost:[ポート番号] で通信できるかテストします。
  2. VPN環境での通信確認 WindowsでVPNに接続した状態で、WSL2のターミナルから外部サイトへのpingやcurlが正常に通るかチェックします。
curl -I https://www.google.com

エラーにならずレスポンスヘッダーが返ってくれば、VPN互換性の設定は成功です。

ファイルアクセス速度を劇的に改善する設定とベストプラクティス

ネットワーク設定と並び、WSL2のパフォーマンスで重要なのが「ファイルアクセス速度」です。

なぜファイル操作が重くなるのか?

WSL2からWindows側の領域(/mnt/c/Users/...)にあるファイルを操作する場合、9Pプロトコルと呼ばれるネットワーク経由のファイル参照が行われます。 このため、/mnt/c/ 配下で npm install や git status などの大量の小規模ファイルアクセスが発生する処理を行うと、非常に低速になります。

高速化のための鉄則:ソースコードはLinux領域に置く

ファイル読み書きの低速化を防ぐ最大のポイントは、プロジェクトファイルをすべてLinuxネイティブのファイルシステム内に配置することです。

推奨配置場所:

  • /home/[ユーザー名]/projects/
  • ~/src/

Linux領域(ext4仮想ディスク内)にファイルを配置することで、native Linuxと同等の爆速なI/Oパフォーマンスが得られます。

Windowsエディタからのアクセス方法

Linux領域にコードを置いた場合でも、Windows側のエディタやエクスプローラーから快適に操作できます。

  1. VS Codeを使う場合 VS Codeの拡張機能「WSL」を導入し、WSLのターミナル上で以下を実行します。
code .

これにより、VS CodeがWSL内にリモート接続し、Windows側のUIでLinux上のファイルを極めて高速に編集できます。

  1. Windowsエクスプローラーからアクセスする場合 エクスプローラーのアドレスバーに以下を入力すると、Linux領域のファイルシステムをWindowsから直接開くことができます。
\\wsl.localhost\Ubuntu

または

\\wsl$\Ubuntu

うまくいかない場合の確認ポイント(トラブルシューティング)

設定後にネットワークが繋がらなくなったり、エラーが出る場合は以下を確認してください。

1. 「ミラーリングモードがサポートされていません」と表示される場合

Windows 11のバージョンまたはWSLのバージョンが要件を満たしていません。 Windows Updateを実行してビルド番号を22621.2428以上にするか、wsl --update でストア版WSLに更新してください。

2. ポートの競合が発生する場合

ミラーリングモードではWindowsとWSL2で同じネットワーク空間(IP/ポート)を共有するため、Windows側とWSL2側で同じポート番号(例: 8080)を同時にListenすると競合が発生します。 利用するポート番号を分けるか、不要なプロセスを停止してください。

3. Docker Desktopを利用している場合

Docker Desktopを利用している場合、ネットワークドライバーの動作と干渉することがあります。 Docker Desktopの設定(Settings > General)で「Use the WSL 2 based engine」が有効になっているか、最新のDocker Desktopに更新されているかを確認してください。

4. 設定を元に戻したい場合

万が一トラブルが解決しない場合は、.wslconfig から networkingMode=mirrored の行を削除するかコメントアウトし、PowerShellで wsl --shutdown を実行すれば元のNATモードに戻せます。

まとめ

WSL2のミラーリングモード(networkingMode=mirrored)とファイル配置の最適化を行うことで、これまでのWSL2の2大ストレスであった「VPN切断・localhost接続問題」と「ファイルアクセスの遅さ」を同時に解消できます。

今回紹介した設定のポイントまとめ:

  • .wslconfig に networkingMode=mirroreddnsTunneling=trueautoProxy=true を追加する
  • 設定適用には PowerShell で wsl --shutdown を実行する
  • 開発プロジェクトは /mnt/c/ ではなく Linux ネイティブのホームディレクトリルート(~/)配下に配置する
  • VS CodeのWSL拡張を活用して快適な開発環境を構築する

これらを導入して、Windows上のLinux開発環境をより快適に構築してみてください。

参考情報