LoginSignup
1
1

Kea DHCP+MariadbをDockerで構築する

Last updated at Posted at 2023-08-01

目的

isc-dhcp-serverは死ぬらしい。そこで、Keaで構築していく。

github配置

ディレクトリ構成

image.png

構築

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;

確認

image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1