Skip to content

WSL (Windows Subsystem for Linux) のネットワーク接続問題の解決

問題

WSL (Windows Subsystem for Linux) をインストールした後、インターネット接続ができない問題が発生することがあります。以下のような症状が現れます:

  • sudo apt update で「接続失敗」というエラーが表示される
  • ping google.com などのコマンドが応答しない
  • ネットワーク関連の操作が一切機能しない

この問題は、ネットワーク設定の不具合、DNS解決の問題、またはシステム設定の競合が原因で発生することがあります。

主な解決方法

1. DNS設定の修正(最も一般的な解決策)

WSLは自動的に /etc/resolv.conf ファイルを生成しますが、誤ったnameserverが設定されていることがあります。

bash
sudo nano /etc/resolv.conf

ファイルの内容を確認し、nameserverを公開DNSサーバーに変更します:

nameserver 8.8.8.8
nameserver 8.8.4.4

変更後、WSLがこの設定を上書きしないようにするため、以下のコマンドを実行します:

bash
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またはコマンドプロンプトを開き、以下のコマンドを実行します:

powershell
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns

実行後、PCを再起動します。

TIP

この操作はネットワーク設定をリセットするため、VPNやプロキシ設定も初期化される可能性があります。

3. ネットワークリセット機能の使用

Windowsの設定からネットワークをリセットします:

  1. Windowsキーを押し、「ネットワークのリセット」と入力
  2. 「ネットワークのリセット」を選択
  3. 「今すぐリセット」ボタンをクリック
  4. PCを再起動

VPN使用時の特別な対応

VPN接続時にWSLのネットワークが機能しなくなる場合、以下の対策が有効です。

VPN接続時のDNS設定

  1. PowerShellでVPNのDNSサーバーを確認:
powershell
Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses
  1. WSLで確認したDNSサーバーを使用:
bash
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を使用している場合、インターフェースメトリックを変更します:

powershell
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000

WARNING

VPN接続のたびにこの設定が必要な場合は、スクリプトで自動化することをお勧めします。

その他の対策

WSLバージョンの切り替え

WSL2で問題が発生する場合、WSL1に切り替えることで解決することがあります:

powershell
wsl --set-version <ディストリビューション名> 1

または、デフォルトバージョンを変更:

powershell
wsl --set-default-version 1

NTFS圧縮の無効化

WSL関連ファイルのNTFS圧縮が原因で問題が発生することがあります:

powershell
compact /u /s:"%TEMP%" /i /Q

または、ファイルのプロパティから「圧縮する」のチェックを外します(特に %TEMP%\swap.vhdx ファイル)。

Windows機能の再設定

  1. 「Windowsの機能の有効化または無効化」を開く
  2. 「Linux用Windowsサブシステム」と「Hyper-V」を無効化
  3. PCを再起動
  4. 再度有効化して再起動

自動化スクリプト

ネットワーク切り替え時に毎回設定が必要な場合、バッチファイルを作成すると便利です:

batch
@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のネットワークスタックの問題が原因です。最も効果的な解決策は:

  1. /etc/resolv.conf の修正と自動生成の無効化
  2. Windowsネットワークスタックのリセット
  3. 必要に応じてWSLバージョンの切り替え

問題が解決しない場合は、マイクロソフトのWSL公式GitHubリポジトリで最新の情報を確認することをお勧めします。