目次
DHCP
今更ながらにDHCPについて。
管理対象のネットワーク(スコープ)内のネットワーク機器に対して、IPアドレスやその他ネットワーク接続用の情報を提供するサービス。
DHCPクライアント側はケーブルなり無線LANなり、接続すると自動でIPアドレス等を受け取り、ネットワークを利用できるようになる。
主な機能
- 対象ネットワーク(スコープ)内にIPアドレス、サブネットマスク、デフォルトゲートウェイ等を提供する
- 対象ネットワークに対して、どこからどこまでのIPアドレスを提供するかの範囲を設定できる=レンジ
- IPアドレスの提供範囲に対して、提供を行わない範囲を設定出来る=除外範囲設定
- ネットワーク機器のMACアドレスを使って、提供するIPアドレスを固定することが出来る=予約設定
- IPアドレス、サブネットマスク、デフォルトゲートウェイ、DNS等のネットワーク接続に必要な情報の他にも、様々なオプション設定を提供出来る。
- 提供できるオプション設定は、標準で決められている物以外に、独自に設定することも出来る。
- オプション設定は、予約設定、スコープ設定、サーバ設定の3つに対して指定できる。
- 同じオプション設定が設定されている場合は、予約>スコープ>サーバの順に優先される。
- 設定・配信したオプション情報は、必ずしもクライアントに適用されるとは限らない。
(オプション012のホスト名にホスト名を設定しても、通常クライアントは自身に予め設定してあったホスト名を利用する)
クライアントとサーバのやりとり
DHCPクライアントとサーバは、4つのプロセスを経て機器のIPアドレスを決定・提供する。
- DHCP DISCOVER
- クライアントからの要求
- 「誰か!俺にネットワーク情報くれ!」的な何か。
- DHCP OFFER
- サーバ側からの応答
- 「じゃあさ、このアドレスとかどうよ?」的な何か。
- DHCP REQUEST
- クライアント側からの要求
- 「OK!OK!それでお願いね!」的な何か。
- DHCP ACK
- サーバ側からの応答
- 「じゃ、これで決定ってことで!」的な何か。
- 提供できない場合はここでDHCP NACK応答が返される。
- 「あー、やっぱ無理だわー、つれーわー」的な感じ。
リースの更新
DHCPにはリース期間というIPの提供期間の設定がある。
Windows Serverだとデフォルトで8日。
DHCPクライアントは、自身がリースされているIPの期限までの50%の時間が経過すると、DHCPサーバに対してリースの更新要求を行う。
この際、DHCPサーバからの応答が得られなかった場合は、さらに87.5%の期間経過時点で再度更新要求を行う。
更新許可が得られなかった場合、リース期限を迎えた時点で再度DHCP DISCOVERからIPアドレスの取得処理を行い、IPアドレスの提供を受ける事になる。
設定
普通のスコープ作成や、予約設定、オプション等は別のサイトでも説明されているので、割愛。
オリジナルのオプション追加方法を書いとく。
Windows Server
- DHCPのスナップインを起動
- 左ペインのツリーのサーバー名の直下にあるIPv4(またはIPv6)を右クリック
- 「既定のオプションの設定」をクリック
- 「既定のオプションと値」ウィンドウが表示されるので、「追加」ボタンをクリック
- 「オプションの種類」ウィンドウが表示されるので、「名前」、「データ型」、「コード」、「説明」を入力し、OKをクリック
- 名前:表示名
- データ型:バイト、ワード、Long 型、Long 型整数、IP アドレス、文字列、バイナリ、カプセル化、から選ぶ。
- コード:オプション指定する際の番号。
- 説明:説明文
- 「既定のオプションと値」ウィンドウに戻る。追加した設定が表示されているので、OKボタンをクリック
- 後はサーバオプションなり、スコープオプションなり、予約オプションで、コード欄に指定した番号の部分を確認すると、追加したオリジナルオプションが利用可能になっている。
Linux
コマンドライン環境で作業しよう。うん。
- suコマンドでrootユーザーに昇格する
- DHCPの設定ファイルである、dhcpd.confのあるディレクトリまで移動する。
- viなどでdhcpd.confを開く
- dhcpd.confの上の方(スコープとか予約とかのセクションに囲まれていない、グローバルセクション)に、定義したい内容を記述する
option hogehoge code 160 = text; ↑名称「hogehoge」をコード160で作成。データ型は文字列。
- データ型
- ブール型:
option name code code = boolean;
- 整数:
option name code code = sign inetger width;
signは空白、unsigned、signedのいずれか。widthは8、16、32のいずれかを指定 - IPアドレス:
option name code code = ip-address;
- テキスト:
option name code code = text;
- データ文字列:
option name code code = string;
- カプセル化:
option name code code = encapsulate identifier;
identifierで指定されたオプション空間の中身をカプセル化する。
オプション例はvendor-encapsulated-options、netware-suboptions、relay-agent-informationなど。。。らしい。 - 配列:
テキスト型とデータ文字列型以外のデータ型は配列に含められる。
option name code code = array of ip-address;
- レコード:
複数のデータ型を含むデータ構成。
option name code code = { type1, type2, type3 };
例(定義時):
option hogehoge code 150 = { boolean, integer 16, text };
例(設定時):
option hogehoge on 200 "fugafuga";
- 設定したい場所(スコープ、予約等のセクション内)で、設定を記述する
option hogehoge "Value"; ↑名称「hogehoge」の値を「Value」にする。
Windows ServerのDHCPの注意点
アクティブ化
DHCPサーバ機能のインストール後、サービスを起動してもIPが払い出されない。。。と思ったらアクティブ化されているか確認を。
設定したスコープ毎にアクティブ化しないと、サービスを起動していてもIPアドレスは払いだされない。
DHCPのスナップインを起動して、スコープを右クリック、「アクティブ化」をクリックだ!
サービスを起動してもIPアドレスが払い出されない。。。
Active Directoryのドメイン配下にいる場合、ドメインコントローラからDHCPサーバが承認される必要がある。
DHCPのスナップインを起動して、DHCPサーバを右クリック、「承認」をクリックだ!
サービスが止まる
Active Diretoryがいるネットワーク内にDHCPを立てる場合、サービスが停止してしまうことがある。
それってメンバサーバじゃなく、ワークグループのサーバだったりしない?でもってActive Directoryドメイン内にすでに承認されたDHCPサーバがいたりしない?
そういう時は、承認されていないサーバは実行が許可されません。自分で止まります。
メンバサーバになりましょう。承認してもらいましょう。
もちろん、IPの配布範囲とかが重複しないようにとか、重複しても大丈夫なようにとか、設定すること。
予約が消える…!?
もしかして、Windows Server 2008 R2の初期状態に近い時点でのDHCPを使ってませんか?
でもってDHCPサーバが2台以上、同じネットワーク内にいたりしませんか?
一時期、同じ予約情報を持ったDHCPサーバが2台以上同一ネットワーク内に存在している場合、予約情報が消えていくバグがありました。
「予約は削除されません正しく Windows Server 2008 R2 を実行している DHCP サーバーから」
↑機械翻訳なので、変な日本語です。はい。
LinuxのDHCPの注意点
設定ファイル
LinuxのDHCPサーバの設定ファイルは基本的に/etc/dhcpd.confかと思うが、ディストリビューションによって異なる。
CentOS5.x系では上記の通りだったが、CentOS6.x系では/etc/dhcp/dhcpd.confに変わっていたので注意。
eth0以外でDHCPサービスを提供する場合
この場合は、上記の設定ファイルではなく、/etc/sysconfig/dhcpdファイルを編集する。
DHCPDARGs=eth1
こんな具合で。