いなほちゅんのひとりごとブログ版

私のメモ帳を公開してみる。

Kea DHCP Server 2.0 with KeaKeeper on Debian 11

Kea DHCP Server 2.0 with KeaKeeper on Debian 11
日付
カテゴリー
シェア

はじめに

しばらく前に自宅の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 PGcURLがインストールされていないのでインストールする。

sudo apt update && sudo apt install gpg curl

リポジトリー登録

cloudsmithのリポジトリーにセットアップスクリプトがあるのでそれを実行する。

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の改造版はどうしよう…  

テーブルの必須項目に適当に調べた結果、おそらくこうだろうという値を入れるようにしただけなので…(^^;

アーカイブ

タグ

ページの先頭へ