2014年10月14日の日記です


google DNS  2014-10-14 11:27:58  コンピュータ

昨夜 Google DNS が 30分程度サーバーダウンしたようです。

たまたまその 30分間にネットを見ようとしていた妻が「なんだかおかしい」というので気づきましたが、30分程度なら普通は遭遇しない事例でしょう。


最初は自分の設定したサーバーがおかしいことを疑い、いろいろ調査して google DNS がおかしい、という結論に行きつきました。

すぐに通常ルートサーバを参照する設定に切り替え、速報性の高い Twitter のツイートを調べると、Google DNS が落ちてる、と騒いでいる人たちが多数いました。


2ch にもスレが立っていました。




で、その際に騒いでいた人たちの反応を大別してみると、こんな感じ。


・Google DNS 速いなんて言ってるやつは情薄。海外のサーバなんだから遅いにきまってる。

・Google DNS 使ってたけど落ちるなんて信頼できない。もう使わない。

・Google DNS 落ちてるから、ネットにつなげず、対処法を調べることもできない。(おそらくスマホからの書き込み)


・DNS 使えなくなるだけでネット出来ないなんて、インターネットって不便過ぎね?

・↑IP アドレス直打ちすれば大丈夫。主要サービスの IP は覚えとけ


・Google DNS 勧めてたやつらとか、今どうしてんのか。どう責任取るのか。


さて、以前に Google DNS を勧めた僕としては、最後の意見に対して責任を取ろうかと思います。


まずは、上に書いた主要意見で、間違えている部分について解説を加えます。




まず、DNS の仕組みについておさらいです。

DNS は「情報を知っている人を探す」ことを繰り返して、目的の情報に行きつく仕組みです。


とりあえずは手近な人に聞きますが、普通はその人は情報を知りません。

でも、「あの人なら知ってんじゃない?」と教えてくれます。


次の人も、たぶん情報を知りません。でも、最初の人よりも的確に「あの人は知ってるはずだよ」と教えてくれます。

これを繰り返し、最終的に本当に知っている人に辿りつく、というのが DNS の仕組み。


仕組み上、非常に遅いです。

遅いから、一度聞いた情報は、しばらく覚えておきます。


だから、最初の問い合わせが遅くても、2度目の問い合わせは速いのが普通です。


Google DNS が「速い」というのは、最初からすべての情報を覚えているためです。


先に、「遅いからしばらく覚えておく」と書きましたが、Google DNS は永遠に忘れません。

情報が書き変わると困るので、一定時間たつと勝手に「再問合わせ」して、最新情報を取得します。

でも、これは裏で勝手にやっていることで、誰かに尋ねられてから情報を探すのではないのです。


だから、「知っているほかの人に聞く」という時間が発生せず、必ず瞬時に応答を返します。




通常は、DNS サーバーには「契約しているプロバイダの DNS サーバー」設定します。

これは、家庭に来ている回線の、すぐ向こう側にあるものです。


Google DNS サーバーは、確実にそれよりも遠いところにあります。

このため、プロバイダの DNS サーバが「情報をたまたま覚えていた」場合よりは、絶対に速度が遅くなります。


海外だから遅いと言っている人もいるけど、Google DNS 自体は世界中に分散しているし、たぶん日本にも置かれている。

遅い理由は海外だからではなくて、「プロバイダの DNS より遠いから」なのね。


でも、プロバイダの DNS が「知らなかった」場合、プロバイダの DNS はそこから情報探しを始めます。

この場合、必ず一発で答えを返す Google DNS サーバーよりも、絶対に遅いのです。



ちなみに、本当はあなたに一番近い DNS サーバーは「Windows / MacOS に内蔵しているもの」です。

よく使うホスト名などは、OS が覚えているからプロバイダの DNS に問い合わせることすらしない。


そして、ほとんど知られていないような個人サイトのホスト名(www.wizforest.comとか)などは、OS も知らないのでプロバイダの DNS に問い合わせるでしょう。

でも、そんなサイトはプロバイダも知らない可能性が高い。その際は、さらに別の DNS に問い合わせ始めます。



つまり


・よく使うサイトなら、OS が覚えているから DNS の速度は関係ない

・ほぼ知られていないサイトなら、google DNS の方が速い


これが、「Google DNS は速い」と言われる根拠です。


残りの中間層…自分はあまり使わないけど、世の中的には有名なサイトに問い合わせる場合は、プロバイダの DNS はきっと「誰かに問い合わせられた」ことがあり、覚えていた内容を返すでしょう。


この場合は、Google DNS よりもプロバイダの DNS の方が速いことになります。




次。順番変えて「DNS なければ IP 直打ち」の話から。


DNS はインターネットにとって「後から考え出された」技術で、必須ではありません。

だから、DNS 落ちただけでネット使えなくなるなんて不便すぎ、というのは確かに事実ではない。


じゃぁ、IP 直打ちでサイトが見られるか、と言うと、通常はみられません。


サーバーの効率化のため、1つの IP アドレスで複数の WEB サイトを運用する方法が現在の主流です。


もちろん、WEBサーバーのアクセスには IP アドレスが使われます。

でも、そのアクセスの際に、URL の「ドメイン名」の部分が送信され、WEBサーバーはこのドメイン名を元に、表示するサイトを切り替えます。


そのドメイン名部分を IP 直打ちにしてしまうと、サーバーはどのサイトへのアクセスか判別できなくなってしまう。



だから、DNS が使えなくなったらネット…すくなくとも、WEB サービスは使えなくなる、という前提で正しい。


でも、「DNS 落ちただけでネット使えなくなる」のは、設定したあなたのせい。

Google に限らず、すべてのサービスはいつ停止するかわかりません。無停止運用を期待してはならない。


Goole DNS が信じられないから別の Open DNS (誰でも使ってよい DNS)を設定するとか、プロバイダの DNS に戻すとかしても、それらもやはり停止する可能性があります。

だから、こちらも解決にはなりません。


#むしろ、Google DNS は停止が非常に少ない部類です。


DNS は、通常2つ以上を設定できるようになっています。非常に重要だからです。

片方が停止しても、もう片方が使えれば、自動的にそちらを使います。


計画的にメンテナンスなどで停止する場合は交互に止めるため、問題ありません。

でも、突発事故で両方止まる可能性は常にあります。


いくつか設定をメモしておいて、何かあったらすぐに交換できるようにしておくのが良いでしょうね。


#僕はそうしていたので、Google DNS がおかしい、と理解したらすぐに設定を変えておしまい、でした。


これで、上に書いたことについては、全て答え終わり。




さて、2ch では、「今後の対処」として、2つ設定できる DNS サーバーの1つを Google DNS にして、もう1つをプロバイダの DNS にする、というような設定方法を考えている人もいました。


この方法だと、どちらか片方が停止しても問題は出ないので、悪くは無さそうです。



でも、実は Google DNS の真の目的は、速度ではありません。セキュリティです。

セキュリティは常に弱いところからほころびます。

Google DNS 「以外」の DNS を併記するのは、あえて「弱い」部分を導入することになります。



まず、Google DNS のセキュリティについて書きましょう。


先に書いたように、DNS は「知っている人に聞く」仕組みです。

これ、インターネットに接続している人は皆善人だ、という前提に立っています。

DNS が最初に設計されたころは、インターネットは小さな実験ネットワークだったので、これで良かった。


でも、DNS の仕組みにたった一人の「嘘つき」が混ざるだけで世界は破綻します。

「~について教えて」と A さんが B さんに聞いたときに、聞かれてもいない C さんが、「~だよ」と横からささやくだけでいいのです。


もちろん、C さんは B さんの真似をします。すると、善人である A さんは、疑いもせず情報を信じてしまいます。


結果として、WEB ブラウザは間違ったホストに接続するでしょう。

そのホストにはウィルスなどが置いてあり、あなたのコンピューターの重要データを盗み出せるわけです。


DNS は、多数のサーバーに情報を分散させるシステムですが、この分散こそがセキュリティの穴なのです。


Google DNS は、あらかじめすべての情報を覚えておく…情報分散をやめることで、セキュリティの穴を無くします。


これが、Google DNS を使用する最大のメリットです。




さて、話を戻して DNS 設定。

2つ(もしくはそれ以上)の DNS を設定できますが、「優先」「代替」と呼ばれます。


通常は優先 DNS を使用します。そして、優先 DNS が応答しない(サービスが停止している)場合、代替 DNS が使用されます。



優先に Google DNS を設定し、代替にそれ以外の DNS を設定した場合、Google DNS が動いている限り、セキュリティは確保されます。


もし今回のように Google DNS が停止した場合、代替の DNS が使用されます。

この切り替えは勝手に行われるため、セキュリティが甘くなっている状態であることをあなたが知ることはありません。


#DNS が代替に切り替わるのに2秒かかるので「何か遅い」くらいには感じるかもしれませんが。



もっとも、現状の Google DNS の稼働率を見ると、非常にまれなことです。

そして、通常の DNS も、セキュリティの甘さが指摘はされていますが、大きな問題なく動作しています。


#DNS サーバー全てのセキュリティが甘いのではなく、ちゃんと設定されていれば問題はないのです。

 ただ、世界中に何万もある DNS サーバー全てがその設定になっている保証がなく、DNS の情報リレーの際にそこを通る可能性は常にある、というだけ。


ちゃんとリスクを認識したうえで、そのような設定を行うのであれば、悪くないと思います。



僕としては、「問題があったらすぐに切り替えられるように」準備したうえで、普段は常に Google DNS を使用します。

問題があった際にセキュリティが甘くなることは同じなのだけど、切り替える際に「セキュリティが甘くなる」と自分で認識できるからね。



2014.10.15追記


「Google DNS は CDN と相性が悪い」という指摘を頂きました。


調べてみたら、ずっと以前にすでに指摘している人がいるのですね…

恥ずかしながら不勉強で知りませんでした。


CDN (Contents Delivery Network) は、一種の WEB キャッシュサーバーです。

海外など、非常に遠い場所にある WEB に「誰か」がアクセスしたタイミングで内容を取得し、覚えておきます。


その後、別の人がアクセスしようとすると、覚えて置いた内容(キャッシュ)を返します。

海外に取得に行く必要が無くなり、非常に高速に結果を得られます。


ただ、CDN という存在は知っていたし、かなり利用されているのも知っていたのですが、その詳細な仕組みは知りませんでした。


詳細な仕組みとしては、大手の ISP (接続プロバイダ)にキャッシュサーバがあるのだそうです。

そして、 ISP の DNS を使用していると、キャッシュされている内容に関してのみ、アクセス時にキャッシュサーバを参照するように IP アドレスが送られてくる。



この場合、プロバイダ…あなたの家に来ている接続線のすぐ向こう側…の内部で、すべてが完結します。

非常に高速に動作するのですが、それだけでなくもう一つのメリットがあります。


それは、「プロバイダが通信料金を払わなくてよい」ということ。

プロバイダもまた、別のプロバイダとの通信を行う際には通信料金を支払わねばなりません。

でも、自社内部で完結していれば、料金は発生しないのです。


これによってプロバイダは、ユーザー(あなた)に対しても安い接続料金を提供できます。


ところが、もし Google DNS を使うと、プロバイダは CDN を活用できなくなり、外部のサーバーへアクセスしなくてはならなくなります。


たとえ DNS 部分は Google DNS が速かったとしても、その後のデータ取得は遅くなります。

また、プロバイダは無駄な料金支払いが発生するため、ユーザーに対して料金を値上げしなくてはならなくなります。


…というのが、CDN と相性が悪い、という話。


僕は「DNSとして」しか Google DNS を見ておらず、CDN まで含めた話では考えていませんでした。

(不勉強で、詳細な仕組みを知らなかったせいでもあります)


Google DNS はセキュリティ的には良いものなのですが、なかなか難しいものです。




もちろん、Google も CDN 業者と話し合いを持っており、Google DNS を使いながら CDN も活用できるような仕組みを策定しようとしているようです。

しかし、現状話し合いはあまり進んでいない模様。


プロバイダの DNS と Google DNS 、どちらを使うかはしばらく悩ましい状況が続きそうです。



2016.9.4追記

本文最後に書いた CDN を活用できる仕組み、RFC 7871 として 2016年 5月に発行されています。


CDN サーバーが、Google DNS のような Public サーバーに対し、特定の IP アドレス空間(プロバイダから見ると、自社提供ネットワーク内)では、DNS 問い合わせに対して CDN キャッシュサーバーのアドレスを返すよう依頼できる機能です。


僕は本文最後に「悩ましい」と書きながら、Google DNS を使ってきました。

CDN 活用の仕組みが整ったことで、今後も安心して使用を続けられます。



#なお、RFC 7871 に至るドラフト案は、本文を書いたすぐ後、2014年末には出されていたようです。

 CDN 大手の akamai 社が原案を考え、そこに google も乗っかった形で RFC まで発展してきました。

 google DNS は最初のドラフト案時点で実装を開始したようだ、という話(公式ではない、未確認情報)もあったので、ずっと使っていてもプロバイダに負担をかけていたわけではなかったようです。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

Programming Tips

ポール・モカペトリスの誕生日(1946)【日記 14/11/18】

別年同日の日記

02年 ねずみあんか

13年 ブノワ・マンデルブロの命日(2010)

15年 アショーナ・ヘイリーの命日(2011)

15年 ゲームセンターあらし 発表日(1978)


名前 内容


戻る
トップページへ

-- share --

21005

-- follow --




- Reverse Link -