目的
isc-dhcp-serverは死ぬらしい。そこで、Keaで構築していく。
github配置
ディレクトリ構成
構築
Dockerfile
FROM almalinux:latest
RUN dnf -y update && dnf -y install epel-release && dnf -y install kea
RUN dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
RUN dnf -y install mysql mysql-community-client
ADD kea-dhcp4.conf /etc/kea/kea-dhcp4.conf
ADD start.sh /etc/kea/start.sh
RUN mkdir -p /var/run/kea/ && touch /var/run/kea/logger_lockfile
ENTRYPOINT ["/etc/kea/start.sh"]
docker-compose.yml
version: "3.9"
services:
kea:
build: .
image: keadhcp:1.0.0
container_name: kea
restart: always
tty: true
depends_on:
- kea-db
networks:
net1:
vlan0:
ipv4_address: 172.24.20.211
kea-db:
container_name: kea-db
restart: always
build:
context: ./db
environment:
MARIADB_ROOT_PASSWORD: kea
MARIADB_DATABASE: kea
MARIADB_USER: kea
MARIADB_PASSWORD: kea
TZ: 'Asia/Tokyo'
volumes:
- ./db/data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
net1:
networks:
net1:
vlan0:
name: vlan0
driver: macvlan
driver_opts:
parent: ens3
ipam:
config:
- subnet: 172.24.20.0/24
gateway: 172.24.20.254
start.sh
#!/bin/bash
sleep 10
kea-admin db-init mysql -u kea -p kea -n kea -h kea-db
/usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
kea-dhcp4.conf
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth1" ] // ココにインターフェース名を追加
},
"control-socket": {
"socket-type": "unix",
"socket-name": "/tmp/kea-dhcp4-ctrl.sock"
},
"lease-database": {
"type": "mysql",
"name": "kea",
"user": "kea",
"password": "kea",
"host": "kea-db",
"port": 3306
},
"hosts-database": {
"type": "mysql",
"name": "kea",
"user": "kea",
"password": "kea",
"host": "kea-db",
"port": 3306
},
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"flush-reclaimed-timer-wait-time": 25,
"hold-reclaimed-time": 3600,
"max-reclaim-leases": 100,
"max-reclaim-time": 250,
"unwarned-reclaim-cycles": 5
},
"renew-timer": 900,
"rebind-timer": 1800,
"valid-lifetime": 3600,
"option-data": [
{
"name": "domain-name-servers",
"data": "172.24.2.51, 8.8.4.4" // DNSサーバのIPアドレスへ変更
},
{
"name": "default-ip-ttl",
"data": "0xf0"
}
],
"subnet4": [
{
"subnet": "172.24.20.0/24", // サブネットを変更
"pools": [ { "pool": "172.24.20.160 - 172.24.20.200" } ], // DHCPプ ールの変更
"option-data": [
{
"name": "routers",
"data": "172.24.20.254" // デフォルトゲートウェイの変更
}
],
}
],
"loggers": [{
"name": "kea-dhcp4",
"output_options": [
{
"output": "stdout",
"pattern": "%-5p %m\n"
}
],
"severity": "INFO",
"debuglevel": 0
}]
}
}
db/Dokerfile
FROM mariadb:latest
RUN touch /var/log/mysql/mysqld.log
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD sql.sql /docker-entrypoint-initdb.d
RUN chmod 644 /etc/mysql/my.cnf
db/my.cnf
[mysqld]
# 文字コード、整合順序の設定
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
db/sql.sql
GRANT ALL PRIVILEGES ON kea.* TO 'kea'@'localhost' IDENTIFIED BY 'kea';
FLUSH PRIVILEGES;
解説
ネットワークの設定
今回、dbとdhcpサーバー間をdocker-composeの名前解決で行いたかったので、ネットワークの設定はnetwork_mode:host
ではなく、macvlan
である
以下の様に設定する事によって、Dockerホストと同じIP空間を用いる事が出来る。
docker-compose.yml
networks:
net1:
vlan0:
ipv4_address: 172.24.20.211
起動時の挙動
depends_on
で起動順の指定はしているが、sleep 10
を入れている。kea-admin
コマンドを用いる事によってデータベースの作成を行う。
#!/bin/bash
sleep 10
kea-admin db-init mysql -u kea -p kea -n kea -h kea-db
/usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
データベースの設定
データベース、ユーザーの作成は、docker-compose内で行っているので、sqlファイルでは、作成したユーザーに権限付与を行っている。
GRANT ALL PRIVILEGES ON kea.* TO 'kea'@'localhost' IDENTIFIED BY 'kea';
FLUSH PRIVILEGES;