はじめに
wgetコマンドでhttp経由でファイルを取得しようとしたところ、次のエラーがでて取得ができなかった。そのトラブルシューティング。
failed: Temporary failure in name resolution.
wget: unable to resolve host address
環境
focal (Ubuntu 20.04)
前置き
結論をいうと、DNSによる名前解決ができなかったことが原因です。自分の環境で設定しているDNSサーバーでは名前解決ができないようで、代わりに、GoogleのPublic DNS(8.8.8.8)を設定すれば解決できた。
DNSサーバーのIPアドレスには、自分が契約をしているインターネットプロバイダーが公開しているDNSサーバーのアドレスを設定するのが普通だと思う。物理的な距離が一番近いため、そこのDNSサーバーで名前解決した方が一番高速だと思われるためだ。そもそも、インターネットプロバイダーと契約したとき、DNSサーバーのIPアドレスには、このIPアドレスを指定してくださいと、契約書に書かれているため、そのとおりに設定しているはずだ。自宅に外向けのDNSサーバーを構築して、そこで名前解決をさせない限り、以降、変更することはない。
それが、各プロバイダーのDNSサーバーを駆逐するかのごとく、GoogleがPublic DNSサーバーを公開しているのだ。
「GoogleのDNSサーバーってたぶんアメリカにあるんでしょ。そんなところまで
参照しにいったら、名前解決に時間がかかるじゃん」って思うだろう。だがどうも、GoogleのPublic DNSサーバーを参照した方が、レスポンスが速いらしい。詳細なベンチマークテストをおこなったわけではないので、どの程度高速になったかは分からない。少なくても体感的には高速度加減はわからない。
やったこと
さて、実際に、GoogleのPublicDNSサーバーを設定してみよう。
DNSサーバーのIPアドレスは**/etc/resolv.confで設定する。ls -l /etc/resolv.confをすると、/run/systemd/resolve/stub-resolv.conf**のシンボリックリンクとなっている。
resolv.confに次の一行を追加する。ルート権限でviを開かないと、保存ができないので注意。
nameserver 8.8.8.8
この後、wgetをすると、すんなりダウンロードができるようになりました。8.8.8.8はプライマリサーバーなので、セカンダリサーバーのIPアドレスも設定しておいた方が無難だろう。