この問題に引っかかって数時間溶かしてしまったので対応した方法をメモしておく。

環境


Windows 10 (Pro): 2004 (ビルド 19041.450)

問題


発生したのはWindows Updateの直後なので、何かしらWindows Updateがらみでダメになった気はする。

名前解決できなくていろいろダメ。

1
2
3
username@machine:/mnt/c/Users/UserName$ host google.com
net.c:536: probing sendmsg() with IP_TOS=b8 failed: Network is unreachable
;; connection timed out; no servers could be reached

パッケージのアップデートとかも当然できない。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@machine:/mnt/c/Users/UserName# apt-get update
Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease
Temporary failure resolving 'security.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

wsl2 cannot resolve hostとかで調べると結構引っかかるのでかなりのユーザが問題にぶつかってそう。

対応


調べたところ、環境によって(??)対応方法が大きく3つにわかれるっぽい。

  • /etc/resolve.confを書き換える
  • Windowsの.wslconfigswap0にする
  • WSL1にダウングレードする

自分は2つ目の「.wslconfigswap0にする」で解決したが、以下すべてのやりかたを書いておく。

対応方法1: resolve.confを書き換える


自分はこの方法では解決しなかったが、結構なユーザがこれで解決しているっぽい。

No network connection in any distribution under WSL 2
WSL2 DNS stops working

これはかいつまんで書くと…

  • WSL2では/etc/resolve.confを起動時に都度生成している
  • 生成される/etc/resolve.confの内容が悪い
  • /etc/resolve.confを生成しないようにする
  • /etc/resolve.confを手動で編集する

というものだ。

実際の手順はこの辺りに書いてある。nameserverはどの手順でもだいたいGoogleの8.8.8.8を指定するケースが多いけど、まあ、その辺は適当に変えたらいいと思う。

これの派生版でWindowsのネットワーク周りを一式リセットしたりするのもあるけど、これも自分は意味なかった。

対応方法2: WSLのswapを変更する


この対応は下記のIssueに書いてあった。

No network if %temp% moved

WindowsのC:\Users\Username.wslconfigがあるので、そこにswap=0を足す。

1
2
[wsl2]
swap=0

正直これでなんで解決できるのか全くわからないけど、自分の場合は上手くいった。

対応方法3: WSL1にダウングレードする


このやりかたはこっちにかいた。これでも解決できることにはできる。WSL2でなくてもよいのであれば一番確実っぽい感じはする。

所感


WSLにはめっちゃ期待してるのでMSさんには頑張って解決してほしい。