読者です 読者をやめる 読者になる 読者になる

KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

DNSとDHCPプロトコルについて学ぶ

ネットワーク特論1の第9回目の授業内容のまとめになります。

AIITのネットワーク特論1を受講しました - KATOエンジニヤリング開発日誌

TCP/IPモデルの役割と標準化を学ぶ - KATOエンジニヤリング開発日誌

レイヤ2のネットワーク機器と通信方式・データ配送方式 - KATOエンジニヤリング開発日誌

ネットワーク層の機器と技術について学ぶ - KATOエンジニヤリング開発日誌

ルーティングと経路制御表の集約計算について学ぶ - KATOエンジニヤリング開発日誌

LDAPとActive Directoryについて学ぶ - KATOエンジニヤリング開発日誌

IPv6とHTTPについて学ぶ - KATOエンジニヤリング開発日誌

第9回目の目標

  • ドメインとゾーン、DNSプロトコル、DHCPプロトコル、NTPプロトコルについて下記項目の説明ができるようになる
    • 定義
    • 使用ポート
    • 基本的な通信手順
    • 通信時の注意事項
  • ICMPの概要と機能、動きを知る

DNS(Domain Name System)

概要

ドメインとゾーン
  • ドメイン
    • 人やコンピュータが管理しやすいようにIPアドレスを変換した別名のうち、企業や組織を示すもの
      • ※ コンピュータの識別名はホスト名と呼ぶ
    • IPアドレス -> 例:203.183.224.5
    • ホスト名・ドメイン名 -> 例:server.eigyo.xxxsha.co.jp
      • server -> ホスト名
      • eigyo -> サブドメイン名
      • xxxsha.co.jp -> ドメイン
    • ドメインのレベル
      • xxxsha -> サードレベルドメイン(組織名など)
      • .co -> セカンドレベルドメイン(属性など)
      • .jp -> トップレベルドメイン(国名など)
    • TLD(Top Level Domain)の種類
      • gTLD(generic TLD)
        • カントリーコードを含まないTLD -> 例:.com .net .org .biz など22種類
      • ccTLD(Country Code TLD)
        • ISOで定められたTLD -> 例:.jp .uk .fr など252種類(2010年時点)
      • その他、sTLD(スポンサー付きTLD)、iTLD(国際)などがある
  • FQDN(Fully Qualified Domain Name)
    • ホスト名とドメイン名を省略せずに表記したもの
  • ゾーン
    • ドメインの連結部分集合
    • 管理単位で分類され、必ずしもドメインとは一致しない
    • 上位ゾーンから下位ゾーンへ管理権限を委譲
  • ネームサーバ
    • 各ゾーン内のデータを管理するサーバ
    • 1台のサーバで複数のゾーンを管理する場合もある
    • 通常、各ゾーンに複数台のネームサーバをたてる
  • ルートネームサーバ
    • ルートの部分に設置されているサーバ
    • 全世界に13台だけ設置されている

f:id:masayuki_kato:20170514164133p:plain

DNSの概要

DNSとはホスト名をIPアドレスに、IPアドレスをホスト名に対応付ける仕組み(名前解決)であり、ホスト名の一意性を保証する分散協調型データシステムである。

インターネット利用時の名前解決の方法としては下記3つの方法が挙げられる。

  • 1個のファイルに記述する(hosts)
  • ブロードキャストする
  • DNSを使う

このうち1個のファイルに記述する方法は1970年代に使用されていた方法で、各インターネット利用者はSRIという団体が管理するhostsファイルを利用して名前解決を行っていた。

この当時はホストは数百台程度だったため、この方法でも問題無かったが、その後ホストの数が急増し、hostsファイルの更新・転送が頻繁に発生する事態になり、集中管理に限界が見えてきた。

1983年に南カリフォルニア大学のPaul Mockapetrisによってホスト名を階層的に分散管理するDNSが考案された。

DNSの重要な特徴として、下記2点が挙げられる。

  • IPアドレスとホスト名の対応付けをする
  • ホスト名の一意性を保証する

DNSでは「リゾルバ」というクライアントライブラリを利用して、ホスト名に対応付けられているIPアドレスをネームサーバに問い合わせている。

主な機能

  • DNSで管理されるもの
    • IPアドレスとドメイン名の対応
    • ドメイン名とDNSの対応
    • ホスト名の別名(エイリアス)
    • メール用ドメインの管理
    • DNSの更新タイミングの管理
  • 2種類のDNSサーバ
    • プライマリサーバ
      • オリジナルのドメイン情報を提供
    • セカンダリサーバ - プライマリから定期的にコピーを受信
    • 負荷の軽減と信頼性の確保
    • その他、検索、キャッシュ専用のキャッシュサーバがある
  • DNSの構成要素
    • ゾーン情報
      • DNSサーバが持っているドメイン名とIPアドレスが対応付けられたデータベース
    • リゾルバ
      • 身近なネームサーバに名前解決を依頼するプログラム
      • 通常はOSに付属するライブラリの機能として提供
    • DNSキャッシュ
      • アドレス情報転送時、一時的にローカルメモリへ保存する
      • 応答時間の短縮とDNSメッセージによるトラフィックを削減することができる
    • その他の用語
      • 正引き:ホスト名からIPアドレスを得ること
      • 逆引き:IPアドレスからホスト名を得ること

プロトコル

DNSは基本的にはポート番号53/UDPを使用するが、メッセージサイズが512byte以上、及びゾーン転送にはTCPを使用する。

これはIPのパケットが分割されないことが保証されているサイズが512byteであるためであり、UDPは分割したパケットの順序を保証しないことからTCPが利用される場合もあるということである。

リゾルバがネームサーバに問い合わせを送ると、DNSサーバーから応答が返ってくる。

DNSプロトコルは負荷分散と機能分散のため、下記2種類の問い合わせ方法を組み合わせて利用している。

  • 再帰的問い合わせ(フォワーダ)
    • 主にPC等のリゾルバが出す問い合わせで、最終的な答えを要求する
    • この要求を受けたサーバは自分で答えを返信しなくてはならない
  • 反復的問い合わせ
    • 主にローカルDNSサーバ間で使われる問い合わせ
    • 答えを知らなかった場合は別のDNSサーバを紹介する
    • ローカルサーバは紹介されたサーバに反復的問い合わせを送る

f:id:masayuki_kato:20170514173746p:plain

実装技術

  • DNSサーバ
    • BIND
      • UNIX系OSで最も使われているDNS実装
      • ルートサーバとしての運用実績がある
      • DNSプロトコルのリファレンス実装という位置付けで開発されており、標準化されたDNSの機能の多くを備えている
      • DNSサーバ、リゾルバライブラリ、各種ツールの集合体
    • Microsofg DNS など
  • DNSの管理
    • 下記理由によりインターネットにおける管理は難しい
      • 常時安定稼働が必須
      • 負荷が高い
    • ISP(Internet Service Provider)のDNSを利用することも多い

主な設定項目

DNSで利用される主な設定ファイル
ファイル内容 説明
ブートファイル namedが起動するときに参照
ルートドメインサーバ情報ファイル ルートネームサーバの名前とIPアドレスを記述
正引きゾーンファイル サーバ内のゾーン設定ファイル
逆引きゾーンファイル IPアドレスからホスト名の参照設定ファイル
正引きループバックファイル localhostのゾーン設定ファイル
逆引きループバックファイル localhostの逆引き設定ファイル
リゾルバファイル DNSを利用するクライアント側に設定する
named.conf ファイルの設定
  • 新しいゾーンを追加する
  • 正引きファイル名と逆引きファイル名を指定する
  • その他、フォワーダ(再帰的問い合わせ)の設定など
zone "aiit.ac.jp"
        IN { type
        master; file
        "aiit.zone";
}
zone "0.168.192.in-addr-arpa" IN {
        type master;
        file "aiit.zonerev";
};
ゾーンファイルの作成
  • localhost.zoneをひな形として、正引きファイルを作成
  • 正引きファイルを利用して逆引きファイルを作成

f:id:masayuki_kato:20170514191826p:plain

主なDNSレコード
  • SOAレコード

    • シリアル番号
      • ゾーン転送時に情報が更新されているかを判断
    • 更新間隔
      • ゾーン情報のゾーン転送間隔時間
    • 転送再試行時間
      • ゾーン転送に失敗した場合の再試行までの時間
    • レコード有効時間
      • ゾーン情報を最新と確認できないときの有効時間
    • キャッシュ有効時間
      • ゾーン情報をキャッシュする場合の有効時間
  • 主なDNSレコード

    • A: ホスト名(IPv4アドレス)
    • AAAA: ホスト名(IPv6アドレス)
    • NS: ネームサーバ
    • MX: メールサーバ
    • CNAME: ホスト名に別の名前を割り当てる
    • PTR: IPアドレス -> ホスト名

その他

Dynamic DNS(動的更新)
  • 当初はデータの更新頻度は低く、静的に管理することを想定していた
  • DHCPやIPv6の自動アドレス設定と同期をとりたい
  • 動的更新の実現(動的更新用のゾーンは分けて運用)
    • UPDATE命令を追加し、リソースレコードを外部から変更可能にした
    • IPアドレスや鍵によって更新を制限する
      • 共有秘密鍵による署名を行う
    • 該当するゾーンのSOAリソースレコードを求め、プライマリサーバのアドレスを求める
      • サーバにUPDATEパケットを送る
ゾーン転送機能
  • 1つのゾーンに対して複数のDNSサーバを用意する
  • お互いの持つ情報を「ゾーン転送」という機能で複製
    • 常にセカンダリサーバから開始される
    • ゾーン更新間隔が経過 / マスターサーバからのゾーン変更通知 / セカンダリサーバでサービス起動 / 手動での転送要求
  • 差分ゾーン転送
    • プライマリサーバは更新履歴を保存しておく
    • セカンダリサーバはシリアル番号をプライマリサーバに通知し、最新版との差分のみを転送してもらう
DNSのセキュリティ
  • TSIG(Transaction Signature)
    • サーバ - リゾルバ間、サーバ - サーバ間の通信を認証
    • 共通秘密鍵でDNSメッセージ全体に署名
    • BIND9ではハッシュ関数HMAC-MD5が利用されている
  • DNSSEC
    • DNSのデータベース全体の正当性を保証
    • 検索時のなりすまし、キャッシュ汚染からの防御
    • 公開鍵方式による署名、鍵はゾーンごとに管理
    • 上位ゾーンの署名により検証
    • 最終的にはルートゾーンによる署名に帰着する

DHCP(Dynamic Host Configuration Protocol)

概要

DHCPとは、クライアントが起動したときにDHCPサーバにIPアドレスを要求することでIPアドレスを自動的に割り当てるアプリケーションプロトコルのこと。

IPアドレスの有効活用と設定の自動化を目的とした仕組みである。

主な機能

  • サーバ側では、予め自動割当を行うIPアドレスの範囲を決めて用意しておく。
  • ゲートウェイやドメイン名、サブネットマスク、その他の情報をクライアントに通知する
  • 割り当てたIPアドレスの期限を延長する

プロトコル

f:id:masayuki_kato:20170514195358p:plain

メッセージタイプ
メッセージ名 意味
1 DHCP DISCOVER クライアントがサーバを発見
2 DHCP OFFER サーバからクライアントへの設定値候補通知
3 DHCP REQUEST クライアントが決定したサーバへの取得依頼
4 DHCP ACK サーバからクライアントへの取得正常終了
5 DHCP DECLINE クライアントからサーバへの拒否
6 DHCP NAK サーバからクライアントへの取得拒否
7 DHCP RELEASE クライアントからサーバへのリリース要求
8 DHCP INFORM アドレスは取得せずオプション取得のみ行う
9 DHCP FORCERENEW サーバからクライアントへの再構成要求

実装技術

  • ISC(Internet Systems Consortium)DHCP
    • 多くのOSで動作し、多くのOSでパッケージが用意されている
    • 現在の主流であり、開発・リリースが続いている
  • その他の実装
    • Solaris DHCP
    • WIDE DHCP
      • WIDEプロジェクトが開発
    • CMU DHCP
      • カーネギーメロン大学が開発
    • Windows Serverに標準装備されたもの
    • ルータ内実装
      • ブロードバンドルータなど

その他

DHCPリレー・エージェント
  • 通信時にブロードキャストを使用するためルータ越えができないため、他のサブネットにあるDHCPサーバからアドレスを取得する。
DDNS(Dynamic Domain Name System)
  • 動的に割り当てられるIPアドレスとホスト名の対応を、動的に登録・管理する仕組み
  • DHCPとDNSの連携によって実現される
  • 組織内LAN、個人向け常時接続(自宅サーバ)等で利用
DHCPv6
  • IPv6でDNSやNTPなどの情報を自動取得するために利用

NTP

概要

  • NTPとは
    • インターネットで広く使われているクロック同期用プロトコル
    • ネットワーク経由で時刻情報を同期させる
    • 外部の信頼されたリソースと時刻を同期させる
    • 使用ポートは123/UDP

サービス、ファイルシステム、ログなどは時刻情報を元に動作するため、ネットワークを介してコンピュータを接続する場合、非常に重要になってくる。

主な機能

  • NTPサーバの階層化
    • 階層的に構築された時刻サーバによりネットワークを使って、多数のマシンに効率よく、正確な時刻情報を提供する
    • 最上位に非常に正確な時刻情報源を複数用意する
    • 同じ階層同士でも相互に時刻情報をやり取りする
    • インターネットを経由した場合でも数ミリ秒以下の誤差で同期する
  • 時刻同期
    1. ネットワークの伝送遅延を測定して補正する
    2. 時刻情報を平均してゆらぎを取り除く
    3. 時間をかけてゆっくり合わせる
    4. ぴったり合うよう調整し続ける
  • Windowsの場合の時刻同期
    • 初期設定では、時刻合わせは1週間に1回行う
    • 1秒より大きいズレは一気に修正する
    • Active Directory 環境では、ドメインコントローラがNTPサーバの役割を果たす

プロトコル

クライアントは自分の送信時間を含めた要求メッセージを送る。

サーバは応答メッセージを返す際に「クライアントから送信された要求開始時間」「受信時間」「応答時間」を含めた応答メッセージを返す。

応答メッセージを受け取ったクライアントはサーバから返された3種類の時間で、サーバ時間とのズレを計算することができる。

f:id:masayuki_kato:20170514211333p:plain

実装技術

  • UNIX系
    • サーバ:ntpd
    • クライアント:ntpdate
    • 多くのOSで標準的に組み込まれている
  • Windowsタイム・サービス
    • NTPサーバ、NTPクライアント
  • ルータやスイッチングハブなどのネットワーク機器にも搭載されている

その他

  • NTPサーバの選択
    • Windowsデフォルト「time.windows.com」を使う
      • 利用者が多いのでbusyが多い
    • 利用しているプロバイダのNTPサーバを使う
      • 遅延が小さい
    • 公開NTPサーバを利用する
      • ntp.nict.jp:NICTが一般公開している世界最高性能のNTPサーバ
      • ntp.jst.mfeed.ad.jp:NICTとの間に専用線を敷設し情報を取得
      • 利用者が多くても精度が良い
    • 内部にNTPサーバを立ててもらう

ICMP(Internet Control Message Protocol)

IPプロトコルには送受信が上手くいったかどうかを確認する仕組みがない。

ICMPはインターネット層で、信頼性に関する情報を収集し、IPプロトコルの補完を行うプロトコルである。

メッセージタイプ メッセージ
0 エコー応答
3 宛先到達不能
11 時間経過
12 パラメータ異常

f:id:masayuki_kato:20170514212427p:plain