✍️blog

技術系のこととか

WSLでネットワークが不調で外部と通信できないときにやったこと

WSLを使っていると何をきっかけにしたのか外部と通信できなくなることがあります。
感覚的にはスリープ明けに多い印象で、さっきまで通信できてたけど急にできなくなるというようなことは無いですかね。

そんな時に試したことをいくつか書いていきます。

ちなみに、外部と通信ができないとは、
curl https://example.com みたいなコマンドで名前解決が失敗しているような状態をさしています。
WSLはデフォルトだとホスト側IPがネームサーバーに設定されているので(/etc/resolv.conf)
ホスト側と通信できないためと思われます。
たぶん、WSLと通信するための仮想ネットワークアダプタが変になっているのでしょう。。。

WSLの再起動

定番ですかね。。。   コマンドプロンプトとかPowerShellから以下のコマンドを実行してWSLを終了させて、再度WSLを起動させます。
もちろん、コマンド実行前にWSLを開いている端末は閉じておく必要があります。

wsl --shutdown

ネットワークアダプターの再起動

以下のissueでコメントされている方法です。
管理者権限のあるPowershellで以下のコマンドを実行します。

github.com

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以外の何かがおかしいです。(たぶん)

via GIPHY