あきろぐ

いろいろめもするよ🐈🐈🐈

DNSの仕組みについてまとめてみた

最近、mochikoさんの「DNSをはじめよう」を読破したので、私なりにDNSについてまとめてみる。

 

DNSとは?

正式名称は、Domain Name System。

 名前解決する仕組みのこと。

「このホスト名のIPアドレスなんだっけ?」とDNSサーバー(ネームサーバー)に尋ねに行くとIPアドレスを教えてくれるので、その情報を用いてWebページにアクセスできるようになる。

DNSを理解する上で重要なワードは、「フルリゾルバ」「ネームサーバー」の2つ。

 フルリゾルバとは、「秘書」のような役割を持っています。フルリゾルバにこのホストのIPアドレスを知りたい!と伝えるとあちこちのネームサーバーに聞きまわって探しに行ってくれる。一度得た情報はキャッシュとして格納しておくので、次回同じ事を聞かれたらすぐに教えられるようになる。(自分のノートにメモしておくようなイメージ)

ネームサーバーとは、「電話帳」のような役割を持つ。この電話帳にはIPアドレスやそれに対応するホスト名が登録されている。フルリゾルバが尋ねに来たら、自分が持っている情報を教えている。

名前解決するまでの流れ

例えば「www.neko.cat」のIPアドレスを知りたいとき、まずフルリゾルバに対して「www.neko.cat」を知っているか尋ねに行く。フルリゾルバ自身がそのIPアドレスを知らなかったら、次はルートネームサーバーに聞きに行く。

ルートネームサーバーは、「www.neko.cat」は知らないが、「.cat」ドメインを管理しているネームサーバーは知っているので、その宛先をフルリゾルバに教える。

続いてフルリゾルバは「.cat」ドメインを管理しているネームサーバーに聞きに行く。そのネームサーバーは、「www.neko.cat」は知らないが「.neko.cat」ドメインは知っているので、その宛先をフルリゾルバに教える。

そしてフルリゾルバは「.neko.cat」ドメインを管理しているネームサーバーに聞きに行き、知りたかった「www.neko.cat」のIPアドレスを教えてもらう。

最後にフルリゾルバがそのIPアドレスを尋ねてきた人に教えてあげることで、Webページにアクセスすることができる。

このように、1つのネームサーバーが全ての情報を知っている訳ではないので、いくつかのネームサーバーに聞きに行くことで知りたい情報を得ることができるようになっている。会社で例えると、1つの部署が全てを管理しているのではなく、いくつかの部署に分担して管理しているとイメージしてもらえれば良い。

※イメージは下記

 

f:id:akngo22:20190123215141p:plain

 ネームサーバーを詳しく

通常、各ネームサーバーは複数台で構成されていることが多い。なぜなら、1台のネームサーバーがダウンした場合でも名前解決できるように冗長構成にしているからである。(とはいえ、私が関わっているプロジェクトはネームサーバーは1台。。。)

ネームサーバーは電話帳にゾーン情報を管理しているが、その「電話帳」のことを「ゾーンファイル」と呼ぶ。このゾーンファイル中には、ドメインとそれに紐づくIPアドレス、つまり「レコード」が記載されている。このレコード情報を確認して、ネームサーバーはフルリゾルバにドメイン情報を教えているのである。

レコードの種類

ゾーンファイルに記載するレコードは7種類ある。

SOAレコード

このレコードには、ゾーンに関する基本的な情報が記述されている。

ネームサーバーのホスト名、管理者のメールアドレス、ゾーン情報を破棄するまでの時間、ネガティブキャッシュの有効期限等が書かれている。

NSレコード

これは、ゾーンを管理するネームサーバーをFQDNで記述している。

ネームサーバーは1つだけでなく複数登録することが可能。

MXレコード

メールサーバーがメールを送るときに参照するレコード。

このゾーンのメールサーバーはこれですよ~と教えている。

このレコードには、プリファレンス値というメールサーバの優先度を示す値が書かれている。数値が小さいほど優先度が高いことを示している。

Aレコード

これは、正引きゾーンファイルで使用されるレコードで、ホスト名に対応するIPアドレスを指定する。(IPv4のみ)

AAAAレコード

IPv6の正引きゾーンファイルで使用されるレコードで、ホスト名に対応するIPアドレスを指定する。

CNAMEレコード

ホストの別名を定義する場合に記述する。

このレコードを指定する場合は、定義した別名を使ってNSレコードを記述しないことに注意しなければならない。

また、複数のCNAMEレコードを記述することも不可。

PTRレコード

IPアドレスに対応するホスト名を記述し、逆引きするときに使用するレコード。

IPアドレスの後に「in-addr.arpa」を付けることに注意する。IPv6の場合は、「ip6.arpa」を付ける。

 

参考文献

  • AWSをはじめよう

https://amzn.to/2FLY2AS

https://amzn.to/2FPjxAP

 

「DNSをはじめよう」読みました

DNSはじめよう読んだ

技術書典で購入したmochikoさんの「DNSをはじめよう」をやっと読破!

色んな方がコメントしているように、初心者に寄り添ってDNSについて解説してあり、すんなり理解できる良本だった。

技術書って文字が多くて専門用語が大量にでてきて堅苦しいので読むのに時間がかかるが、こちらの本は文字と図のバランスが良く、話し言葉なのでとにかくサクサク読める。。。さらに、所々にクイズや例を挟んでいるのでイメージがしやすい。

また、自分で手を動かしながら確認できるので、DNS初心者にはもってこいの本だった。AWSのアカウントを作成するところから一緒にハンズオンできるので、AWS使ってみたい人にもおすすめの一冊だと言える。

市販されている技術書はそれなりに値段が張るけど、この本は電子版で1000円、書籍で1500円。150ページ弱あってこの値段は安いと思う。

booth.pm

 

1章.ドメインWhois

まずはドメインの買い方から丁寧に解説しており、レジストリレジストラ、リセラの違い・関係性を分かりやすく説明している。

ドメイン購入するのは複雑なのかなと勝手にイメージしていたが、意外と簡単に購入できるものなのとは少し驚いた。

2章.DNSの仕組み

ここでは、DNSサーバーの仕組みを詳細に分かりやすく説明している。自分が購入したドメインを使って解説しているので、イメージがつきやすいと思う。

3章.AWSのネームサーバを使ってみよう

 ここではAWSのRoute53を使って、ドメインのネームサーバーを変更する手順について書かれている。AWSのアカウントを作成するところから丁寧に説明しているので、AWS触ったことない人でも入門しやすいのでは?と思う。

4章.digとwhoisをたたいて学ぶDNS

 ここでは名前解決コマンドdigの使い方を説明している。名前解決に使用するコマンドと言えば他にもhostやnslookupがあるが、これらよりdigを推薦する理由、便利な使い方を述べられている。私も普段はnslookupしか使っていないが、digコマンドは詳細な情報を取得することができるのでマスターしたい。

5章.トラブルシューティング

最後にDNS関連のトラブルを6個の例を示して解説している。サイト移管するとき、サイトが急に見れなくなったなどの問題に遭遇した場合にどう対処すればいいか書かれている。

最後に

DNSの続編として「AWSをはじめよう」もあるので、興味がある方は読んでみてほしい。mochikoさんの新刊がまた出たら買いたいな~~

booth.pm

 

 

iSCSI Port Bindingについて

今回は、iSCSI Port Bindingについてまとめてみた。

iSCSIポートバインディングとは

端的に言うと、「ESXiのVmkernelとvmnicを紐づけること、結び付けること」

ESXiとブロックストレージを接続するとき、iSCSIポートバインディングを行なうことで、冗長化トラフィックを分散させることが可能になる。

f:id:akngo22:20190120162234p:plain

NICチーミングじゃだめなのか

冗長化を考えるときにNICチーミングも1つの手段として挙げられるが、トラフィックの分散ができなかったり、分散するにも冗長かつ負荷分散できるスイッチが必要で設定する必要だったりとある条件下でないといけない。また、同一ネットワークサブネットにESXiのVmkernelが複数ある場合、ホストのネットワーク通信には1つのVmkernelを選択するというVMware側でルールがありNICチーミングでは冗長化かつ負荷分散が難しい問題がある。

そのため、iSCSIポートバインディングで設定することが推奨されている。

iSCSIポートバインディングの仕組みってどうなってるのか

ESXiには4つのvmnicが搭載されており、そのうちの2つのvmnicをストレージ用に割り当てているとする。

 iSCSIソフトウェアイニシエータによって、ポートバインディングが行われvmkernel(vmk)とvmnicの紐づけられる。従ってvmkとvmnicは1対1の関係が成立し、同一ネットワークセグメントで複数のvmkがあってもESXiレベルでの通信経路が常に2つある状態を保つことができる。またL2スイッチとストレージを接続することで、ESXiホスト~ストレージ間では4つの経路を確保することが可能となる。

このような構成にすることで、常に2つの経路が保たれているので、負荷分散が可能になり、もし1つのvmnicが使えなくなったり、ストレージのポートが駄目になったとしても、片方のアクティブパスを使用することで可用性を高めることができる。

f:id:akngo22:20190120162358p:plain

参考文献

 

 

 

NICチーミングって何だっけ?

普段の業務でNICチーミングしたり、チーミングを解除したりしているけども、「NICチーミングとは何か?」と聞かれるとはっきりと分かりやすく説明できないので、自分なりに調べてまとめてみた。

 

NICチーミングとは(Teaming)

読んで字のごとく、簡単に言うとNICのチームを作ること」。サーバーには複数の物理NICが搭載されているが、それを1つに束ねて1つの仮想的なNICとすること。

何でNICチーミングをする必要があるかというと、耐障害性を強化したり、使用帯域を向上させることができるからだ。

つまり、チーミングを行うことでNICの冗長性を保つことができる。

f:id:akngo22:20190115210919p:plain

NICチーミングの種類

NICチーミングには以下の3種類ある。

 

①フォールトトレランス(Fault Tolerance)

直訳すると障害耐久性。チーミングしたNICをプライマリとセカンダリに分けて普段はプライマリの方のNICを使用する。障害が発生してNICが使えなくなるとセカンダリに切り替えて通信を行う。

 

②リンクアグリケーション(Link Aggregation)

同時にチーミングしたNICを使用して帯域幅を増やすことができる手法。

1つのNICの帯域が1Gbpsだったとするとアグリケーションすることで2Gbpsになる。帯域幅が増えるということは、ケーブルが太くなるイメージですかね。つまり、ケーブルが太いほど一度に送る情報を増やすことができるということ。

 

③ロードバランシング(Load Balancing)

同時にチーミングしたNICを使用してトラフィックを分散する手法。イメージとしてはY字路のような感じ?(1つの仮想NICとしているが、実際には分岐している)1つのNICが高負荷にならないようにトラフィックを分散させて耐障害性を高めている。

 

私のそれぞれのイメージはこんな感じ。

f:id:akngo22:20190115232846p:plain

参考文献