🙄

WSL2でCould not resolve hostnameとなりDNS解決できないとき

に公開

WSL2でCould not resolve hostnameとなりDNS解決できない問題を解決する方法

なにこれ

最近、WSL2環境でGitHubからリポジトリをクローンしようとした際に、以下のようなエラーが発生しました。

ssh: Could not resolve hostname github.com: Name or service not known
fatal: Could not read from remote repository.

could not resolve hostnameだと!?DNSが解決できないのかーーー。
DNSの解決はいわば、 github.comをipに書き換える感じですね。
今回はこれの解決方法を備忘録として残します。

原因

このエラーが発生する主な原因は、WSL2の環境におけるDNSの問題です。

WSL2はWindowsのDNS設定を引き継いでいるため、VPNや特定のネットワーク環境下では正しく名前解決ができないケースがあります。これが原因で、GitHubのホスト名(github.com)を解決できず、SSH接続に失敗していました。

解決方法

1. WSL2の設定を修正

まず、WSL2が自動生成するDNS設定を無効化します。

WSL2の設定ファイルを開きます。

sudo vim /etc/wsl.conf

以下の内容を追加して保存します。

[network]
generateResolvConf = false

2. WSL2の再起動

変更を適用するため、WSL2を再起動します。

3. resolv.confの作成

WSL2が再起動した後、手動でDNS設定を作成します。

sudo nano /etc/resolv.conf

以下を記述して保存します。

nameserver 8.8.8.8
nameserver 8.8.4.4

これらは、Googleが提供しているパブリックDNSサーバーのIPアドレスです。
名前解決が早くて信頼性があるので、困ったらとりあえずこれを使うと大抵うまくいくらしい。

5. 動作確認

再度pingを飛ばして、正常なレスポンスが返ってくるか確認。

ping github.com

まとめ

WSL2環境では、DNS設定がWindows側の影響を受けるため、特にVPNを利用している環境では名前解決ができない問題が発生しがちです。今回紹介した方法で、GoogleのパブリックDNSを直接指定することで問題を回避できました~

Discussion