tech::hexagram

personal note for technical issue.

3分間DNS 基礎講座メモ

3分間DNS基礎講座

3分間DNS基礎講座

3分間DNSという本を会社の先輩にお借りしていて、ようやく読み終えたのでメモしておきます。

h2. TCP/IPとアプリケーションプロトコル

IPアドレスにはネットワーク部とホスト部があり、ホスト部の大きさが大きいほどネットワークの大きさが大きくなる。
例: 172.15.4.1 / 22 <-ネットワーク部のビット数
通信ではTCPないしUDPが利用される。TCPは確実なデータ転送を行う際に利用される。

通信を段階化して考えると、ユーザ->サービス->通信アプリケーション->プロトコル->TCP/IPとなる

  • サービス: ユーザにネットワーク機能を提供。Webサイト閲覧、ファイル転送、メール転送など
    • 通信アプリケーション: サービスを実施。ブラウザ、FTPソフト、メールソフト
    • プロトコル: サービスを実現。HTTP、FTPSMTP/POP
    • TCP/IP: データを転送。TCP/UDP・IP

h3. TCP

  • TCPの機能としては大きく分けて5つある
    • コネクション、セグメント化、確認応答、ウィンドウ制御、フロー制御

h4. コネクション
スリーウェイハンドシェイクにより、通信の準備を行う

h4. セグメント化
データを一定サイズに分割して送信する。これにより、信頼性の高いデータ通信を行う

h4. 確認応答
TCPヘッダのシーケンス番号と、確認応答番号を利用することにより、受信側が次にほしいセグメントを通知する。

h4. ウィンドウ制御
相手が受け取れるデータ量を教えてもらい、その分だけ一気に送ること

h4. フロー制御
スロースタートアルゴリズムと呼ばれる、通信速度の限界点を探りつつ転送する手法により、転送途中でデータが転送しきれなくなることを防ぐ

h3. UDP

TCPで行っていたような通信制御をUDPでは全く行わない。確実に送るよりも素早く送ることが必要な場面、例としてはIP電話や映像・動画配信などに使われる。

h2. ドメインネーム

  • ドメイン名とIPアドレスを対応させることを名前解決と呼ぶ
    • Hostsファイルと呼ばれるものを以前は利用していたが、ホスト数の増大によりトラフィックが増えてしまい、スケールしない問題があった
    • 現在では木構造を有する分散型データベースにより実現しており、根からすべてのホストを探すことができる。

h2. DNSの構造

  • ドメイン名とIPアドレスの対応データベースを持つサーバをネームサーバと呼ぶ。
    • ネームサーバは自分の直下の名前を管理し、管理する範囲をゾーンと呼ぶ。その範囲においてネームサーバがオーソリティを持っている。
    • ネームサーバはドメインの直下のホストとサブドメインの名前(ゾーン情報)をデータベースに登録する。この実態は、リソースレコードの集合体である。
    • 内部で名前解決を行いたい場合は、インターネットのドメイン名前空間に登録せず、内部で通用する名前とIPアドレスを組み合わせて使えばよい。

h3. リソースレコード
リソースレコードはゾーン情報として保有するデータの単位である。以下の情報を持っている。

  • 名前: そのリソースレコードの名前
  • タイプ: リソースレコードタイプ。以下に示す6個がある
  • クラス: 使用するプロトコルを示す。基本的にはIN。
  • TTL: リソースレコードを保持する期間。期間が過ぎるとそのリソースレコードは削除される。
  • RDATA: リソースレコードの値
  • RDLength: RDATAの長さで、単位はオクテット

h4. A
Address: ホストのアドレスを示す。名前とIPアドレスの対応を通知する。DNSラウンドロビンを行う場合は、同じ名前に対して複数のIPアドレスを設定したAレコードを用意する。

h4. CNAME
Canonical NAME: ホストの別名を示す。同じ危機に対して別の名前を付けたいときに用いる(WebサーバとFTPサーバなど)。他のレコードにCNAMEで指定した名前は入れてはいけない(単独で利用する)。

h4. MX
Mail eXchange: ドメインのメール交換ホスト(メールボックスのサーバへメールを送るためのサーバ)RDATAには優先度(16ビットの値で、値が低いほうが優先される)とメールサーバ名が入る。

h4. NS
Name Server: ドメインのネームサーバ。サブドメインがある場合、そのネームサーバをNSレコードで指定する。

h4. PTR
PoinTeR: 逆引き用ドメイン名で、IPアドレスからドメイン名を問い合わせるときに利用される。
192.168.0.1のドメイン名は1.0.168.192.in-addr.arpa.となる。(TLDがarpa、SLDがin-addr)
逆引き用のゾーン情報と、それを管理するネームサーバを用意することで、PTRレコードの問い合わせにより、逆引きの問い合わせを行うことができる。

h4. SOA
Start Of Authority: オーソリティの起点。ネームサーバを複数持ち、ゾーン情報をコピーするゾーン転送を制御するためのリソースレコードで、ゾーン転送のタイミングを決定するために使われる。RDATA内にある、ゾーン情報の新しさを示すSerialという値でゾーン情報の新しさを見る。Refreshの感覚でゾーン情報の確認を行い、ゾーン情報が新しければゾーン転送を行う。

ゾーン情報を更新した時には、Serialを必ず増加させないと、セカンダリサーバに更新内容がコピーされない。

h4. AAAA
IPv6 Address: IPv6用のホストのアドレス

h2. DNSの動作

  • アプリケーションの要求に合わせてネームサーバに問い合わせるソフトウェアをスタブリゾルバと言う
    • スタブリゾルバはFQDNで問い合わせを行う。FQDN以外の問い合わせが来た場合は、スタブリゾルバ側でドメインを追加してFQDNにする。追加するドメインのことをサーチパスと呼ぶ。サーチパスには、通常自分のいるドメインを追加する。
    • スタブリゾルバには複数のネープサーバを設定し、優先と代替のネームサーバに指定できる。
  • 問い合わせに対し完全な応答を返すネームサーバをフルサービスリゾルバという。問い合わせたドメイン名のIPアドレスないし対象ドメイン名なしの応答を返す。
    • フルサービスリゾルバは通常キャッシュを行う。
    • 配置によって2種類あり、スレーブサーバとフォワーダサーバがある。スレーブサーバはキャッシュを保持していればその結果を返し、なければフォワーダへ問い合わせを行う。
  • オーソリティを持つゾーン以外の問い合わせに対しては知らないと応答するサーバをコンテンツサーバという。
  • ドメイン空間の根に存在するサーバをルートサーバと呼び、世界に13台ある。
    • ネームサーバにはルートサーバのIPアドレスを設定しておく(ルートヒント)。ルートヒントを持たないネームサーバはドメイン名前空間の検索を行うことができない。
  • DNSの名前解決は問い合わせと応答によって行い、53番ポートを利用する。プロトコルは基本的にはUDPだが、データ量が多い場合(512バイトを超える場合)はTCPに切り替える。
    • 問い合わせには2種類ある。完全な応答を要求するスタブリゾルバが行う問い合わせ(再帰問い合わせ)と、フルサービスリゾルバがドメイン空間を検索するときの最適な応答を要求する問い合わせ(反復問い合わせ)がある。
    • DNSの問い合わせと応答のやりとりの内容はDNSヘッダ、質問セクション、回答セクションの3つから構成される。

h3. DNSメッセージ

h4. DNSヘッダ

  • DNSヘッダはID、フラグ、リソースレコードの数を所持する
    • フラグでは正引きか逆引きか、オーソリティを持ったサーバからの回答かなどの情報を保持する。

h4. 質問セクション

  • 質問セクションは可変長で、問い合わせするドメイン名、タイプ、クラスを所持する。タイプにはレコードタイプ(A、MX、AAAAなど)を指定する。

h4. 回答セクション

  • 回答セクションは回答、オーソリティ、追加の項目を所持する。
    • 回答は、質問したタイプに対する応答が入る。
    • オーソリティは、質問に大したドメイン名に対してオーソリティを持つサーバのレコードが入る。
    • 追加は、回答とオーソリティにAとCNAME以外のリソースレコードが入っている場合にAレコードが入る。

h3. ゾーン転送

  • IPアドレスの変更が起きるDHCPやインターネット接続サービスでは、ゾーン情報の動的な書き換えが必要である。DNS Dynamic updateは、IPアドレスの変更が行われると、自動でゾーン情報を書き換える。これを利用する場合は、ネームサーバとクライアント側が両方対応している必要がある。
  • DNS Notifyを利用すると、ゾーン情報をすぐにセカンダリサーバに更新させることが可能になる。差分ゾーン転送を行うことで、ゾーン情報の転送量を減らして負荷を軽減できる。
  • ゾーン転送が正しく行われないとセキュリティ上の問題が発生し、正しいドメイン名でも悪意を持った不正なサーバに接続してしまう可能性がある。TSIGを利用すると、ゾーン転送の情報が署名され、正しいゾーン転送が行われる。

h3. nslookup

  • DNS問い合わせツール。nslookup ドメイン名でスタブリゾルバの問い合わせを行うことができる。
  • サーチパスが設定されている場合は、問い合わせるドメインFQDNにしないと、自動でサーチパスをつけられてしまう。
  • setコマンドで設定を変更した問い合わせを行うことも可能になる。

h2. TELNET

  • 端末に対してネットワークでつないで仮想端末にできるのがリモートログインで、そのためのプロトコルTELNETと呼ぶ。
  • TELNETはポート23番を利用し、ヘッダ・暗号化などを行わない。NVT-ASCIIという文字コードで文字や記号を送る。
    • キーボードからの文字の入力以外のキー入力をNVT制御文字で送る。
  • また、制御文字の他に、制御コマンドを持つ。制御コマンドには、「制御」と「オプション」の2種類がある。
    • エスケープシーケンスのIACをつけてコードを送信することで制御コマンドとして認識される。
    • オプションコマンドはNVTでのやりとりの設定変更を行う。どのオプションが使えるかをNVT同士で交渉し、使えるオプションを決定する。この交渉ではWILL、DOをやりとりする。

h2. FTP

  • ファイルのやり取りをするプロトコルの一つ。ファイル転送のプロトコルは他にSMBやNFS等がある。FTPは20番・21番ポートを利用する。2つのポートを利用するのは、PIとDTP
    • PI: サーバとクライアントの間でコマンドのやりとりを行う。21番ポートを利用。
    • DTP: データをサーバとクライアントの間でやりとりする。20番ポートを利用。DTPではファイルを転送用のデータ形式に変換し、OSに依存しないファイル転送を実現する。
  • データコネクションは基本的にはサーバ側から確立され、ファイル単位でのコネクションの確立が行われる。データコネクションは1ファイルごとに確立・切断される。

h3. PI

  • PIのやりとりはNVT-ASCIIを使い、TELNETのラインモードでやりとりする。
    • USERとPASSでユーザ認証を行う。この送信時は平文で送られるので、盗まれないように注意が必要。
    • QUITコマンドで制御コネクションが切断され、データコネクションも切断される。
    • ABORコマンドでデータ転送のみ中止を行う。
    • PORTコマンドで自身のIPアドレスと待受ポート番号を通知し、データコネクションの確立を行う。
    • PASVコマンドは、クライアント側からデータコネクションの確立を行う際に利用する。ファイアウォールの都合でサーバ側から確立ができない場合に行う。
    • TYPEコマンドは、データコネクションで使用するデータタイプ(運ぶデータの形式)の指定を行う。データタイプにはASCIIとイメージの2種類がある。ASCIIは文字データを転送するときに使うタイプで、イメージタイプはデータのビット列をそのまま転送するタイプである。
    • LIST、NLISTコマンドでサーバのフォルダのファイル一覧を取得できる。
    • STORコマンドで、クライアントからサーバへファイルを送ることができる。(保管の意)
    • RETRコマンドで、サーバからクライアントへファイルを送ることができる。(取得の意)
    • ディレクトリ操作のコマンドには、MKD, RMD, CWD, CDUP, DELE, PWDなどがある。CDUPは上位のディレクトリへ移動できるコマンドだが、ログイン直後のホームディレクトリより上には移動できない。