No299 インターネットを支えるDNS
前回、SPFの解説の中でDNSというサービス名が出てきました。
このDNSは陰ながらインターネットを支える最重要なサービスの一つです。
今回は、そのDNSにスポットライトをあてましょう。
DNSとは?
DNSは Domain Name System の略でドメイン名からIPアドレスを得るためのサービスです。
皆さんが、インターネットを利用する時には必ずと言っていいほどDNSサービスを利用しています。
例えば、Googleへのアクセスは次のURLで可能です。
http://www.google.co.jp/
このURLは実は次のように書いても全く同じ結果になります。
http://172.217.25.174/
補足
最近ではhttps://.... が一般的で、http://.... は非推奨です。
上の例であえてhttpを使ったのは、次のURLは警告が出るためです。
https://172.217.25.174/
この理由については改めて解説をしたいと思います。
この www.google.co.jp を ドメイン名(正確にはホスト名ですが、ここでは同じ意味で使います)と呼び、 172.217.25.174 をIPアドレスと呼びます。
実際には、ChromeやSafari、EdgeといったインターネットブラウザでGoogle.co.jpを利用する時は、ブラウザ内部で google.co.jp からIPアドレスを得てそこにアクセスします。
その意味で、ブラウザの接続先は google.co.jp ではなく 172.217.25.174というコンピュータなのです。
この google.co.jp から 172.217.25.174 に変換するサービスが DNS なのです。
ですので、DNSは前回に書いたメールサービス以上に裏方のサービスです。
DNSがない世界は不便で仕方ない
DNSがない世界はひどく不便です。
携帯電話を使う時には電話番号なんて覚えていませんよね。
電話帳を使いますよね。
ドメイン名も同様で、多くの組織では自社名やブランド名でドメインを取ります。
利用者もそういったドメインを見て社名やブランド名を知ることができます。
これが数字だけのIPアドレスになると、わかりづらいですし、覚えるのも大変です。
また、IPアドレスは基本的には場所(国)に依存しますので、サーバの設置国を変更するとIPアドレスも変わってしまいます。
もしURLがIPアドレスだと、設置国が変わると古いURLは使えなくなります。
ですが、DNSであれば、ドメイン名に対応するIPアドレスを変更するだけで、URLはずっと使い続けられます。
ですので、ブックマークなどに入っているURLもずっと使えるわけです。
DNSは分散型サービスであり、階層型サービス
DNSには「分散型サービス」という特徴があります。
それぞれのDNSサーバは自ドメイン内のサーバ情報はわかるけどヨソのことは知らん、という形になっています。
そうはいっても、各ドメインの管理サーバがどこにあるのか?を知る必要があります。
まさか、闇曇に探して回るわけにもいきません。
DNSでは階層モデルという方式で、非常に効率良くこれを実現しています。
いつものように具体例でいきましょう。
前述のgoogle.co.jp からIPアドレスを探す手順は次のようになります。
まず、末尾の"jp" を管理しているサーバを探すため、ルートサーバと呼ばれるサーバ(これは世界に13箇所あります)に「"jp"のサーバはドコにある?」と聞きに行きます。
そこで得た"jp"の管理サーバに"co.jp"を管理しているサーバはドコにある?と聞きに行きます。
次に、"co.jp"の管理サーバに"google.co.jp"を管理しているサーバはドコにある?と聞きに行きます。
最後に、"google.co.jp"を管理しているサーバに"google.co.jp"のIPアドレスを教えて、と聞きにいきます。
つまり、
ルートサーバに"jp"の管理サーバを教えてもらい、
↓
"jp"の管理サーバに"co.jp"の管理サーバを教えてもらい、
↓
"co.jp"の管理サーバに"google.co.jp"の管理サーバを教えてもらい、
↓
"google.co.jp"の管理サーバに"google.co.jp"のIPアドレスを教えてもらう。
という4段構えで、IPアドレスを取得しているわけです。
キャッシュサーバ
DNSの基本的なアクセスは上記の通りなのですが、実際には皆さんのパソコンやスマホから上記のルートサーバにアクセスすることはまずありません。
というのは、ほとんどの場合はキャッシュサーバという中継サーバが代行をしてくれるからです。
多くの場合、家庭であればルータやISP(インターネットサービスプロバイダ)のDNSサーバを、会社などの組織であれば、組織内で準備したDNSサーバを利用します。
このDNSサーバは今までに(社内の誰かが)アクセスしたドメインとIPアドレスを一定期間(例えば3日間)覚えています。
これをDNSキャッシュと呼びます。
余談
キャッシュというのは、Chromeなどのブラウザのキャッシュと同じ意味です。
ちなみにキャッシュはcash(現金)ではありません。
cache(隠し場所、保管庫)の意味です。
問い合わせを受けたDNSサーバは、まずDNSキャッシュにそのドメインがないかどうかを確認します。DNSキャッシュが見つかれば、ルートサーバなどに再確認をするまでもありませんから、そのまま依頼元に返します。
つまり、キャッシュサーバにあるものはその内容を返し、見つからない場合はルートサーバに問い合わせをするわけです。
キャッシュで見つかれば、わざわざインターネット上で探す手間が省けます。
これは依頼元に素早く返信できるだけでなく、インターネット上に不要なパケットを流さずに済む点でも優れた方式と言えます。
まとめ
DNSは分散サービスとしては世界最大規模のサービスです。
現在では、ドメイン名からIPアドレスへの変換だけでなく、前回に述べたSPF(メール発信者の検証)やメールサーバの情報といった様々な情報が提供できるサービスとなっています。
それだけ重要なサービスであるが故に、DNSを狙った攻撃も存在しています。
もし、DNSサービスが乗っ取られたり、DNSキャッシュが書き換えられたりすると大変です。
あなたの携帯電話の電話帳を誰かが書き換えたとしたら?さらにその主の声質が似ていたら?それでも騙されないと言い切れますか?
DNSキャッシュの書き換えはそれと同じことなのです。
そのため、DNSサービスに大きな脆弱性が見つかると、業界内ではかなりザワつくことになります。
そんな時はネットワーク機器のベンダや各組織のDNS担当者は悪用されていないことの証拠集めやバージョンアップで走り回ることになります。
それだけ、DNSというサービスが重要である証左と言えます。
幸いなことに、DNSサービスはかなり以前から安定稼動をしていて、重大な脆弱性は滅多に見つかっていません。(人間の作るソフトウェアですから絶対はありませんが)
今回は、DNSというドメイン名をIPアドレスに変換する仕組みについて解説をしました。
次回もお楽しみに。
(本稿は 2023年3月に作成しました)