CentOS系(Rocky Linux)でDHCPサーバーを構築する備忘録です。
WiFi設備の構築・導入は、既存設備にあるNetAttest D3, Popchatなどのアプライアンス型DHCPサーバーを流用することが多いのですが、構築案件ごとにDHCPサーバーを貸与していては時間と手間の浪費につながるることから、Linuxで模擬DHCPサーバーを構築して動作検証を行うのが効率的です。
また大規模WiFi設備では、セキュリティ上の観点からWiFi端末同士が通信できないように、L2スイッチを用いたVLANを設定することがあり、その場合はVLAN内でリース範囲を設定する必要があります。
本記事はDHCPリレーという仕組みを用いてVLANで区切られたセグメントにもリースすることができるDHCPサーバーの構築について解説します。
環境条件の確認
ネットワーク構成
本記事で解説するネットワーク構成は以下のとおりです。
- ワイヤレスコントローラ:Cisco C9800-CL
- DHCPサーバー:Rocky Linux9 DHCPd
- L2 PoE Switch:Cisco, Allied Telesisなど(コンフィグ構文はメーカにより若干違う)
- アクセスポイント:C9105(C9800-CLがサポートするもの)
IPアドレス体系
- DHCPサーバー(管理vlan配置):10.102.3.30 netmask 255.255.255.0 GW 10.102.3.254
- vlan10:10.102.10.0 netmask 255.255.225.0 GW 10.102.10.254
- vlan20:10.101.20.0 netmask 255.255.255.0 GW 10.101.20.254
DHCPリース範囲の設定
- サーバー(管理vlan配置):10.102.3.1 - 30
- vlan10:10.102.10.1 - 10.102.10.50
- vlan20:10.101.20.1 - 10.101.20.50
DHCPサーバーの構築
DHCPサーバーインストール
CentOS系はインターネット接続状態から、yumコマンドでインストールします。
# yum -y install dhcp-server
DHCPサーバーの設定
/etc/dhcp/dhcpd.confがDHCPサーバー(ipv4)の設定ファイルです。
デフォルトではタイトル行以外何も書かれていませんので、以下設定例を参考にして記述します。
# # DHCP Server Configuration file. # see /usr/share/doc/dhcp-server/dhcpd.conf.example # see dhcpd.conf(5) man page # default-lease-time 300; max-lease-time 7200; subnet 10.102.3.0 netmask 255.255.255.0 { range 10.102.3.1 10.102.3.30; option domain-name-servers 8.8.8.8; option routers 10.102.3.254; } ## vlan10 subnet 10.102.10.0 netmask 255.255.255.0 { range 10.102.10.1 10.102.10.50; option domain-name-servers 8.8.8.8; option routers 10.102.10.254; } # ## vlan20 subnet 10.101.20.0 netmask 255.255.255.0 { range 10.101.20.1 10.101.20.50; option domain-name-servers 8.8.8.8; option routers 10.101.20.254; }
最上位のsubnetは、自pcの物理ipアドレス範囲内に設定します。
自pcがdhcpリース範囲外の場合は、dhcpdがエラーとなって起動しません。
大抵の方はここで詰まってしまう事が多いので注意が必要です。
dhcpd.confの構文チェック
dhcpd.confの構文チェックをします。
# dhcpd -t Internet Systems Consortium DHCP Server 4.3.6 Copyright 2004-2017 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ ldap_gssapi_principal is not set,GSSAPI Authentication for LDAP will not be used Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcpd/dhcpd.leases PID file: /var/run/dhcpd.pid Source compiled to use binary-leases
以上は、エラーがない場合の結果です。
エラーが出た場合は、エラーメッセージが表示されますので、/etc/dhcp/dhcpd.confを修正します。
dhcpdの起動と停止
dhcpdの起動と停止の手順について解説します。
firewallの解除
CentOS系はデフォルトでFirewallが動作していますので、DHCPやRADIUSとして動作させる場合はfirewall解除が必要です。
今回は検証用にlinuxサーバーを組んでいますので、systemctlでdisableにして永続停止にしておきます。
firewall停止 # systemctl stop firewalld firewall自動起動の停止 # systemctl disable firewalld
dhcpdの起動
# systemctl start dhcpd # systemctl enable dhcpd 自動起動する場合
dhcpd動作タスクの確認
以下標準コマンドでプロセスの有無を確認できます。
# ps aux | grep dhcpd
dhcpdを停止したい場合
systemctlまたはkillコマンドを使います。
# systemctl stop dhcpd または # kill -9 (pid) pidはps auxで見たタスク番号
dhcpサーバーの動作確認
dhcpサーバーの起動確認ができたら、接続している端末、または、L2/L3スイッチからpingによる疎通確認をします。
$ ping 10.102.3.30
dhcpのリース状態確認
dhcpdのリース状態は、dhcpd.leasesログの末尾を見ることで確認できます。
# cat /var/lib/dhcp/dhcpd.leases
vlanの設定例
vlan配下でDHCPをリースする場合は、L2/L3/WLCのうちコントローラとなる機器でvlanのDHCPリレー設定を記述します。
DHCPリレーの設定は、スイッチのメーカーにより記述が異なりますので、あらかじめCLIリファレンスマニュアルや設定例の確認をしておく必要があります。
今回の構成では、Cisco のWLC(C9800-CL)がアクセスポイントを制御していますので、C9800ーCLにDHCPリレーの設定を記述します。
C9800 GUI画面での設定箇所
C9800-CLはCLIよりGUIのほうが設定しやすいため、以下の手順で設定します。
- 設定→VLAN→詳細
- 設定→タグとプロファイル→ポリシー→詳細でDHCPを設定
設定後のshow running-config(抜粋)
! C9800-CLでの設定コンフィグ例 ! ! VLANの記述例 interface Vlan10 ip dhcp relay information trusted ip dhcp relay source-interface Vlan10 ip address 10.102.10.251 255.255.255.0 no mop enabled no mop sysid ! interface Vlan20 ip dhcp relay information trusted ip dhcp relay sourceinterface Vlan20 ip address 10.101.20.253 255.255.255.0 no mop enabled no mop sysid ! interface Vlan1 #WLC native VLAN ip dhcp relay information trusted ip dhcp relay source-interface Vlan1 ip address 172.24.226.253 255.255.252.0 no mop enabled no mop sysid ! ! APのDHCPサーバーのpolicy設定例 wireless profile policy falcon1x_policy aaa-override no central association no flex umbrella dhcp-dns-option ipv4 dhcp server 10.102.3.30 session-timeout 3600 vlan VLAN010 no shutdown wireless profile policy falcon2x_policy aaa-override no central association no flex umbrella dhcp-dns-option ipv4 dhcp server 10.102.3.30 vlan VLAN020 no shutdown
実際の作業では、GUIで設定すれば上述のコンフィグが生成されますので、コンフィグを見比べて動作確認するとよいでしょう。
トラブルシュート
dhcpd設定に誤りがある状態では、ネットワーク動作ができないことから、とにかく見つけにくいです。
筆者が遭遇した問題を記載しておきますので、以下を参考にしてください。
dhcpdがエラーとなって起動しない
- dhcpd.confの最上位のsubnetが、自pcの物理ipアドレス範囲内ではない:自pcがリース範囲外であると、dhcpdはエラーとなって起動しません。
ipアドレスがリースされない
- L2/L3/コントローラからDHCPサーバーへのpingが通らない:L2/L3スイッチからDHCPサーバへ到達できるように設定を見直す
- L2/L3のvlanからdhcpサーバーへのリレー設定がなされてない:L2/L3スイッチのコンフィグに誤りがあるため見直す
- リレー設定の記述やipアドレス設定に間違いがある:L2/L3スイッチのコンフィグに誤りがあるため見直す
特定vlanのみipアドレスがリースされない
- L2/L3からDHCPサーバーへのpingが未到達:経路のL2/L3の特定vlanにリレー設定が記載漏れ
- 多段スイッチ構成時の経路設定不備:ネットワーク構成図や経路中のL2/L3のコンフィグを見て、DHCPサーバーを認識しているL2/L3特定し、そのスイッチへリレー設定を記述する
- DHCPサーバーのsubnetmaskと、dhcpdのsubnetmask値が不一致
LinuxのDHCPdは本番環境でも使われる
LinuxのDHCPサーバーはリース数などの制約がなく、vlanまたぎも簡単なコンフィグ設定のみでできるため、本番環境でも良く用いられています。
DHCPdはハードウェアリソースをあまり消費しませんので、オンプレミスで立てることはほぼなく、VMware上の仮想環境でRADIUSサーバーと併設設置することが多いです。
ただし、設備に仮想サーバーが必要ですし、Linuxが使える担当者も必要であるため、DHCPリース数が500個以下である場合は、ルーターやL2/L3スイッチに対応させるほうが良いでしょう。