はじめに
しばらく前に自宅のKea DHCP Serverを2.0系に移行したのでその記録を書いておきます。
稼働環境を実マシンのRaspberry PiからProxmox VEのLXCコンテナに移行ししたのでその点についても触れてます。
LXCコンテナ
下記記事で生成したコンテナをベースにKea DHCP Serverをインストールします。
インストール
Kea DHCP ServerはDebianのリポジトリーにも存在するけど、ここではISCのリポジトリーからインストールする。
今回の前提バージョンは
- Debian GNU/Linux : 11
- Kea DHCP Server : 2.01
- MariaDB : 10.5
です。
前準備
コンテナにGNU PG
とcURL
がインストールされていないのでインストールする。
sudo apt update && sudo apt install gpg curl
リポジトリー登録
cloudsmithのリポジトリーにセットアップスクリプトがあるのでそれを実行する。
curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-2-0/setup.deb.sh' | sudo bash
実行結果は以下の通り。
Executing the setup script for the 'isc/kea-2-0' repository ...
OK: Checking for required executable 'curl' ...
OK: Checking for required executable 'apt-get' ...
OK: Detecting your OS distribution and release using system methods ...
^^^^: ... Detected/provided for your OS/distribution, version and architecture:
>>>>:
>>>>: ... distro=debian version=11 codename=bullseye arch=x86_64
>>>>:
NOPE: Checking for apt dependency 'apt-transport-https' ...
OK: Updating apt repository metadata cache ...
OK: Attempting to install 'apt-transport-https' ...
OK: Checking for apt dependency 'ca-certificates' ...
OK: Checking for apt dependency 'gnupg' ...
OK: Importing 'isc/kea-2-0' repository GPG key into apt ...
OK: Checking if upstream install config is OK ...
OK: Installing 'isc/kea-2-0' repository via apt ...
OK: Updating apt repository metadata cache ...
OK: The repository has been installed successfully - You're ready to rock!
インストール
今回はバックエンドにMariaDBを用いるので、下記のパッケージをインストールする。
- isc-kea-dhcp4-server
- isc-kea-dhcp6-server
- isc-kea-ctrl-agent
- isc-kea-admin
- mariadb-server
- mariadb-client
sudo apt update && sudo apt install -y isc-kea-dhcp4-server isc-kea-dhcp6-server isc-kea-ctrl-agent isc-kea-admin mariadb-server mariadb-client
設定
基本的に設定すべき点は下記記事と同じ。
MariaDB設定
初期設定
mysql_secure_installation
を実行して初期設定を行う。
sudo mysql_secure_installation
実行結果は以下の通り。
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Kea DHCP Server用データーベースおよびユーザー作成
rootユーザーでデーターベースにログインして、Kea DHCP Server用のデーターベース(kea)およびユーザー(kea)を作成する。
mysql -u root -p
MariaDBのプロンプトで以下の内容を実行する。
CREATE DATABASE kea;
GRANT ALL ON kea.* TO kea@localhost IDENTIFIED BY 'P@ssword';
FLUSH PRIVILEGES;
QUIT;
P@ssword
には実際に使用するパスワードを入力する。
Kea DHCP Server用データーベース初期設定
kea-admin
を用いてDBの初期設定を行う。
sudo kea-admin db-init mysql --host localhost --port 3306 --user kea --password P@ssword --name kea
--host
はデーターベースを実行しているホスト名 : ここではlocalhost
--port
はデーターベースの待受ポート : ここでは3306
--user
は先程作成したKea DHCP Server用のユーザー名 : ここではkea
--password
は先程作成したKea DHCP Server用のユーザーのパスワード : ここではP@ssword
--name
は先程作成したKea DHCP Server用のデーターベース名 : ここではkea
Kea DHCPv4 Server
/etc/kea/kea-dhcp4.conf
を編集して設定を行う。
ネットワークインターフェース
使用するサーバーのネットワークインターフェース名を記述する。
"Dhcp4": {
:
:
"interfaces-config": {
// サーバーのネットワークインターフェース
"interfaces": [ "eth0" ]
},
:
:
}
リリース情報DB
リリース情報DBをどこに持つかを記述する。
今回はMariaDBなので以下のように記述する。
"Dhcp4": {
:
:
"lease-database": {
// MariaDBなので"mysql"を指定
"type": "mysql",
// 先程作成したKea DHCP Server用データーベース
"name": "kea",
// 先程作成したKea DHCP Server用ユーザー
"user": "kea",
// 先程作成したKea DHCP Server用ユーザーのパスワード
"password": "P@ssword",
// MariaDBを実行しているホスト名
"host": "localhost",
// MariaDBの待受ポート番号
"port": 3306
},
:
:
}
ホスト予約情報DB
ホスト予約情報DBをどこに持つかを記述する。
今回はMariaDBなので以下のように記述する。
"Dhcp4": {
:
:
"hosts-database": {
// MariaDBなので"mysql"を指定
"type": "mysql",
// 先程作成したKea DHCP Server用データーベース
"name": "kea",
// 先程作成したKea DHCP Server用ユーザー
"user": "kea",
// 先程作成したKea DHCP Server用ユーザーのパスワード
"password": "P@ssword",
// MariaDBを実行しているホスト名
"host": "localhost",
// MariaDBの待受ポート番号
"port": 3306
},
:
:
}
オプションデーターの設定
DNSサーバーやドメイン等を指定する。
"Dhcp4": {
:
:
"option-data": [
{
// DNSサーバーのIPアドレス
"name": "domain-name-servers",
"data": "172.16.0.101, 172.16.0.102, 172.16.0.103"
},
{
// ドメイン名
"code": 15,
"data": "ad.inaho.space"
},
{
// 検索ドメイン
"name": "domain-search",
"data": "ad.inaho.space"
},
:
:
}
サブネットの設定
アドレスの範囲やDNSサーバー等を指定するサブネットを定義する。
サブネットの定義はのちにインストールするKeaKeeper
でも編集可能。
"Dhcp4": {
:
:
"subnet4": [
{
// ID(KeaKeeperで使うので番号を付けておく)
"id": 1,
// サブネット
"subnet": "172.16.0.0/16",
// DHCPによる割り当て範囲
"pools": [ { "pool": "172.16.200.1 - 172.16.200.254" } ],
"option-data": [
{
// デフォルトゲートウェイ
"name": "routers",
"data": "172.16.0.1"
}
],
}
],
:
:
}
Kea DHCPv6 Server
/etc/kea/kea-dhcp6.conf
を編集して設定を行う。
ネットワークインターフェース
使用するサーバーのネットワークインターフェース名を記述する。
"Dhcp6": {
:
:
"interfaces-config": {
// サーバーのネットワークインターフェース
"interfaces": [ "eth0" ]
},
:
:
}
リリース情報DB
リリース情報DBをどこに持つかを記述する。
今回はMariaDBなので以下のように記述する。
"Dhcp6": {
:
:
"lease-database": {
// MariaDBなので"mysql"を指定
"type": "mysql",
// 先程作成したKea DHCP Server用データーベース
"name": "kea",
// 先程作成したKea DHCP Server用ユーザー
"user": "kea",
// 先程作成したKea DHCP Server用ユーザーのパスワード
"password": "P@ssword",
// MariaDBを実行押しているホスト名
"host": "localhost",
// MariaDBの待受ポート番号
"port": 3306
},
:
:
}
ホスト予約情報DB
ホスト予約情報DBをどこに持つかを記述する。
今回はMariaDBなので以下のように記述する。
"Dhcp6": {
:
:
"hosts-database": {
// MariaDBなので"mysql"を指定
"type": "mysql",
// 先程作成したKea DHCP Server用データーベース
"name": "kea",
// 先程作成したKea DHCP Server用ユーザー
"user": "kea",
// 先程作成したKea DHCP Server用ユーザーのパスワード
"password": "P@ssword",
// MariaDBを実行押しているホスト名
"host": "localhost",
// MariaDBの待受ポート番号
"port": 3306
},
:
:
}
オプションデーターの設定
DNSサーバーやドメイン等を指定する。
"Dhcp6": {
:
:
"option-data": [
{
// DNSサーバー
"name": "dns-servers",
"data": "2001:db8:2::101, 2001:db8:2::102, 2001:db8:2::103"
},
:
:
}
サブネットの設定
アドレスの範囲やDNSサーバー等を指定するサブネットを定義する。
サブネットの定義はのちにインストールするKeaKeeper
でも編集可能。
"Dhcp6": {
:
:
"subnet6": [
{
// ID(KeaKeeperで使うので番号を付けておく)
"id": 1,
// サブネット
"subnet": "2001:db8:1::/64",
// DHCPによる割り当て範囲
"pools": [ { "pool": "2001:db8:1::/80" } ],
"option-data": [
{
// DNSサーバー
"name": "dns-servers",
"data": "2001:db8:2::101, 2001:db8:2::102, 2001:db8:2::103"
}
],
:
:
}
起動
systemctl
を用いてKea DHCP Serverの各サービスを起動する。
sudo systemctl start kea-dhcp4-server.service kea-dhcp6-server.service kea-ctrl-agent.service
システム起動時に自動起動を有効にする。
sudo systemctl enable kea-dhcp4-server.service kea-dhcp6-server.service kea-ctrl-agent.service
KeaKeeper
KeaKeeperはKea DHCP Serverの管理を行うWebアプリケーション。
前提バージョンは
- KeaKeeper : 1.03
です。
※※※ Kea DHCP Serverの2.0系に対応するにはKeaKeeperの修正が必要 ※※※
とりあえず自分で行った修正でホスト予約情報の登録がとりあえず動いているっぽいのでそれを使っています。
必要パッケージのインストール
KeaKeeperはPHPで動作するWebアプリケーションなのでApache2とPHPをインストールする。
sudo apt update && sudo apt install apache2 php php-curl php-mbstring php-pdo php-mysql
PHPの設定
/etc/php/7.4/apache2/php.ini
を編集してタイムゾーンの設定を行う。
:
:
[Date]
;date.timezone =
date.timezone = Asia/Tokyo
:
:
インストール
KeaKeeperはOSDNのプロジェクトページからダウンロード出来る。
ファイル名はkeakeeper-[バージョン].tar.gz
。
2021年2月3日現在の最新版は1.03なのでkeakeeper-1.03.tar.gz
。
ダウンロードしたアーカイブを/var/www/html
に展開する。
sudo tar xzf keakeeper-1.03.tar.gz -C /var/www/html
前処理
KeaKeeper関連ファイルの所有者変更
sudo chown -R www-data:www-data /var/www/html/keakeeper/
Kea DHCP Server関連ファイル所有者変更
sudo chown -R _kea:www-data /etc/kea/
sudo chmod -R 775 /etc/kea/
バックアップディレクトリー作成
sudo mkdir /etc/kea/backupdir
sudo chown -R _kea:www-data /etc/kea/backupdir
sudo chmod -R 775 /etc/kea/backupdir
設定
KeaKeeper
/var/www/html/keakeeper/config/application.ini
を編集して設定を行う。
[i18n]
7lang = 'ja_JP'
[conf]
pathdhcp4 = '/etc/kea/kea-dhcp4.conf'
pathdhcp6 = '/etc/kea/kea-dhcp6.conf'
[session]
timeout = 86400
cookie = 'PEnrargei019nrwu8'
path = '/'
domain = ''
secure = false
httponly = false
[search]
leasemax = 5
hostmax = 5
[db]
driver = 'mysql'
host = 'localhost'
port = 3306
database = 'kea'
user = 'kea'
password = 'P@ssword'
[log]
facility = 'local0'
prog = 'keakeeper'
[path]
login[] = '/keakeeper/'
login[] = '/keakeeper/index.php'
[api]
server = 'http://127.0.0.1:8000'
dhcpv4backup = '/etc/kea/backupdir/kea-dhcp4.conf.backup'
dhcpv6backup = '/etc/kea/backupdir/kea-dhcp6.conf.backup'
dhcpv4lock = '/etc/kea/backupdir/kea-dhcp4.conf.lock'
dhcpv6lock = '/etc/kea/backupdir/kea-dhcp6.conf.lock'
今回変更するのは[db]
セクションと[path]
セクションと[api]
セクション。
その他のセクションは必要に応じて変更する。
[db]
セクションはKea DHCP Server用の設定を使用する[path]
セクションはapache2の設定に合わせて変更する[api]
セクションはポート番号をKea Ctrl Agentの設定に合わせる
MariaDB
KeaKeeper用のテーブルを作成するSQLファイルを実行する。
mysql -u kea -p kea < /var/www/html/keakeeper/db/auth.sql
Apache2
今回はhttp://サーバーのIPアドレス/keakeeper/としてKeaKeeperを公開する。
そのため/etc/apache2/sites-available/keakeeper.conf
を以下のように作成する。
Alias /keakeeper /var/www/html/keakeeper/public
<Directory "/var/www/html/keakeeper/public">
require all granted
</Directory>
そしてa2ensite
でサイトを有効化する。
sudo a2ensite keakeeper
おわりに
今回Kea DHCP Serverの2.0系のセットアップをDebian 11で行ってみました。
KeaKeeperの修正が必要なのは予想外だったけど、PHP未経験者がソースを読んで「おそらくこうだろう」と思って修正したので、動いているけど危なっかしい状況です。
とりあえずこれでProxmoxVE上のLXCコンテナに移設できたので、必要に応じてマイグレーションしたりして柔軟に動かせそうです。
そのうちOpenMediaVaultのTFTPサーバーと連携してのPXEブートに挑戦しようと思います。
ところで一応動いているKeaKeeperの改造版はどうしよう…
テーブルの必須項目に適当に調べた結果、おそらくこうだろうという値を入れるようにしただけなので…(^^;