geek.conf.2

あるエンジニアの備忘録

DHCPについて

こんにちわ、名古屋の人です。
今日はDHCPについて思い出したので書きます。

DHCPの仕組みを書きます。特にDHCPサーバとは異なるブロードキャストドメインに位置するDHCPクライアントにIPアドレスを配布する時についてです。これWDS構築時に学びました。恥ずかしながらこの仕組みを分かっていないために客先で赤っ恥かきました。故にここで備忘します。

それでは以下に流れを書きますね。

?DHCP DISCOVER
DHCPクライアントは初めIPアドレスが振られていません。なのでブロードキャストにDHCP DISCOVERパケットを送信します。ネットワーク全体にDHCPサーバを問い合わせるんですね。

?DHCP OFFER
DHCP DISCOVERを受け取ったDHCPサーバはユニキャストでDHCP OFFERパケットを送信してDHCPクライアントに、このIPアドレス情報を使いなさい、と返答します。

?DHCP REQUEST
DHCPクライアントは、DHCPサーバから提案されたIPアドレスを使用します、とブロードキャストにDHCP REQUESTパケットを送信します。
ここでなんでブロードキャストやねん?DHCPサーバだけに返せよって思うんだけど、DHCPサーバは1台とは限らないよね?配布するIPアドレス範囲を共有するDHCPサーバが冗長化のため複数台ある場合もあるっちゃぁある。
だから一応ネットワーク全体に提案受けたIPアドレス使います宣言をしているわけ。ここテスト出るからな!

?DHCP ACK
DHCPサーバはDHCPクライアントからの、そのIPアドレス使います宣言であるDHCP REQUESTパケットを受け取ったらそのIPアドレス情報を表すDHCP ACKパケットをユニキャストで送信します。

?Gratuitous ARP (通称GARP)
DHCP ACKパケットを受け取ったDHCPクライアントはDHCPサーバから受け取ったIPアドレスを使用する前にそのIPアドレスMACアドレスを問い合わせるためGratuitous ARP(グラトゥーアタス アープ)をブロードキャストに送信します。このグラトゥーアタス ARPとは自身のIPアドレスARPを意味しますが、ここではDHCPサーバから受け取ったIPアドレスが誰も使っていないことをネットワーク全体に確認するため送信しています。グラトゥーアタス ARPに返答がないことを確認している訳ですね。返答なければIPアドレスを設定します。
返答があったらDHCPクライアントはDHCP DECLINEパケットをDHCPサーバに送信して、お前提案のIPアドレス他のヤツが使用しとるやん、て言います。

このIPアドレス重複チェック用途のグラトゥーアタス ARPWindowsとかデスクトップOSであればIPアドレスが設定されたときに行っているみたいです。
他にも、ある機器が仮想IPアドレスと仮想MACアドレスを用いてアクティブ/スタンバイ運用を実現しているときにフェールオーバ時、当然機器が切り替わる訳ですが、通信経路上のルータやらネットワーク機器のARPテーブルを書き換えてやるために使用されたりもしておるよ。例はVRRPや仮想環境です。

さて、これが通常の流れなんだけどDHCPサーバとDHCPクライアントが異なるブロードキャストドメイン、例えば異なるVLANに属しているとある機能を利用しなければうまくDHCPが機能しません。

DHCPリレーエージェント
DHCP DISCOVERやDHCP REQUESTはブロードキャスト宛に送信されますけどVLANを切ってるってことはVLAN間にはルータに相当する機器があるはず。んで、このルータってルール的にブロードキャスト通信を破棄します。ブリッジ/スイッチはコリジョンドメイン、ルータはブロードキャストドメインを分割し、VLANは論理的にルータの役目を担いますよね。
そこでルータにDHCPリレーエージェント機能を設定します。これを設定するとDHCP DISCOVER/REQUESTを受け取るとDHCPサーバ宛にユニキャストしてくれます。故にDHCPリレーエージェントを設定する際はDHCPサーバの情報もルータに教えてやってください。

ところで、オレたちはDHCPクライアントとDHCPサーバを異なるVLANに位置させてーVLANごと異なるIPアドレス振ってー、とかいって勝手に設計するけどDHCPサーバはどうやってIPアドレスも振られていないDHCPクライアントが自分と異なるブロードキャストドメインにいることを知るのでしょう?それはDHCPクライアントが送信するDHCP DISCOVERパケットのgiaddrフィールドにDHCPリレーエージェント(ルータ)のIPアドレス、つまりDHCPクライアントのゲートウェイIPアドレス(GatewayIpAddress=giaddr)を設定してDHCPサーバに教えるんですね。giaddrが空ならDHCPサーバはDHCPクライアントが同じブロードキャストドメインにいると判断します。


この件は当時は全く知らなかったんだけどIPAネットワークスペシャリストとかの試験の勉強とかすると普通に出てきます。つまり、そのくらい当たり前の知識だし、こうゆうお仕事では、よくお目にかかる知識ということです。
IPAの午後試験によく出る問題は僕が仕事で経験してきたこととかなり合致していることが最近分かりました。
何が言いたいかって僕が経験した仕事はネットワーク/インフラエンジニアとして割と王道だったんだなと感じて少し嬉しい気持ちになりました。この仕事を自社内でしか交流がないのでいわゆる王道なのかニッチなのかって把握しずらかったんですよね。


んじゃこのへんで。