Cisco IOS DHCPリレー ip helper-address L3スイッチ VLAN

複数のVLANが存在する環境では、DHCPサーバを1台に集約してVLANをまたいでIPアドレスを配布したい場面があります。しかし、ルータやL3スイッチはブロードキャストを別ネットワークに転送しないため、そのままではDHCPが機能しません。このとき必要になるのがDHCPリレー機能です。

Cisco機器ではip helper-addressコマンドで実装できます。本記事では、DHCPリレーが必要な理由・仕組み・設定例・複数サーバ時の挙動・トラブルシューティングまで体系的に解説します。

👷 現場での体験談

新規フロアにVLAN 20を追加した際、そのフロアのPCがIPアドレスを取得できないという問い合わせがありました。DHCPサーバは別のVLAN(VLAN 10)に存在しており、L3スイッチのVLAN 20 SVIにip helper-addressの設定が漏れていたことが原因でした。

ip helper-addressを設定した瞬間に、PCが次々とIPアドレスを取得し始めました。新しいVLANを追加するたびにこの設定が必要なことを忘れがちなので、VLANを追加する際のチェックリストに「SVIにip helper-address設定」を必ず入れるようにしました。

DHCPリレー構成図
DHCPリレー構成図:ip helper-addressでブロードキャストをユニキャストに変換しDHCPサーバーへ中継

なぜDHCPリレーが必要なのか

DHCPクライアントはIPアドレスを取得するためにDHCP Discoverをブロードキャスト(255.255.255.255)で送信します。しかし、ルータやL3スイッチはブロードキャストを別ネットワークに転送しません。

そのため、DHCPサーバが別のVLANに存在する場合、クライアントのDHCP DiscoverはL3デバイスで止まってしまい、DHCPサーバに届きません。これを解決するのがDHCPリレーです。

図1:DHCPリレーなし(NG)とあり(OK)の比較
❌ DHCPリレーなしの場合
PC(VLAN10)
DHCP Discover
L3スイッチ
ブロードキャスト
ここで止まる
DHCPサーバ(VLAN100)
届かない
✅ DHCPリレーあり(ip helper-address設定済み)
PC(VLAN10)
DHCP Discover
(ブロードキャスト)
L3スイッチ
ユニキャストに変換
(ip helper-address)
DHCPサーバ(VLAN100)
192.168.100.10
✅ 受信成功

ip helper-addressの仕組み

ip helper-addressはCiscoのL3デバイスが受信したDHCPブロードキャストを、指定したDHCPサーバ宛のユニキャストに変換して転送する機能です。

DHCPリレーの通信フロー(4ステップ)

1
DHCP Discover(ブロードキャスト):クライアントがブロードキャストでDHCPサーバを探す
2
L3スイッチがユニキャストに変換して転送:ip helper-addressで指定したDHCPサーバのIPへユニキャスト送信。送信元IPはSVI(インターフェース)のIPアドレスになる
3
DHCPサーバがOFFERを返送:クライアントのセグメント(GiAdddr情報)を確認してIPアドレスをL3スイッチに返す
4
L3スイッチがクライアントに転送:DHCPサーバからの応答をクライアントに届ける。クライアントがIPアドレスを取得

DHCP以外にも転送される8つのUDPポート

ip helper-addressはDHCPだけでなく、デフォルトで以下の8種類のUDPポートのブロードキャストを中継します。

UDPポートプロトコル用途
67 / 68DHCP / BOOTPIPアドレス自動配布(主な用途)
69TFTPファイル転送
137 / 138NetBIOSWindows名前解決
49TACACS認証
37Time時刻同期(旧式)
53DNS名前解決
⚠ 不要なポート転送はip forward-protocolで制御する DHCP以外のUDPポートのブロードキャスト転送が不要な場合はno ip forward-protocol udp [ポート番号]で個別に無効化できます。セキュリティ上、必要なポートのみ有効にすることを推奨します。
図2:DHCPリレーが必要になる主なシナリオ(現場経験ベース)

設定例

VLAN 10のクライアントが、192.168.100.10にあるDHCPサーバからアドレスを取得する構成例です。

構成図

PC(VLAN10:192.168.10.x/24)
   ↕ L2接続
L3スイッチ(SVI Vlan10:192.168.10.1/24)
     ← ip helper-address 192.168.100.10 設定
   ↕ ルーティング
DHCPサーバ(192.168.100.10:VLAN100)
  VLAN10向けスコープ:192.168.10.100〜200

設定コマンド

Switch# configure terminal

! L3ルーティングを有効化(L3スイッチ必須)
Switch(config)# ip routing

! VLAN 10 SVIにIPアドレスとDHCPサーバを指定
Switch(config)# interface Vlan10
Switch(config-if)# ip address 192.168.10.1 255.255.255.0
Switch(config-if)# ip helper-address 192.168.100.10
Switch(config-if)# no shutdown
Switch(config-if)# exit

Switch(config)# end
Switch# copy running-config startup-config
ℹ ip helper-addressはSVIに設定する ip helper-addressはクライアントが接続しているVLANのSVI(スイッチ仮想インターフェース)に設定します。DHCPサーバ側のインターフェースではなく、クライアント側のインターフェースに設定する点が重要です。VLANが増えるたびに、そのVLANのSVIに設定が必要です。

複数VLANに対応する場合

VLAN 10・20・30など複数のVLANが存在する場合、それぞれのSVIにip helper-addressを設定します。

! VLAN 10(フロア1)
Switch(config)# interface Vlan10
Switch(config-if)# ip address 192.168.10.1 255.255.255.0
Switch(config-if)# ip helper-address 192.168.100.10

! VLAN 20(フロア2)
Switch(config)# interface Vlan20
Switch(config-if)# ip address 192.168.20.1 255.255.255.0
Switch(config-if)# ip helper-address 192.168.100.10

! VLAN 30(フロア3)
Switch(config)# interface Vlan30
Switch(config-if)# ip address 192.168.30.1 255.255.255.0
Switch(config-if)# ip helper-address 192.168.100.10

複数DHCPサーバの指定(冗長化)

DHCPサーバを冗長化する目的で、1つのインターフェースに複数のip helper-addressを設定できます。

interface Vlan10
 ip helper-address 192.168.100.10   ← プライマリDHCPサーバ
 ip helper-address 192.168.100.20   ← バックアップDHCPサーバ
⚠ 複数サーバへの転送は「順番」ではなく「同時」です ip helper-addressを複数設定した場合、L3スイッチはDHCPブロードキャストを両方のサーバに同時にユニキャストで転送します。「順番に問い合わせる」わけではありません。クライアントは最初に届いたDHCP OFFERを採用します。

両方のサーバが同じスコープを持っているとIPアドレスの重複が発生するため、通常はサーバ間でスコープを分割するか、DHCPフェイルオーバー機能を使って管理します。

動作確認コマンド

基本的な設定確認

! SVI設定の確認(ip helper-addressが入っているか)
Switch# show running-config interface Vlan10

! インターフェースの状態確認(UP/UPか)
Switch# show ip interface Vlan10

! ルーティングテーブルでDHCPサーバへの経路確認
Switch# show ip route 192.168.100.10

詳細なパケット確認(テスト時・デバッグ)

! DHCPリレーのデバッグ(業務時間外に実施)
Switch# debug ip dhcp server packet

! 確認後は必ず無効化
Switch# no debug all
🚨 debugコマンドは業務時間帯に使わない debug ip dhcp server packetはCPUに負荷をかけます。本番環境の業務時間帯は避け、確認後は必ずno debug allで無効化してください。

DHCPが取得できないときの切り分け手順

1
SVIにip helper-addressが設定されているか
show running-config interface Vlan[番号]
2
SVIがUP/UPになっているか
show ip interface Vlan[番号]
「down/down」の場合はVLANにポートが存在しない・no shutdownが未実施
3
DHCPサーバへの経路があるか
show ip route 192.168.100.10
ルートが存在しない場合はip routingが未設定またはルーティング設定不備
4
ACLやFWでUDP 67/68がブロックされていないか
show ip access-lists
経路上のACLやFirewallがDHCPトラフィックを遮断している可能性
5
DHCPサーバにVLANのスコープが定義されているか
DHCPサーバ側に192.168.10.x/24のスコープが存在するか確認。スコープが未設定だとOFFERが返せない

運用上の注意点

注意点内容
ACLでUDP 67/68を許可する経路上のACLやFWがDHCPトラフィック(UDP 67/68)をブロックしていると動作しない
複数サーバ時はスコープを分割複数のDHCPサーバに同時転送されるため、同一スコープを持たせるとIPが重複するリスクがある
helper-addressは到達可能なIPを指定L3スイッチからDHCPサーバのIPへのルートが存在することが前提。ルートがなければ転送できない
VLAN追加時にSVIへの設定を忘れない新しいVLANを追加するたびにそのSVIへip helper-addressを設定する必要がある。チェックリストに入れておくと安全
不要なUDP中継はno ip forward-protocolで無効化DHCP以外のUDPブロードキャスト転送が不要な場合は明示的に無効化して不要なトラフィックを減らす

まとめ

DHCPリレーは、複数VLAN環境でのIPアドレス配布を実現する基本機能です。正しく設定すれば、物理的に離れたDHCPサーバから複数のVLANへ安定してアドレスを配布できます。

  • ip helper-addressはクライアント側のSVI(インターフェース)に設定する
  • 複数DHCPサーバを指定した場合、両方に同時に転送される(順番ではない)。スコープの重複に注意
  • L3ルーティングが有効でDHCPサーバへの経路が存在することが前提条件
  • ACLやFWでUDP 67/68がブロックされていないか確認する
  • VLANを追加するたびに新しいSVIへの設定が必要。漏れをなくすためチェックリストに加える
  • デバッグはdebug ip dhcp server packetで確認し、確認後は必ずno debug allで無効化

運用時はACLやルーティング設定とあわせて動作を確認し、トラブル時には5ステップの切り分け手順を順番に確認していきましょう。