WSLでネットワークが不調で外部と通信できないときにやったこと
WSLを使っていると何をきっかけにしたのか外部と通信できなくなることがあります。
感覚的にはスリープ明けに多い印象で、さっきまで通信できてたけど急にできなくなるというようなことは無いですかね。
そんな時に試したことをいくつか書いていきます。
ちなみに、外部と通信ができないとは、
curl https://example.com
みたいなコマンドで名前解決が失敗しているような状態をさしています。
WSLはデフォルトだとホスト側IPがネームサーバーに設定されているので(/etc/resolv.conf
)
ホスト側と通信できないためと思われます。
たぶん、WSLと通信するための仮想ネットワークアダプタが変になっているのでしょう。。。
WSLの再起動
定番ですかね。。。
コマンドプロンプトとかPowerShellから以下のコマンドを実行してWSLを終了させて、再度WSLを起動させます。
もちろん、コマンド実行前にWSLを開いている端末は閉じておく必要があります。
wsl --shutdown
ネットワークアダプターの再起動
以下のissueでコメントされている方法です。
管理者権限のあるPowershellで以下のコマンドを実行します。
echo "Restarting WSL Service" Restart-Service LxssManager echo "Restarting Host Network Service" Stop-Service -name "hns" Start-Service -name "hns" echo "Restarting Hyper-V adapters" Get-NetAdapter -IncludeHidden | Where-Object ` {$_.InterfaceDescription.StartsWith('Hyper-V Virtual Switch Extension Adapter')} ` | Disable-NetAdapter -Confirm:$False Get-NetAdapter -IncludeHidden | Where-Object ` {$_.InterfaceDescription.StartsWith('Hyper-V Virtual Switch Extension Adapter')} ` | Enable-NetAdapter -Confirm:$False
PCの再起動
これも定番ですね。
感覚的にはこれで改善することが多い印象ですね。
WSLアップデート
Windows Update経由でアップデートされていることもありますが、
環境の問題でアップデートできていないこともあるので、以下のコマンドでアップデートを明示的に行います。
実施後には念のためPCの再起動をした方がよいかと思います。(WSLだけの再起動でもよいかも)
wsl --update
WSLのリセット/再インストール
最終手段ですw
当然のごとく、WSL内のデータは消えてしまうので事前にバックアップなどが必要です。
アプリからUbuntuやWSLを選んでアンインストールし、PC再起動後再度WSLをインストールします。
まとめ
WSLの再インストールまでやって改善しなかったことは無いので、
以上のいずれでも改善しないようならWSL以外の何かがおかしいです。(たぶん)