Rocky LinuxでVLANをまたぐDHCPサーバー構築(DHCPリレー)

Linux

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スイッチに対応させるほうが良いでしょう。