- DHCP概要
DHCP(Dynamic Host Configuration Protocol、動的ホスト構成プロトコル)はアプリケーション層で動作するLANネットワークプロトコルです。データ転送時にはUDP不可靠伝送プロトコルを使用し、通常大規模なLAN環境で使用されます。主な機能はネットワークリソースの集中管理と割り当てであり、ネットワーク内のホストがIPアドレス、ゲートウェイアドレス、DNSサーバーアドレスなどの情報を動的に取得できるようにし、アドレスの使用効率を向上させます。
- DHCPの動作原理(リース四部作+更新)
2.1 DHCPクライアントによるIPリクエスト
DHCPクライアントが起動すると、IPアドレスを自動的に0.0.0.0に設定します。0.0.0.0では正常な通信ができないため、クライアントはDHCPサーバーから有効なアドレスを取得する必要があります。クライアントはDHCPサーバーのIPアドレスを知らないため、ソースアドレスとして0.0.0.0を使用し、ターゲットアドレスとして255.255.255.255を使用し、UDP 67ポートをターゲットポートとしてIPアドレス情報をブロードキャストします。ブロードキャストメッセージDHCP Discoverには、DHCPサーバーがどのクライアントからリクエストが送信されたかを特定できるように、DHCPクライアントのMACアドレスとコンピュータ名が含まれています。
2.2 DHCPサーバーの応答
DHCPサーバーがクライアントからのIPアドレスリクエストを受信すると、自身のIPアドレスプールからクライアントに有効なIPアドレスが提供できるかどうかを確認します。もしあれば、DHCPサーバーはそのIPアドレスをマークし、DHCP OFFERメッセージに追加します。その後、DHCPサーバーは次の情報を含むDHCP OFFERメッセージをブロードキャストします:
DHCPクライアントのMACアドレス;DHCPサーバーが提供する有効なIPアドレス;サブネットマスク;デフォルトゲートウェイ(ルーティング);リース期間;DHCPサーバーのIPアドレス-MAC。
クライアントがまだIPアドレスを持っていないため、DHCPサーバーは自身のIPアドレスをソースアドレスとして使用し、255.255.255.255をターゲットアドレスとして使用し、UDP 68ポートをソースポートとしてDHCP OFFER情報をブロードキャストします。
2.3 DHCPクライアントによるIP選択
DHCPクライアントは受信した最初のDHCP OFFERメッセージからIPアドレスを選択し、IPアドレスを提供したDHCPサーバーはそのアドレスを予約し、他のDHCPクライアントに提供できなくなります。クライアントが最初のDHCPサーバーからDHCP OFFERを受信してIPアドレスを選択した後、DHCPリースの第三プロセスが発生します。クライアントはDHCP REQUESTメッセージをすべてのDHCPサーバーにブロードキャストし、提供内容を受け入れることを示します。DHCP REQUESTメッセージには、クライアントにIP構成を提供するサーバーのサービス識別子(IPアドレス)が含まれています。DHCPサーバーはサーバー識別フィールドを確認して、自身が指定されたクライアントにIPアドレスを提供するために選択されたかどうかを判断します。DHCP OFFERが拒否された場合、DHCPサーバーは提供をキャンセルし、次のIPリースリクエストに備えてIPアドレスを保持します。
クライアントがIPを選択するプロセスでは、クライアントはIPアドレスを選択しましたが、まだIPアドレスを構成していません。ネットワーク内に複数のDHCPサーバーがある可能性があるため、クライアントはまだ0.0.0.0をソースアドレスとして使用し、255.255.255.255をターゲットアドレスとして使用し、UDP 67ポートをターゲットポートとしてDHCP REQUEST情報をブロードキャストします。
2.4 DHCPサーバーによるリース確認
サーバーによるリース確認:DHCP ACK
DHCPサーバーがDHCP REQUESTメッセージを受信すると、DHCP ACKメッセージの形式でクライアントに成功確認をブロードキャストします。このメッセージには、IPアドレスの有効なリース期間とその他の構成情報が含まれています。サーバーはクライアントのリースリクエストを確認しましたが、クライアントはまだサーバーのDHCP ACKメッセージを受信していないため、サーバーはまだ自身のIPアドレスをソースアドレスとして使用し、255.255.255.255をターゲットアドレスとして使用し、UDP 68ポートをソースポートとしてDHCP ACK情報をブロードキャストします。クライアントがDHCP ACKメッセージを受信すると、IPアドレスを構成し、TCP/IPの初期化が完了します。
サーバーによるリース拒否:DHCP NACK(DHCP NAK)
DHCP REQUESTが成功しない場合(たとえば、クライアントが以前のIPアドレスをリースしようとしましたが、そのIPアドレスがもう利用できない場合、またはクライアントが他のサブネットに移動し、そのIPが無効になった場合)、DHCPサーバーは否定確認メッセージDHCP NACKをブロードキャストします。クライアントが不成功の確認を受信すると、DHCPリースプロセスを再開します。
注:DHCPクライアントがDHCPサーバーからACKパケットへの応答を見つけられない場合、TCP/IPのBクラスネットワークセグメント169.254.0.0/16からIPアドレスを1つ選択して自身のIPアドレスとして使用し、5分ごとにDHCPサーバーとの通信を試みます。DHCPサーバーと連絡が取れた場合、クライアントは自動構成されたIPアドレスを放棄し、DHCPサーバーが割り当てたIPアドレスを使用します。
注:DHCPクライアントがDHCPサーバーからACKパケットへの応答を受信した後、アドレス競合検出(arp)を通じてサーバーが割り当てたアドレスに競合があるか、またはその他の理由で使用できないことが判明した場合、DECLINEパケットを送信してサーバーに割り当てられたIPアドレスが使用できないことを通知します。
2.5 DHCPクライアントによるリース更新
DHCPクライアントはリース期間の50%が経過したときに、IPアドレスを提供したDHCPサーバーに直接DHCP REQUESTメッセージパケットを送信します。クライアントがサーバーからのDHCP ACKメッセージパケットを受信した場合、クライアントはパケットに含まれる新しいリース期間およびその他の更新されたTCP/IPパラメータに基づいて構成を更新し、IPリース更新が完了します。サーバーからの応答がなければ、クライアントは現在のIPアドレスを引き続き使用します。なぜなら、現在のリース期間の50%がまだ残っているからです。
リース期間の50%が更新されない場合、DHCPクライアントはリース期間の87.5%が経過したときに、IPアドレスを提供したDHCPサーバーに再び連絡します。それでも成功しない場合、リース期間の100%が経過したとき、DHCPクライアントはこのIPアドレスを放棄し、再申請する必要があります。この時点でDHCPサーバーが利用できない場合、DHCPクライアントは169.254.0.0/16からランダムなアドレスを使用し、5分ごとに再試行します。
- DHCPサービスの構築
3.1 実験環境の準備
2台のマシン、ネットワーク接続モードをカスタムVMnet*モードに設定
セキュリティの無効化:
1. getenforce
2. VMware仮想ネットワークエディターのDHCP機能を無効にする
3.2 DHCP関連情報
ソフトウェア名:
dhcp #DHCPサービスソフトウェアパッケージ
dhcp-common #DHCPコマンドソフトウェアパッケージ(デフォルトでインストール済み)
サービス名:
dhcpd #DHCPサービス名
dhcrelay #DHCPリレーサービス名
ポート番号:
udp 67 #クライアントのターゲットポートとして、クライアントのリクエストDHCPリクエストを受信
udp 68 #サーバーのソースポートとして、クライアントにデータパケットを返信するために使用
設定ファイル:
dhcpd /etc/dhcp/dhcpd.conf #この設定ファイルはデフォルトで空です。テンプレートファイルを見つけて再生成する必要があります
dhcpd.conf.example /usr/share/doc/dhcp-4../dhcpd.conf.example #DHCPのテンプレート設定ファイル
3.3 DHCP設定ファイルの詳細
subnet 10.5.5.0 netmask 255.255.255.224 { #割り当てるネットワークセグメントとサブネットマスクを宣言
range 10.5.5.26 10.5.5.30; #利用可能なIPアドレスを宣言
option domain-name-servers ns1.internal.example.org; #DNSドメインを設定
option domain-name "internal.example.org"; #DNSサーバーアドレスを設定
option routers 10.5.5.1; #デフォルトゲートウェイのアドレス
option broadcast-address 10.5.5.31; #ブロードキャストアドレス(省略可能)
default-lease-time 600; #デフォルトリース期間(秒)
max-lease-time 7200; #最大リース期間(秒)
}
- DHCP実験の展開
4.1 DHCP基本機能実験
yum -y install dhcp dhcp-common
4.1.1 設定ファイルの生成
# cd /usr/share/doc/dhcp-4.2.5
# cp -a dhcpd.conf.example /etc/dhcp/dhcpd.conf
4.1.2 設定ファイルの変更
設定ファイルの最初のいくつかのsubnet宣言をコメントアウトし、最後のsubnet宣言を変更します
注:設定ファイル内の各行の末尾のセミコロンと終了中括弧に注意してください
# vim /etc/dhcp/dhcpd.conf
subnet 192.168.80.0 netmask 255.255.255.0 {
range 192.168.80.134 192.168.80.254;
option domain-name-servers 114.114.114.114;
# option domain-name "internal.example.org";
option routers 192.168.80.2;
option broadcast-address 192.168.80.255;
default-lease-time 600;
max-lease-time 7200;
}
4.1.3 サービスの再起動
# systemctl restart dhcpd
4.1.4 クライアントのネットワークカードの再起動
# systemctl restart network
4.2 予約アドレス(固定アドレス割り当て)
4.2.1 クライアントのMACアドレスの取得
# arp -a
4.2.2 /etc/dhcp/dhcpd.confファイルの変更
host wonderland {
hardware ethernet macアドレス; #クライアントのMACアドレス
fixed-address IPアドレス; #クライアントに固定で割り当てるIPアドレス(アドレスプール外のIPを使用可能)
}
host wonderland {
hardware ethernet 00:0c:29:93:80:12;
fixed-address 192.168.80.12;
}
4.2.3 dhcpサービスの再起動
# systemctl restart dhcpd
4.2.4 クライアントのネットワークカードの再起動と検証
# systemctl restart network
# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.12 netmask 255.255.255.0 broadcast 192.168.80.255
inet6 fe80::20c:29ff:fe93:8012 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:93:80:12 txqueuelen 1000 (Ethernet)
RX packets 1377 bytes 118705 (115.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 289 bytes 42880 (41.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.3 スーパースコープ(同一LAN内)
4.3.1 スーパースコープの紹介
DHCPサーバーは、単一の物理ネットワーク上のクライアントに複数のスコープリースアドレスを提供できます。
4.3.2 環境の準備
3台の仮想マシン、同一ネットワークモード、1つのdhcpサーバー、2つのクライアント
4.3.3 使用手順
1. DHCPサーバーの単腕ルーティングに必要なサブネットカードの設定:
# cd /etc/sysconfig/network-scripts/
# cp -a ifcfg-ens33 ifcfg-ens33:0
# vim ifcfg-ens33:0
NAME=ens33:0
DEVICE=ens33:0
IPADDR=192.168.90.133<br></br># ネットワークカード名とIPアドレスを変更
2. ルーティング転送の有効化
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1<br></br># sysctl -p
3. /etc/dhcp/dhcpd.confファイルの変更
#以前のネットワークセグメント宣言とホスト宣言をすべてコメントアウト
shared-network 80-90 {
subnet 192.168.80.0 netmask 255.255.255.0 {
option routers 192.168.80.133;
range 192.168.80.200;
}
subnet 192.168.90.0 netmask 255.255.255.0 {
option routers 192.168.90.133;
range 192.168.90.201 192.168.90.210;
}
}
4. DHCPサービスの再起動
# systemctl restart dhcpd
5. 2台のマシンのネットワークカードをそれぞれ再起動し、取得したアドレスを確認
# ifup ens33
4.4 DHCPリレー
4.4.1 DHCPリレーの紹介
DHCP Relay(DHCPR)DHCPリレーは、異なるサブネットと物理ネットワークセグメント間でdhcp情報を処理および転送する機能を実現する小さなプログラムです。
4.4.2 環境の準備
DHCPサーバー
192.168.80.132 VMnet1
DHCPリレー
192.168.80.133 VMnet1
192.168.160.133 VMnet8
外部ネットワーククライアント
自動でIPアドレスを取得 VMnet8
DHCPサーバー
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
IPADDR=192.168.80.132
NETMASK=255.255.255.0
GATEWAY=192.168.80.133
...
DHCPリレー
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
IPADDR=192.168.80.133
NETMASK=255.255.255.0
...
# vim /etc/sysconfig/network-scripts/ifcfg-ens37
...
NAME=ens37
DEVICE=ens37
IPADDR=192.168.160.133
NETMASK=255.255.255.0
#UUID=...
...
クライアント
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
BOOTPROTO=dhcp
...
# ifdown ens33
4.4.3 DHCPサーバーの設定
1. ソフトウェアのインストール
# yum -y install dhcp
2. /etc/dhcp/dhcpd.confファイルの変更
subnet 192.168.80.0 netmask 255.255.255.0 {
option routers 192.168.80.133;
range 192.168.80.101 192.168.80.110;
}
subnet 192.168.160.0 netmask 255.255.255.0 {
option routers 192.168.160.133;
range 192.168.160.201 192.168.160.210;
}
3. サービスの再起動
# systemctl restart dhcpd
4. ゲートウェイの指定
リレーの内側ネットワークIPをゲートウェイアドレスとしてのみ指定可能
4.4.4 DHCPリレーサーバーの設定
1. ネットワークカードの設定
2. ソフトウェアのインストール
# yum -y install dhcp
3. ルーティング転送の有効化
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1<br></br># sysctl -p
4. リレーサービスの起動
# dhcrelay 192.168.80.132
#DHCPサーバーのIPを指定
4.4.5 外部ネットワークホストのテスト
ネットワークカードの再起動
# ifdown ens33 && ifup ens33
# ip a
# ifconfig