ソフトバンク光の通信障害時にDNSを変更して解決する話とその考察

それは2020年5月4日の22時頃発生した
いつもどおり、PCに向かって作業をしようとしたら、インターネット接続が切れていました。
こんなとき、いつも繋がっているかどうか確認するためにYahoo!のページを見に行くのですが、繋がっていませんでした。別PCでやっても接続出来ませんでした。
どうやら回線の問題かと思って光BBユニットを再起動しました。

いつもならこれでことなきを得るのですが、なんかインターネットに接続できませんでした。
光回線が止まってる??
Twitter開いて「回線」で検索したところ、止まっている方がたくさんおられました。
ここで、初めてソフトバンク光回線が落ちたとわかりました。

DNSを変えてみる(これで繋がる)
あるツイートで
優先DNSを「8.8.8.8」、代替DNS「8.8.4.4」にすると、直るよ
っていうのも見かけたのでやってみました。手順を以下に示します。
右クリックします。

「ネットワークとインターネットの設定を開く」をクリック

「アダプターオプションを変更する」をクリック

「イーサネット」を右クリックからの、「プロパティ」をクリック

「インターネットプロトコルバージョン4(TCP/IPv4)」選択し、「プロパティ」をクリック

「次のDNSサーバのアドレスを使う」をクリックして、優先DNSと代替DNSを入力する。

「OK」をクリックして「閉じる」をクリックする
通信障害が起きたときはこれで直ります。
私はこれで直りましたし、Twitterでも直ったという声を聞きました。
どうしてこれで直るのか?DNSについて考察
なぜ、これで直るのでしょうか?理由を考察してみます。
まず、DNSは「Domain Name System」の略です。
人がブラウザで「google.com」と入力して、GoogleのサーバーにアクセスできるのはDNSのおかげで成り立っています。
インターネットに接続されているコンピューターはIPアドレスを持っています。
コンピューター的には、GoogleのサーバーにアクセスするにはIPアドレスで接続しないといけないのです。
DNSは人間の言葉からIPアドレスをコンピューターに教えてくれます。電話帳のような感じです。
「google.com」のIPを調べてみます。コマンドプロンプトを起動して、以下のように入力して実行します。
nslookup google.com

googleのIPアドレスは「172.217.25.206」ということがわかります。試しにこのIPアドレスをブラウザに打ち込むとGoogleのページが出てきます。有名どころのIPアドレス調べてみました。(2020年5月6日)
yahoo.co.jp→182.22.59.229
amazon.co.jp→176.32.98.166
twitter.com→104.244.42.65
こんな感じで電話帳みたいですね
何がいいたいかというと、コンピューターはIPアドレスを使って通信しています。
DNSの手順はこんな感じです。
- ブラウザに「google.com」と入れる
- ブラウザはホスト名を調べ、リゾルバに渡す。(リゾルバは、DNSに問い合わせにいくソフトウェア)
- リゾルバはDNSサーバにホスト名を問い合わせる
- DNSはホスト名からIPアドレスを調べ、リゾルバに返す
- リゾルバはIPアドレスをブラウザに渡す。
- ブラウザは得られたIPアドレスを使用してgoogleのwebサーバと通信を開始する

このようにして、ブラウザはインターネットにアクセスします。
DNSサーバは2種類ある
DNSサーバには2種類あって、DNSキャッシュサーバとDNSコンテンツサーバがあります。
PCなどのDNSクライエントから問い合わせによって名前解決の依頼を受けるのがDNSキャッシュサーバです。
ドメイン名とIPアドレスを対応づけるデータベースを管理しているのがDNSコンテンツサーバです。
なので、ブラウザにgoogle.comなどを入力した場合、そのPCが最初に名前解決するのはDNSキャッシュサーバになります。
DNSキャッシュサーバは問い合わせを受けた時、知っているアドレスであれば、そのままアドレスをコンピューターに返します。
知らないアドレスであれば、DNSコンテンツサーバに探しに行きます。コンテンツサーバは権威サーバーともよばれます。
例えばGoogleやYahoo!のような有名なサイトは頻繁にアクセスされるので、キャッシュサーバがすでに知っています。なので、コンテンツサーバは介さず、そのままアドレスをクライエントにかえしています。もしも、これを毎回コンテンツサーバに探しに行っていると、コンテンツサーバが混雑してしまいます。
下の図はDNSキャッシュサーバにIPアドレス情報がない場合、の名前解決の順番を示しています。
左のルートサーバ、jpのサーバ、example.jpのDNSサーバーの3つがコンテンツサーバです。
下の図のような仕組みのおかげで、キャッシュサーバに情報がなくても、最終的にはIPアドレスをクライエントに渡すことができます。ja.wikipedia.org/wiki/DNSサーバ#コンテンツサーバとキャッシュサーバ
ちなみに、ルートサーバは世界で13クラスタしかなく、日本には1クラスタあるそうです。
私も専門家ではないので、詳しくは調べてほしいのです。ja.wikipedia.org/wiki/ルートサーバ
あと、間違っていたらすみません。

結局、今回何が起きていたのか?
DNSキャッシュサーバはプロバイダーが提供しています。
プロバイダーが提供しているDNSサーバを使うように、PCでは自動で設定されます。
そこで何らかの原因で、ソフトバンクのDNSキャッシュサーバが応答しなかったため、インターネットにつながらなかったんだと思います。(個人的見解)インターネットにつながらないというよりは、名前解決できなかったというのが正しいのかもしれないですがどうなんでしょう?
じゃあなんで、アドレス8.8.8.8を入れると名前解決できるのかと言うと、
なんと誰でも使えるDNSキャッシュサーバ(public DNS)が存在していて、そこのアドレスが8.8.8.8になっているからです。
公開されているDNSサーバはいろいろあるのですが、有名なのがアドレス8.8.8.8であるGoogle Public DNSです。
- Google Public DNS 優先DNS:8.8.8.8 代替DNS:8.8.4.4
- Cloud Flare 優先DNS:1.1.1.1 代替DNS:1.0.0.1
- Quad9 優先DNS:9.9.9.9 代替DNS:149.112.112.10
もちろん、他にもpublicDNSはあります。調べてみてください。
つまり、ソフトバンクのDNSが落ちたので、GoogleのDNSにしたら繋がったということです。
ソフトバンク光は復活しましたが、8.8.8.8に変更したあと、もとに戻しても戻さなくても通信はできます。
今回は以上です。