WSL (Windows Subsystem for Linux) のネットワーク接続問題の解決
問題
WSL (Windows Subsystem for Linux) をインストールした後、インターネット接続ができない問題が発生することがあります。以下のような症状が現れます:
sudo apt update
で「接続失敗」というエラーが表示されるping google.com
などのコマンドが応答しない- ネットワーク関連の操作が一切機能しない
この問題は、ネットワーク設定の不具合、DNS解決の問題、またはシステム設定の競合が原因で発生することがあります。
主な解決方法
1. DNS設定の修正(最も一般的な解決策)
WSLは自動的に /etc/resolv.conf
ファイルを生成しますが、誤ったnameserverが設定されていることがあります。
sudo nano /etc/resolv.conf
ファイルの内容を確認し、nameserverを公開DNSサーバーに変更します:
nameserver 8.8.8.8
nameserver 8.8.4.4
変更後、WSLがこの設定を上書きしないようにするため、以下のコマンドを実行します:
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
2. Windowsネットワークスタックのリセット
管理者権限でPowerShellまたはコマンドプロンプトを開き、以下のコマンドを実行します:
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
実行後、PCを再起動します。
TIP
この操作はネットワーク設定をリセットするため、VPNやプロキシ設定も初期化される可能性があります。
3. ネットワークリセット機能の使用
Windowsの設定からネットワークをリセットします:
- Windowsキーを押し、「ネットワークのリセット」と入力
- 「ネットワークのリセット」を選択
- 「今すぐリセット」ボタンをクリック
- PCを再起動
VPN使用時の特別な対応
VPN接続時にWSLのネットワークが機能しなくなる場合、以下の対策が有効です。
VPN接続時のDNS設定
- PowerShellでVPNのDNSサーバーを確認:
Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses
- WSLで確認したDNSサーバーを使用:
sudo unlink /etc/resolv.conf
cat << EOF | sudo tee -a /etc/wsl.conf
[network]
generateResolvConf = false
EOF
cat << EOF | sudo tee -a /etc/resolv.conf
nameserver <VPNのDNSサーバー>
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
sudo chattr +i /etc/resolv.conf
VPNアダプタのメトリック設定
Cisco AnyConnectなどのVPNを使用している場合、インターフェースメトリックを変更します:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
WARNING
VPN接続のたびにこの設定が必要な場合は、スクリプトで自動化することをお勧めします。
その他の対策
WSLバージョンの切り替え
WSL2で問題が発生する場合、WSL1に切り替えることで解決することがあります:
wsl --set-version <ディストリビューション名> 1
または、デフォルトバージョンを変更:
wsl --set-default-version 1
NTFS圧縮の無効化
WSL関連ファイルのNTFS圧縮が原因で問題が発生することがあります:
compact /u /s:"%TEMP%" /i /Q
または、ファイルのプロパティから「圧縮する」のチェックを外します(特に %TEMP%\swap.vhdx
ファイル)。
Windows機能の再設定
- 「Windowsの機能の有効化または無効化」を開く
- 「Linux用Windowsサブシステム」と「Hyper-V」を無効化
- PCを再起動
- 再度有効化して再起動
自動化スクリプト
ネットワーク切り替え時に毎回設定が必要な場合、バッチファイルを作成すると便利です:
@echo off
echo WSLネットワークリセットを実行します...
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
echo 再起動を実行します...
shutdown /r /t 0
このファイルを管理者権限で実行することで、一連のコマンドを自動実行できます。
まとめ
WSLのネットワーク接続問題は、主にDNS設定やWindowsのネットワークスタックの問題が原因です。最も効果的な解決策は:
/etc/resolv.conf
の修正と自動生成の無効化- Windowsネットワークスタックのリセット
- 必要に応じてWSLバージョンの切り替え
問題が解決しない場合は、マイクロソフトのWSL公式GitHubリポジトリで最新の情報を確認することをお勧めします。