215
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 で dns の名前解決ができなくなって ネット接続できなくなった場合の対処方法

Last updated at Posted at 2020-10-06

問題の事象

sudo apt-get update をしたら

W: Failed to fetch https://packages.microsoft.com/ubuntu/18.04/prod/dists/bionic/InRelease  Temporary failure resolving 

と表示された??
え?

wget https://packages.microsoft.com/ubuntu/18.04/prod/dists/bionic/InRelease

したら

curl: (6) Could not resolve host: packages.microsoft.com

となった。 DNS による名前解決ができていない??

Windows 側の環境では ちゃんと https://packages.microsoft.com/ubuntu/18.04/prod/dists/bionic/InRelease
見えるのに・・。

DNS の状況確認

dig +tcp packages.microsoft.com

した結果

;; Connection to 172.25.208.1#53(172.25.208.1) for packages.microsoft.com failed: timed out.

でも

dig packages.microsoft.com

だと ちゃんと応答を返す。
TCP 接続での DNS 解決ができていないために このトラブルが発生している。

解決方法(2024/05 に 解決方法がリリースされました)

WSL の 最新バージョンでは ネットワーク設定周りの強化が行われました。

現在インストールされている WSL を最新版に更新します。

wsl --update

Windows 11 でも Windows 10 でも インストールできます。

インストール後の確認

wsl --version

Windows 11 の場合

WSL バージョン: 2.1.5.0
カーネル バージョン: 5.15.146.1-2
WSLg バージョン: 1.0.60
MSRDC バージョン: 1.2.5105
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.22631.3593

Windows 10の場合

WSL バージョン: 2.1.5.0
カーネル バージョン: 5.15.146.1-2
WSLg バージョン: 1.0.60
MSRDC バージョン: 1.2.5105
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.19045.4412

になっていると思います。

C:\Users\<<ユーザ名>>\.wslconfig

ファイルを作成して

[wsl2]
dnsTunneling=true

の定義を入れると DNS の 問題が改善するようです。

この方法は WSL 側から Windows で管理しているDNS情報をネットワークを使わずに取得する事ができるような仕組みになっているそうです。

実験的な機能です、と公開されている時から利用していますが、安定して動作しています。

Windows 11 22H2 以降を実行しているマシンでは、.wslconfig ファイルの [wsl2] の下に dnsTunneling=true を設定すると、WSL では WSL 内から DNS 要求に応答する仮想化機能が使用され、ネットワーク パケット経由でそれらが要求されることはありません。 この機能は、VPN やその他の複雑なネットワーク設定との互換性を向上させることを目的としています。

解決方法(旧方法 参考までに・・)

WSL2 の DNS は WSL2 起動時に自動的に 仮想ネットワークの 172.25.208.1 等のアドレスに
なっている事があって、この仮想ネットワークのDNS が不調になっている場合に発生する。

WSL2 の中でも Google の DNS サーバー 8.8.8.8 を利用するように設定する事で
仮想ネットワーク上の DNS を利用しないようにする。

コマンドプロンプトから WSL をシャットダウンさせる。

wsl --shutdown

次に wsl にログインして /etc/wsl.conf ファイルを作成して、下記の内容を登録する
sudo vi /etc/wsl.conf

[network]
generateResolvConf = false

次に /etc/resolv.conf ファイルを削除して DNS の設定を登録

sudo rm /etc/resolv.conf
sudo sh -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"

/etc/resolv.conf../run/resolvconf/resolv.conf へのシンボリックリンク
なっているので一旦削除して設定します。

編集したら、サービスの再起動をしなくても DNS 設定が変更されます。

おまけ: DNS 設定を元に戻す方法

DNS 設定を変更前に元戻す場合下記の手順を行います。

cd /etc
sudo mv resolv.conf resolv.conf.new
sudo ln -s ../run/resolvconf/resolv.conf resolv.conf
sudo rm /etc/wsl.conf

コマンドプロンプトから

wsl --shutdown

として もう一度 wsl にログインします。

参考URL

Microsoft Docs : Windows Subsystem for Linux のトラブルシューティング

/etc/wsl.conf についての詳細な解説は

Microsoft Docs : WSL での詳細設定の構成

215
177
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
215
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?