WSLインストールでのつまづきとその解決方法

当記事内にアフィリエイトリンクを含みます
  • URLをコピーしました!
目次

はじめに

私は、普段は、Windows10を使っています。WSLを使ったことはありません。その私がChatGPTを頼りにしながら、WSL(Windows Subsystem for Linux)を導入してみました。

しかし、インストールした後、DNS解決の問題に直面しました。apt update を実行したときに「Temporary failure resolving」エラーが出て、インターネットに接続できなかったのです。

その後、チャッピー君に、エラーログをコピペしては、指示を仰いで、なんとか一応は、解決できたようです。「sudo apt upgrade」と「sudo apt upgrade」は無事終了できました。

ここまでのつまづきの過程を備忘録として残しておくべく、チャッピー君に以下の指示をしました。

とにかく、このセッションの最初から確認して、私がやったこと、チャットにかいたこと、君が指示したことの順番に、記事をかいてほしい。

以下、チャッピー君によるまとめです。今回は、私の備忘録目的の記事です。

1. WSLのインストール

最初に、WSLをインストールした。この段階では特に問題はなかったが、次の手順でネットワーク接続に関する問題が発生した。

  • WSLの有効化
    PowerShellを管理者権限で開き、以下のコマンドでWSL機能を有効化した:
  dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • Ubuntuのインストール
    Microsoft StoreからUbuntu 24.04 LTSをインストールした。

2. 問題の発生

インストール後、最初に sudo apt update を実行すると、以下のエラーが発生した:

Ign:2 http://archive.ubuntu.com/ubuntu noble InRelease
Err:1 http://security.ubuntu.com/ubuntu noble-security InRelease
  Temporary failure resolving 'security.ubuntu.com'

これは、DNS(ドメインネームシステム)を正しく解決できていないことを示しており、ネットワーク設定の問題が原因である可能性がある。このため、パッケージリストの更新に失敗している。

3. ping コマンドで接続確認

apt update でエラーが発生した後、ping コマンドでインターネット接続を確認しようとしたが、同じように名前解決ができなかった。

ping -c 4 google.com

結果として、ping も失敗し、「DNS解決ができない」ことが確認された。

4. /etc/resolv.conf の確認

次に、/etc/resolv.conf を確認した。ここに nameserver 172.17.16.1 が設定されており、これが原因でDNS解決ができない状態だった。

cat /etc/resolv.conf

出力結果は以下の通り:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.17.16.1

この設定がDNS解決に影響を与えていたため、手動で変更する必要があった。

5. /etc/wsl.conf の設定変更

/etc/resolv.conf の設定を変更するため、まず /etc/wsl.conf を編集した。この設定で、WSLが自動的に /etc/resolv.conf を生成しないようにした。

設定変更理由:

generateResolvConf = false を設定することで、WSLは自動的に /etc/resolv.conf を生成せず、手動で設定したDNS情報を反映することができる。

sudo nano /etc/wsl.conf

以下の設定を追加した:

[network]
generateResolvConf = false

その後、WSLを再起動して設定を反映させた。

wsl --shutdown

6. systemd-resolved の無効化

systemd-resolved は、システム上のDNS解決を管理するサービス。しかし、WSLで発生するDNS解決の問題において、このサービスが原因となることが多いため、これを無効化することで手動でのDNS設定が反映されるようにする。

無効化理由:

systemd-resolved が原因でDNS設定が適切に反映されないことが多いため、これを無効化することで手動設定を確実に反映させることができる。

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

実行後、次のような結果が表示された:

Removed "/etc/systemd/system/dbus-org.freedesktop.resolve1.service".
Removed "/etc/systemd/system/sysinit.target.wants/systemd-resolved.service".

7. /etc/resolv.conf の手動設定

次に、/etc/resolv.conf を削除して手動で設定した。systemd-resolved による自動生成を防ぐため、シンボリックリンクを削除した:

sudo rm /etc/resolv.conf

その後、GoogleのDNSサーバーを手動で設定した。

手動設定理由:

systemd-resolved が生成する resolv.conf ではDNS設定が反映されないため、手動でDNSサーバーを指定して設定を固定した。

sudo nano /etc/resolv.conf

nanoエディタを起動して、以下の2行を書き込み:

nameserver 8.8.8.8
nameserver 8.8.4.4

8. 再度 ping コマンドで接続確認

/etc/resolv.conf の設定を変更した後、再度 ping コマンドでインターネット接続を確認した。

ping -c 4 google.com

これで、正常に接続できるようになり、問題が解決したことを確認できた。

9. まとめ

WSLのインストール後、最初に sudo apt update を実行した際にDNS解決の問題に直面したが、systemd-resolved を無効化し、手動でDNS設定を行い、/etc/wsl.conf の設定を変更することで問題を解決できた。これにより、WSL環境でインターネット接続が正常に動作するようになった。

再発防止策:

今後、もし再びネットワークの設定で問題が発生した場合は、以下を確認:

  • /etc/resolv.conf が適切に設定されているか。
  • systemd-resolved が無効化されているか。
  • 必要に応じて、wsl.conf の設定を再確認すること。
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次