【調査と解消】DNS_PROBE_FINISHED_NXDOMAIN
PCを起動してしばらく使っているとChromeで一部のサイトにアクセスできなくなりDNS_PROBE_FINISHED_NXDOMAIN
のエラーが発生していました。
この問題について調査して解消できたので、その内容を記載します。
結論
私の場合はDHCPクライアントが起動しておらず、IPアドレスが有効期限切れで使えなくなっていたことが原因でした。
PC起動時にDHCPクライアントのdhcpcd
が自動起動するように設定したことで解消しました。
$ systemctl enable dhcpcd.sevice
以下に問題と調査した内容の詳細を記載します。
環境
- OS: Manjaro
- ブラウザ: Google Chrome
問題発生時の状況
基本的には普通にインターネットを利用することができます。
しかし、しばらくすると一部のサイトにアクセスしようとしたときだけDNS_PROBE_FINISHED_NXDOMAIN
のエラーが発生し、見られない状態になっていました。
例えば、Google検索は常に問題なく行うことができますが、 https://tver.jp にはアクセスできなくなる、といった形です。
PCを再起動すると全てのサイトにアクセスできるようになりますが、またしばらくすると一部のサイトにアクセスできなくなる、となっておりました。
調査
DNS_PROBE_FINISHED_NXDOMAIN
とは何か?
とりあえずこのエラーが何かを確認します。
調べると、DNSがドメイン名をIPアドレスに変換できなかったということを表しているようです。
ユーザーがWebブラウザにURLを入力すると、DNSがそのURLをサーバーのIPアドレスに合わせます。これはDNSの名前解決といい、サーバーの実際のIPアドレスを把握するためにさまざまなネームサーバーに問い合わせるDNS再帰のことです。DNSがドメイン名またはアドレスの解決に失敗すると、DNS_PROBE_FINISHED_NXDOMAINエラーが発生することがあります。NXDOMAINとは、Non-Existent Domain(存在しないドメイン)の略です。
再起動前後の変化を確認する
再起動すれば一時的に問題が解決することは分かったため、問題が起きている状態と再起動した後で何が変化するのか確認します。
エラーからDNSの名前解決に失敗していることが分かっているので、DNSサーバの動作を確認するnslookup
コマンドを利用します。
アクセスできなくなる tver.jp
を使って確認しました。
再起動前
$ nslookup tver.jp Server: 2001:268:fd07:4::1 Address: 2001:268:fd07:4::1#53 Non-authoritative answer: Name: tver.jp Address: 13.35.49.113 Name: tver.jp Address: 13.35.49.13 Name: tver.jp Address: 13.35.49.40 Name: tver.jp Address: 13.35.49.5
再起動後
$ nslookup tver.jp Server: 192.168.0.1 Address: 192.168.0.1#53 Non-authoritative answer: Name: tver.jp Address: 13.35.49.13 Name: tver.jp Address: 13.35.49.113 Name: tver.jp Address: 13.35.49.40 Name: tver.jp Address: 13.35.49.5
コマンド直後のServer
とAddress
の値が再起動前後で変わっています。これはDNSサーバの名前とIPアドレスを表すものです。
2001:268:fd07:4::1
はIPv6のIPアドレスで、192.168.0.1
はIPv4のIPアドレスなので、このIPv6かIPv4かの違いが怪しいです。
ついでにエラー中でもアクセスできる google.com
も確認しておきます。
$ nslookup google.com Server: 192.168.0.1 Address: 192.168.0.1#53 Non-authoritative answer: Name: google.com Address: 216.58.197.238 Name: google.com Address: 2404:6800:4004:818::200e
google.com
の名前解決結果に、tver.jp
では見られなかったIPv6のIPアドレス(2404:6800:4004:818::200e
)が含まれています。これはIPv6対応のサイトであるということです。
ここまでの調査で、DNSサーバのIPがIPv6のものを使っている場合、IPv6対応のサイト(IPv6のIPアドレスを持っているサイト)にしかアクセスできないということ、そして何らかの原因でIPv4のDNSサーバが利用できなくなっていること、そのためにIPv4にしか対応していないtver.jp
のようなサイトにアクセスできなくなることが分かりました。
なぜIPv4のIPアドレスのDNSサーバを利用できないのか?
いくつか理由は考えられるかもしれませんが、私は、DNSサーバと通信する私のPCのIPアドレスがIPv6のものになっているのではないか?だからIPv6のDNSサーバしか利用できないのではないか?と仮説を立てました。
基本的にはIPv4同士、IPv6同士でしか通信できないためです。
PCのIPアドレスを確認する
ip address
コマンドで確認しました。
$ ip address ...(略)... 3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 18:5e:0f:24:e0:91 brd ff:ff:ff:ff:ff:ff inet 192.168.0.6/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp3s0 valid_lft 2048sec preferred_lft 2048sec inet6 240f:74:f712:1:73ec:8cd1:1357:ad22/64 scope global dynamic noprefixroute valid_lft 281sec preferred_lft 281sec inet6 fe80::2eee:3aac:99d8:db81/64 scope link noprefixroute valid_lft forever preferred_lft forever
するとinet
のvalid_lft
の数値が時間が経つごとに減っていっていることに気づきました。valid_lft
について調べると、IPアドレスの有効期限ということです。Linux:ネットワーク設定の確認を行う、ipコマンドを読み解く | SlackNote
試しにvalid_lft
が0になるまで待ってみると、0になった後はそのIPアドレスが消え、DNS_PROBE_FINISHED_NXDOMAIN
のエラーが発生するようになりました。
上の例では最終的にvalid_lft forever
となっているIPv6のIPアドレスだけが残ることになります。
私が考えていた、PCのIPアドレスがIPv6のものになるため、IPv6のDNSサーバしか利用できないというのは正しそうなことが分かりました。
DHCPクライアントを起動する
valid_lft
が0になってIPアドレスが消えてしまうのは困ります。これをいい感じにしてくれるのがDHCPクライアントです。
DHCPクライアントが動いている場合、valid_lft
がある程度短くなった時点でDHCPサーバに問い合わせて新しいIPアドレスを割り当ててくれます。
私が使っているOSではdhcpcd
がデフォルトのDHCPクライアントなので、これをPCの起動時に有効になるように設定しました。
$ systemctl enable dhcpcd.sevice
これで常にIPv4のIPアドレスが使えるようになり、これ以降DNS_PROBE_FINISHED_NXDOMAIN
が発生することはなくなりました。
DHCP周りはあまり詳しくないので、もし間違っている情報があれば教えていただけますと幸いです。