KEA-DHCPの構築
ISC-DHCPからKEA-DHCPに移行した際にサーバ構築を行いましたので、 構築手順をまとめます。今回の移行に至った経緯と現状の懸念事項は、以下の通りです。
採用理由
懸念事項
- DHCPフェイルオーバに未対応(RFC3074相当)
参考
- Facebook ではデータセンターにおいて Kea DHCP サーバーをどのように活用しているか?
- ISC、dhcpd やめるってよ - 次世代 ISC DHCP サーバー Kea 導入・設定ガイド
公式HP Kea DHCP server | Internet Systems Consortium
必要なもの
- CentOS7.3 x 1
- VMware
構成
KEAのバックエンドにするデータベースは以下の3種類から選べますが、今回はPostgreSQLを選択しました。
- mysql
- PostgreSQL
- Cassandra
- memfile
今回の作業は、以下のバージョンで構築を進めたいと思います。
- kea-1.2.0
- postgresql 9.6.4
PostgreSQLインストール
まずは、KEA-DHCPのリース情報、設定を管理するためのデータベースを構築していきます。
事前にデータベースのソースインストールに必要なモジュールをインストールします。
# required libraries install $ yum install boost boost-devel gcc gcc-c++ openssl-devel readline-devel -y $ yum install epel-release -y $ yum --enablerepo=epel install log4cplus -y $ yum --enablerepo=epel install log4cplus-devel -y
次に、PostgreSQLのインストールを行います。 今回は、現時点の最新stableである9.6.4を利用します。
$ wget https://ftp.postgresql.org/pub/source/v9.6.4/postgresql-9.6.4.tar.gz $ tar xvzf postgresql-9.6.4.tar.gz $ cd postgresql-9.6.4 $ ./configure $ gmake && make install $ useradd -d /usr/local/pgsql pgsql $ passwd pgsql #任意のパスワードを設定します。 $ su - pgsql $ initdb -D /usr/local/pgsql/data --no-locale
起動時に必要となるpostgresqlの環境変数を定義するファイルを以下の内容で作成する。
$ vim /etc/sysconfig/postgresql
POSTGRES_HOME=/usr/local/pgsql PGLIB=$POSTGRES_HOME/lib PGDATA=$POSTGRES_HOME/data
次に、postgresqlの起動スクリプトを定義して、systemctlに登録する。
$ vim /usr/lib/systemd/system/postgresql.service
[Unit] Description=PostgreSQL database server After=network.target [Service] Type=forking User=pgsql OOMScoreAdjust=-1000 EnvironmentFile=/etc/sysconfig/postgresql ExecStart=/usr/local/pgsql/bin/pg_ctl -w -D /usr/local/pgsql/data start ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data stop -m fast TimeoutSec=300 [Install] WantedBy=multi-user.target
# localhostからの接続をパスワード認証で行うように設定 $ echo “local kea_db kea password” >> /usr/local/pgsql/data/pg_hba.conf $ echo “host kea_db kea 127.0.0.1/32 password” >> /usr/local/pgsql/data/pg_hba.conf # postgresqlの自動起動を有効にする $ systemctl enable postgresql # postgresqlを起動する $ systemctl start postgresql
postgresqlのdynamicライブラリを読み込む設定ファイルを作成して、共有ライブラリを最新にする。
$ echo “/usr/local/pgsql/lib” > /etc/ld.so.conf.d/pgsql.conf $ ldconfig
ldconfigについては、以下を参考にして下さい。
KEA-DHCPのインストール
$ wget https://www.isc.org/downloads/file/kea-1-2-0/?version=tar-gz -O kea-1.2.0.tgz $ tar xvzf kea-1.2.0.tgz $ cd kea-1.2.0 $ ./configure --with-dhcp-pgsql=/usr/local/pgsql/bin/pg_config --with-log4cplus $ make $ make install $ ldconfig
初期データの設定
$ su - pgsql $ psql postgres postgres=# CREATE USER kea WITH PASSWORD 'kea'; postgres=# CREATE DATABASE kea_db; postgres=# GRANT ALL PRIVILEGES ON DATABASE kea_db TO kea; postgres=# \q $ exit # KEA初期データを投入する $ kea-admin lease-init pgsql -u kea -p kea -n kea_db
KEA-DHCPの設定および起動
PostgreSQLをバックエンドに設定して、KEA-DHCPを起動する。
デフォルトから変更する箇所のみを抜粋しています。
$ vim /usr/local/etc/kea/keactrl.conf
# Start DHCPv4 server? dhcp4=yes # Start DHCPv6 server? dhcp6=no # DHCPv6を無効化 # Start DHCP DDNS server? dhcp_ddns=no # DDNSを無効化 # Be verbose? kea_verbose=no
$ vim /usr/local/etc/kea/kea.conf
"Dhcp4": { "interfaces-config": { "interfaces": [ "ens3" ] }, "control-socket": { "socket-type": "unix", "socket-name": "/tmp/kea-dhcp4-ctrl.sock" }, "lease-database": { "type": "postgresql", "persist": true, "lfc-interval": 1800, "name": "kea_db", "user": "kea", "password": "kea", "host": "", "connect-timeout": 5, "port": 5432 }, "hosts-database": { "type": "postgresql", "name": "kea_db", "user": "kea", "password": "kea", "host": "localhost", "port": 5432 }, "subnet4": [ { "subnet": "192.168.32.0/24", "pools": [ { "pool": "192.168.32.30 - 192.168.32.200" } ], "option-data": [ { "name": "routers", "data": "192.168.32.1" } ], "Logging": { "loggers": [ { "name": "kea-dhcp4", "output_options": [ { "output": "/var/log/kea-dhcp4.log"
$ keactrl start $ keactrl status DHCPv4 server: active # activeになることを確認 DHCPv6 server: inactive DHCP DDNS: active Kea configuration file: /usr/local/etc/kea/kea.conf keactrl configuration file: /usr/local/etc/kea/keactrl.conf
DHCP払出の動作確認
今回は、ネットワーク内でiPhoneを接続しIPアドレスの割当試験を行った。
払出の状況は、以下のログファイルとDBの内容から確認ができる。
$ tail -f /var/log/kea-dhcp4.log 2017-09-01 04:06:40.785 INFO [kea-dhcp4.leases/12235] DHCP4_LEASE_ADVERT [hwtype=1 9c:04:eb:aa:aa:aa], cid=[01:9c:04:eb:aa:aa:aa], tid=0xf59403a9: lease 192.168.32.30 will be advertised 2017-09-01 04:06:41.916 INFO [kea-dhcp4.leases/12235] DHCP4_LEASE_ALLOC [hwtype=1 9c:04:eb:aa:aa:aa], cid=[01:9c:04:eb:aa:aa:aa], tid=0xf59403a9: lease 192.168.32.30 has been allocated 2017-09-01 04:06:50.207 INFO [kea-dhcp4.leases/12235] DHCP4_LEASE_ADVERT [hwtype=1 9c:04:eb:aa:aa:aa], cid=[01:9c:04:eb:aa:aa:aa], tid=0xf59403aa: lease 192.168.32.30 will be advertised 2017-09-01 04:06:51.236 INFO [kea-dhcp4.leases/12235] DHCP4_LEASE_ALLOC [hwtype=1 9c:04:eb:aa:aa:aa], cid=[01:9c:04:eb:aa:aa:aa], tid=0xf59403aa: lease 192.168.32.30 has been allocated 2017-09-01 04:06:53.076 INFO [kea-dhcp4.leases/12235] DHCP4_DECLINE_LEASE Received DHCPDECLINE for addr 192.168.32.30 from client [hwtype=1 9c:04:eb:aa:aa:aa], cid=[01:9c:04:eb:aa:aa:aa], tid=0x0. The lease will be unavailable for 86400 seconds.
バックエンドに指定したkea_db内のlease4テーブルから、払出を行った端末のIPアドレスやリース期間を確認することが出来る。
kea_db=> SELECT '0.0.0.0'::inet + address as ip_address, encode(hwaddr, 'hex') as hwaddr_enc, lease4.* FROM lease4; ip_address | hwaddr_enc | address | hwaddr | client_id | valid_lifetime | expire | subnet_id | fqdn_fwd | fqdn_rev | hostname | state ---------------+--------------+------------+----------------+------------------+----------------+------------------------+-----------+----------+----------+-----------------+------- 192.168.32.30 | | 3232243742 | \x | \x | 86400 | 2017-09-02 04:06:53+09 | 1 | f | f | | 1 192.168.32.31 | 9c04eb32100f | 3232243743 | \x9c04eb32100f | \x019c04eb32100f | 3600 | 2017-09-01 05:07:04+09 | 1 | t | t | XXXXnoiPhone | 0
まとめ
今回は、取り急ぎKEA-DHCPの構築のみを行いました。
KEAはフックを使って外部システムとの繋ぎ込みも出来るようなので、今後はフック開発にも着手しようと思います。