住所を配る全員あてが、偽のサーバにも答える隙を与える
図 5 が「PC は自分の IP アドレスを知っている」ところから始めた、その手前を埋める。DHCP の 4 つのメッセージ、ルータを越えさせるリレー、配り口を守るスヌーピングと DAI を 1 枚で追う
目次
図 2 の PC-A も図 5 の PC-A も、自分の IP アドレスをすでに持っているところから始まっていました。その値がどこから来たのかは、まだ埋めていません。
図 17 でそこを埋めます。同時に、住所を配るために使う全員あてが、偽のサーバにも答える隙を与えることを見ます。
この連載は、ネットワークの言葉をもの(物理と論理)、結びつき(手動、自動、固定)、通信フロー(1 本の通信がこれらを順に通る流れ)の 3 層に置いています。ここで増えるのは、もの 2 つと、人が決める結びつき 2 つです。
登場するもの
貸出の台帳
DHCP サーバが持つ論理のものです。どの範囲(プール)から配るか、どの MAC アドレスにどの IP アドレスを貸したか、残り時間を持ちます。
DHCP スヌーピングの表
スイッチが持つ論理のものです。MAC アドレス、IP アドレス、物理ポート、VLAN 番号、貸出の残り時間が載ります。通信を見て自動で育ちます。
信頼する物理ポートの印
スイッチの物理ポートに人が付ける論理の印です。スヌーピングそのものが既定で無効で、有効にしたあとも物理ポートは既定で非信頼です。
ip helper-address
ルータのインターフェースに人が書く設定です。DHCP サーバの IP アドレスを 1 つ書きます。
結びつき
MAC アドレスと IP アドレスの対応は自動です。貸出で決まり、期限が切れると消えます。図 1〜5 では PC-A に手で 192.168.10.10 を入れていましたが、ここでは貸し出された 192.168.10.100 になります。
人が決めるのは、信頼する物理ポートと ip helper-address の 2 つだけです。表そのものは人が書きません。
偽の DHCP サーバは、この MAC アドレスと IP アドレスとデフォルトゲートウェイの結びつきを乗っ取ります。DAI(動的 ARP 検査)は、スヌーピングの表を照合先にして ARP を検査します。
通信フロー
① 住所の無い PC-A が、宛先 255.255.255.255、送信元 0.0.0.0 で Discover を出します。宛先ポート番号は 67(UDP)です。
② スイッチ 1 は全員あてなので VLAN 10 の全ポートへ流します。図 2 と同じ動きで、ルータ 1 のインターフェースにも届きます。
③ 全員あてはルータを越えません。ip helper-address を書いたインターフェースでは、ルータが外側の IP と UDP を作り直し、サーバあての 1 対 1 のパケットにして送ります。
④ ルータ 1 は DHCP のメッセージの中の giaddr に、受けたインターフェースの IP アドレスを書きます。サーバはそれを見てどのプールから配るかを決め、giaddr あてに Offer を返します。
⑤ PC-A は Request を全員あてで出します。選ばなかったサーバにも「使わない」が伝わるからです。サーバの Ack で住所が決まります。ここまでで 4 つのメッセージ、2 往復です。端末は自分側のポート番号 68 を使い、サーバとリレーはポート番号 67 を使います。
⑥ スイッチ 1 は通り道でこれを見ています。信頼する物理ポートから来た Offer と Ack だけを通し、決まった対応を表に書きます。その表と照らして合わない ARP を捨てるのが DAI です。
リレーがやっているのは、包み直しではありません。DHCP のメッセージはそのままに、外側の IP と UDP を作り直して giaddr を足し、hops を 1 増やして 1 対 1 で送るだけです。別のパケットの中に入れる話は図 10 で出てきます。
偽の DHCP サーバが非信頼の物理ポートから Offer を返しても、スヌーピングが有効ならそこで捨てられ、どの表にも載りません。
図 17
上が構成図、その下が 4 つのメッセージの並び、さらに下に守りの 2 つが並びます。いちばん下は各表の推移と、通信の中身の推移です。
図 2 の ARP 要求と同じ全員あてを、ここでは住所そのものを聞くために使います。ARP は IP アドレスを知っていて MAC アドレスを知らない状態、DHCP は IP アドレスすら持っていない状態から始まります。
図 3 で見たとおり、全員あてが届く範囲は VLAN の中だけです。その制約のままなら DHCP サーバは VLAN ごとに要ることになりますが、リレーがルータの区間を肩代わりして制約を外します。図 5 の PC-A が持っていた IP アドレスとデフォルトゲートウェイは、この ⑤ で決まった値です。
配り口を人が決め打ちで守る方法が、勉強会で実機に入れたポートセキュリティです。物理ポートに MAC アドレスを覚えさせて 1 台だけを許します。許す相手をサーバ 1 か所に集める方法が次の図 18 になります。
未検証・注意
- リレーが送信元 IP アドレスにどちらのインターフェースの IP アドレスを使うかは機器と設定によるため、「ルータ 1 の IP アドレス」とだけ書いています。giaddr が受けたインターフェースの IP アドレスであることは Cisco の公式ドキュメントで確認しました。
- スヌーピングと DAI の動きは実機で見ていません。勉強会で実機に入れたのはポートセキュリティと認証までで、図の表の中身は公式ドキュメントの記述に合わせています。
- ip helper-address が既定で中継する UDP のポート番号の一覧(67 と 68 以外)は確認していないため、書いていません。
- 貸出時間の更新(残り時間が半分になったところで延長を頼む動き)は、1 枚に入れると焦点がぼけるため省いています。
- Offer と Ack が全員あてで返るか 1 対 1 で返るかは、端末が立てる BROADCAST フラグで決まります(RFC 2131 §4.1)。図の帯の ④ と ⑥ は全員あてで返す場合で、1 対 1 なら宛先 MAC アドレスが端末のもの、宛先 IP アドレスが配る住所になります。
- リレーの細かい動き(hops の上限や、返ってきたメッセージを端末へ渡すときの宛先の決め方)は RFC 1542 が正本ですが、本文を読んでいません。RFC 2131 §4.1 で確認できた範囲だけを書いています。
- 図に出した 192.168.10.100 と 192.168.3.200 は説明用の値で、勉強会の資料の値とは関係ありません。
出典
- 勉強会での本人の観察。2026-09-13 の実機ハンズオン(資料は非公開)。本記事で観察が支えるのは、配り口を守る設定としてポートセキュリティを実機に入れたことだけで、DHCP の動きとスヌーピングと DAI は以下の文書による
- RFC 2131 Dynamic Host Configuration Protocol — 4 つのメッセージ、ポート番号 67 と 68 の使い分け(§4.1)、Request を全員あてで出す理由(§3.1)、giaddr が 0 でなければリレーのポート番号 67 あてに返すこと、BROADCAST フラグ(§4.1)
- Cisco IOS DHCP Relay Agent — ip helper-address を書いたインターフェースの IP アドレスを giaddr に入れること、全員あてを 1 対 1 でサーバへ送ること
- Cisco Operate and Troubleshoot DHCP Snooping — 非信頼のインターフェースでサーバ側のメッセージを止めること、表に載る項目、上流を信頼にして利用者側を非信頼にすること
- Cisco Catalyst 2960 Configuring DHCP Features — 既定値の表。スヌーピングは無効、インターフェースの信頼は非信頼
- Cisco Catalyst 2960 Configuring Dynamic ARP Inspection — DHCP スヌーピングの表を照合先にして ARP を検査すること、信頼と非信頼で扱いが変わること
関連
-
ネットワーク_INDEX — 連載の目次
-
連載の入口: ネットワーク_00_3層で言葉を置く(
/notes/nw-basics-00-three-layers) -
前の記事(図 16): ネットワーク_16_VRRP(
/notes/nw-basics-16-vrrp) -
次の記事(図 18): ネットワーク_18_MABとRADIUS(
/notes/nw-basics-18-mab-radius) -
ここで使う全員あてと ARP の元: ネットワーク_02_同じネットワークの中(
/notes/nw-basics-02-same-network) -
全員あてが届く範囲: ネットワーク_03_VLAN(
/notes/nw-basics-03-vlan) -
PC が持っている IP アドレスとデフォルトゲートウェイの使われ方: ネットワーク_05_行きと帰り(
/notes/nw-basics-05-static-route)
この記事の校閲記録
誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。
段落 37 のうち出典つき 13・出典なし 24
v1 2 件
AIAI (claude-fable-5) が AI 確認未解決
出典 5 件を WebFetch で取得して確認した。ポート番号 67 と 68 の使い分け、Request を全員あてで出す理由、返事が全員あてか 1 対 1 かが BROADCAST フラグで決まることは RFC 2131 §3.1・§4.1 で確認した。リレーが giaddr に受けたインターフェースの IP アドレスを書くことと 1 対 1 で送ることは Cisco の DHCP リレーエージェントの記述で確認した。非信頼のインターフェースでサーバ側のメッセージを止めること、表に載る項目、上流を信頼にすることは Cisco のスヌーピングの文書で確認した。スヌーピングが既定で無効・インターフェースが既定で非信頼であることは Catalyst 2960 構成ガイドの既定値の表で確認した。DAI がスヌーピングの表を照合先にすることは同ガイドの DAI の章で確認した。リレーの送信元 IP アドレス、helper-address が中継する UDP のポート番号の一覧、貸出時間の更新、RFC 1542 の本文は確認しておらず未検証として本文に明記した。スヌーピングと DAI は実機で見ていないことも明記した。校正チェックリストを全項目回し、図の『口』を本文では物理ポートとインターフェースに書き分け、ポート番号は UDP の番号にだけ使った。守秘検査(人名、社名、会場名、地名、連絡先の機械検査)で該当なし
AIAI (claude-fable-5) が 編集未解決
公開前の校閲。「この 17 本目」は連載の通し数(この記事は 21 本目)とずれる自己参照なので「図 17」に直した。関連を、図 8〜16 と同じ形(連載の入口・前の記事・次の記事・関連記事に /notes/ のパスを添える)に揃えた。全員あての Offer と Ack を MAC アドレスまで全員あてで描く点と BROADCAST フラグの断りは RFC 2131 §4.1 の記述と一致しているので、そのままにした。
参考文献
- 二次RFC 2131 Dynamic Host Configuration Protocol参照 2026-09-14
- 二次Cisco IOS DHCP Relay Agent参照 2026-09-14
- 二次Cisco Operate and Troubleshoot DHCP Snooping参照 2026-09-14
- 二次Cisco Catalyst 2960 Configuring DHCP Features参照 2026-09-14
- 二次Cisco Catalyst 2960 Configuring Dynamic ARP Inspection参照 2026-09-14
更新履歴
- 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
- 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新
機械可読の記録
- article.json(記事の正本)
- reviews.json(校閲記録)
- blocks.json(ブロック一覧)