InfraAcademy

InfraAcademy Blog

DHCPリレーとは?DHCPリレーの設定方法などを詳しく解説【LinuxとRouterで設定】

| #Linux #ネットワーク #DHCP

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、DHCPリレーの仕組みと設定方法を解説します。

DHCPサーバーとクライアントが同じネットワークにいれば、基本的にDHCPリレーは必要ありません。しかし、VLANやサブネットを分けると、クライアントのブロードキャストがDHCPサーバーまで届かなくなります。

この問題を解決するのがDHCPリレーです。

この記事では、DHCPのDORA、giaddr、CiscoルーターやL3スイッチのip helper-address、Linuxのdhcrelayまで順番に解説します。

DHCPリレーとは?

今回の記事では、DHCPリレーの概要と設定方法について解説します。DHCPリレーとは、異なるネットワークにあるDHCPサーバーに通信を中継する技術です。

DHCPクライアントは、IPアドレスを取得する前には自分のネットワーク情報を持っていません。

そのため、最初の問い合わせをブロードキャストで送信しますが、ルーターは通常、そのブロードキャストを別ネットワークへ転送しません。

DHCPリレーが必要になる構成

たとえば、次のような構成を考えます。

機器・ネットワーク 設定例
クライアント用VLAN 192.168.10.0/24
クライアント側ゲートウェイ 192.168.10.1
DHCPサーバー 192.168.1.10
DHCPサーバー側ネットワーク 192.168.1.0/24

クライアントはVLAN 10へ接続されていますが、DHCPサーバーは別のネットワークにあります。

このままでは、クライアントが送信したDHCPDISCOVERをDHCPサーバーが受信できません。

そこで、クライアント側のデフォルトゲートウェイとなるルーターやL3スイッチへDHCPリレーを設定します。

DHCPの通信の仕組み

DHCPリレーを理解するには、クライアントがIPアドレスを取得する流れを知る必要があります。

DHCPの代表的な通信は、頭文字を取ってDORAと呼ばれます。

順番 メッセージ 内容
1 DHCPDISCOVER クライアントがDHCPサーバーを探す
2 DHCPOFFER DHCPサーバーが利用可能なIPを提案する
3 DHCPREQUEST クライアントが使用したいIPを要求する
4 DHCPACK DHCPサーバーが割り当てを確定する

DHCPの通信の仕組み

DHCPサーバーは、クライアントへIPアドレスを自動で配布します。

クライアントはネットワークに接続したら、ブロードキャストでDHCPに問い合わせを行います。ブロードキャストで問い合わせを行うということは、同一ネットワーク全てに通信を行うということです。

しかし、異なるネットワークにDHCPサーバーが存在する場合、クライアントからの問い合わせのブロードキャストが届かないという問題があります。

この問題を解決するのがDHCPリレーです。

クライアントからDHCPサーバーに問い合わせするイメージは以下のような感じです。

DHCP Discoverの仕組み DHCPサーバーへの問い合わせを「DHCP DISCOVER」と言います。DHCPサーバーとクライアントの通信の詳しい内容はこちらの記事で解説しています。

DHCPとは?初心者のために仕組みを分かりやすく解説

DHCPでは、クライアントからサーバーへの通信にUDP 67番、サーバーからクライアントへの通信にUDP 68番が使われます。

ファイアウォールを設定している場合は、単にpingが通るかだけではなく、DHCP通信が許可されているかも確認しましょう。

DHCPリレーはDHCPの通信を中継する仕組み

DHCPリレーは、ブロードキャストで通信が届かない異なるネットワークに存在するサーバーへ中継するための設定です。

クライアントと同一ネットワークにあるルーターやサーバーへDHCPリレーの設定を行います。中継先のDHPCサーバーを指定することで、DHCPリレーは異なるネットワークのサーバーへ通信を行うことができます。

DHCPリレーの設定

DHCPリレーが中継するときの動作

DHCPリレーは、クライアントから受信したブロードキャストを、そのまま別ネットワークへばらまくわけではありません。

DHCPサーバーのIPアドレスを宛先にして、通常はユニキャストで転送します。

giaddrでクライアント側のネットワークを伝える

DHCPリレーは、DHCPメッセージのgiaddrというフィールドへ、自分のクライアント側インターフェースのIPアドレスを設定します。

今回の例なら、192.168.10.1です。

DHCPサーバーはgiaddrを確認し、どのサブネット用のアドレスプールからIPを払い出せばよいか判断します。

そのため、DHCPサーバー側にはクライアントネットワーク用のスコープが必要です。

subnet 192.168.10.0 netmask 255.255.255.0 {
    range 192.168.10.100 192.168.10.200;
    option routers 192.168.10.1;
}

リレーを設定しても、DHCPサーバーに192.168.10.0/24用のスコープがなければ、適切なIPアドレスを返せません。

DHCPサーバーからの応答もリレーが戻す

DHCPサーバーは、giaddrに記録されたDHCPリレーへDHCPOFFERやDHCPACKを返します。

DHCPリレーは、その応答をクライアントが存在するネットワークへ転送します。

この流れによって、クライアントとDHCPサーバーが異なるネットワークにあっても、IPアドレスを取得できます。

DHCPリレーの設定方法

ここからは、DHPリレーの設定方法について解説します。DHCPリレーはRouterやサーバーで設定することができます。どちらも簡単に設定することができます。

実務では、クライアントのデフォルトゲートウェイになっているルーターやL3スイッチへ設定する構成が一般的です。

Linuxサーバーを中継機として使うこともできますが、使用するソフトウェアの保守状況まで確認しましょう。

RouterでDHCPリレーを設定する方法

まず、RouterでDHCPリレーを設定する方法についてです。DHCPリレーはRouterやL3スイッチなどのデフォルトゲートウェイとなるネットワーク機器に設定します。

Cisco IOSやIOS XEでは、クライアント側インターフェースへip helper-addressを設定します。

Ciscoの設定例

今回の例では、VLAN 10のゲートウェイが192.168.10.1、DHCPサーバーが192.168.1.10です。

Router> enable
Router# configure terminal
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip address 192.168.10.1 255.255.255.0
Router(config-if)# ip helper-address 192.168.1.10
Router(config-if)# no shutdown
Router(config-if)# end

L3スイッチのSVIへ設定する場合は、次のようになります。

Switch(config)# interface vlan 10
Switch(config-if)# ip address 192.168.10.1 255.255.255.0
Switch(config-if)# ip helper-address 192.168.1.10
Switch(config-if)# no shutdown

ip helper-addressは、DHCPクライアントからブロードキャストを受け取る側のインターフェースへ設定します。

DHCPサーバーへ接続している側のインターフェースへ設定するものではありません。

設定時の注意点

Cisco IOSでは通常DHCPサービスが有効ですが、過去にno service dhcpが設定されている場合はリレーが動作しません。

また、ip helper-addressはDHCP以外の一部UDPブロードキャストも転送するため、既存環境ではip forward-protocol udpの設定も確認してください。

CiscoでDHCPリレーを確認する方法

設定後は、running-config、インターフェース、DHCPサーバーへの経路を順番に確認します。

Router# show running-config | include helper-address
Router# show ip interface brief
Router# show ip route 192.168.1.10
Router# ping 192.168.1.10

ip helper-addressが表示され、クライアント側インターフェースがup/upで、DHCPサーバーまで到達できることを確認します。

Windowsクライアントでは、次のコマンドでIPを再取得できます。

ipconfig /release
ipconfig /renew

割り当てられたIP、サブネットマスク、デフォルトゲートウェイ、DNSサーバーが想定どおりか確認してください。

LinuxでDHCPリレーを設定する方法

次にLinuxでDHCPリレーを設定する方法です。LinuxでDHCPリレーを設定するためには、「dhcrelay」のインストールを行います。

Ubuntuでは現在もisc-dhcp-relayパッケージが提供されていますが、開発元のISCではDHCPクライアントとリレーを保守終了としています。

学習環境や既存環境の理解には利用できますが、新規の本番環境では、ルーターやL3スイッチ、ベンダーが保守するリレー機能を優先して検討してください。

isc-dhcp-relayをインストールする

Ubuntu・Debian系では、次のコマンドを実行します。

sudo apt update
sudo apt install isc-dhcp-relay

「isc-dhcp-relay」をインストールすると、DHCPのIPアドレスを入力する画面が表示されます。続いて、インターフェースの入力画面が表示されます。

DHCPリレーの設定 コマンドで設定する場合は、以下のように設定します。

sudo dhcrelay -i eth0 192.168.1.10

元記事の192.168.1.1は構成例によってはDHCPサーバーではなくゲートウェイになるため、ここではDHCPサーバーの192.168.1.10を指定しています。

-iには、DHCPメッセージを送受信するインターフェースを指定します。

Ubuntuで設定ファイルを編集する

継続して動作させる場合は、通常/etc/default/isc-dhcp-relayを設定します。

SERVERS="192.168.1.10"
INTERFACESv4="ens160 ens192"
INTERFACESv6=""
OPTIONS=""

インターフェース名はip -br addressで確認します。設定後はサービスを再起動し、状態とログを確認してください。

sudo systemctl restart isc-dhcp-relay
sudo systemctl status isc-dhcp-relay
sudo journalctl -u isc-dhcp-relay -f

パケットの流れを確認する場合は、次のコマンドが役立ちます。

sudo tcpdump -ni any 'udp port 67 or udp port 68'

DHCPリレーが動かないときの確認方法

IPアドレスを取得できない場合は、クライアント・リレー・DHCPサーバーの順に切り分けます。

確認場所 主な確認内容
クライアント 接続VLAN、NIC状態、DHCP再取得
リレー 設定インターフェース、サーバーへの経路、ACL
DHCPサーバー 対象サブネットのスコープ、空きアドレス、サービス状態

Ciscoスイッチでは、次のコマンドでVLANを確認できます。

Switch# show vlan brief
Switch# show interfaces trunk

DHCPサーバーには、giaddrで通知されるクライアントネットワーク用のスコープが必要です。

たとえばgiaddr192.168.10.1なら、192.168.10.0/24用のプールと、デフォルトゲートウェイ192.168.10.1を用意します。

DHCP Option 82とは

大規模なネットワークでは、DHCPリレーがOption 82へ接続ポートなどの情報を追加する場合があります。

DHCPサーバーはCircuit IDやRemote IDを利用し、接続場所ごとに払い出し方を変えたり、不正なDHCP通信を制御したりできます。

まずは通常のip helper-addressを理解し、必要になった段階でOption 82を学ぶとよいでしょう。

DHCPリレーまとめ

今回の記事では、DHCPリレーについて解説しました。まとめると以下のようになります。

  • DHCPリレーは、異なるネットワークにあるDHCPサーバーへ通信を中継する
  • クライアント側のルーターやL3スイッチへ設定する
  • Ciscoではip helper-addressを使用する
  • DHCPサーバーはgiaddrからクライアント側のサブネットを判断する
  • DHCPサーバー側にも対象サブネット用のスコープが必要
  • Linuxのisc-dhcp-relayは利用できるが、開発元では保守終了している

DHCPリレーは、VLANを分割したネットワークでは頻繁に使われる機能です。

設定値を暗記するだけではなく、DHCPDISCOVERがどこで止まり、リレーがどの情報を付けて転送するのか理解しましょう。

当ブログでは、このようなITに関する知識を発信しているので興味のある方は是非ご覧ください。

参考資料

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る