はじめに
私は、普段は、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
の設定を再確認すること。
コメント