# Introduction

Kea is the next generation of DHCP software developed by ISC. It supports both DHCPv4 and DHCPv6 protocols along with their extensions, e.g. prefix delegation and dynamic updates to DNS.

Kea was initially developed as a part of the BIND 10 framework (). In early 2014, ISC made the decision to discontinue active development of BIND 10 and continue development of Kea as standalone DHCP software. As a result, the components and libraries related to the BIND10 framework and DNS are going to be removed from the Kea source tree over time. In order to remove the dependency on Python 3, the BIND 10 framework will be replaced by the server startup and configuration mechanisms written in C++.

Kea was implemented in the BIND 10 framework and to certain extent still depends on various BIND 10 libraries. It also requires the BIND 10 framework to run, because the BIND 10 configuration mechanisms are used to configure Kea. As a result, this document still refers to BIND 10 in many paragraphs. The term "BIND 10" in the context of this document means "BIND 10 libraries and applications which are necessary for Kea to run and configure". The term "Kea" means "the collection of binaries and libraries which, as a whole, implement the DHCP protocols".

This guide covers Kea version &__VERSION__;.

## Supported Platforms

Kea is officially supported on RedHat Enterprise Linux, CentOS, Fedora and FreeBSD systems. It is also likely to work on many other platforms: builds have been tested on (in no particular order) Debian GNU/Linux 6 and unstable, Ubuntu 9.10, NetBSD 5, Solaris 10 and 11, FreeBSD 7 and 8, CentOS Linux 5.3, MacOS 10.6 and 10.7, and OpenBSD 5.1. Non supported systems (especially non-Linux) are likely to have issues with directly connected DHCPv4 clients.

There are currently no plans to port Kea to Windows platforms.

## Required Software at Run-time

Running Kea uses various extra software which may not be provided in the default installation of some operating systems, nor in the standard package collections. You may need to install this required software separately. (For the build requirements, also see .)

- Kea was developed as a collection of applications within BIND 10 framework and it still relies on the remaining parts of this framework. In particular, the servers' configuration and startup are still facilitated by the modules which originate in BIND 10. These modules require at least Python 3.1 to run. They also work with Python 3.2, 3.3 or 3.4 (). The dependency on Python will be removed once replacement configuration and startup mechanisms are developed and released as Kea 0.9. At this point Kea will be written in pure C++.

- Kea supports two crypto libraries: Botan and OpenSSL. Only one of them is required during compilation. Kea uses the Botan crypto library for C++ (), version 1.8 or later. As an alternative to Botan, Kea can use the OpenSSL crypto library (). It requires a version with SHA-2 support.

- Kea uses the log4cplus C++ logging library (). It requires at least log4cplus version 1.0.3.

- In order to store lease information in a MySQL database, Kea requires MySQL headers and libraries. This is an optional dependency in that Kea can be built without MySQL support.

- In order to store lease information in a PostgreSQL database, Kea requires PostgreSQL headers and libraries. This is an optional dependency in that Kea can be built without PostgreSQL support.

## Starting and Stopping the Server

Kea is modular. Part of this modularity is accomplished using multiple cooperating processes which, together, provide the server functionality.

At first, running many different processes may seem confusing. However, these processes are started by running a single command, `bind10`. This command starts a master process, `b10-init`, which will start other required processes and other processes when configured. The processes that may be started have names starting with "kea-", including:

- `b10-cfgmgr` &mdash; Configuration manager. This process maintains all of the configuration for BIND 10.

- `b10-cmdctl` &mdash; Command and control service. This process allows external control of the BIND 10 system.

- `kea-dhcp4` &mdash; DHCPv4 server process. This process responds to DHCPv4 queries from clients.

- `kea-dhcp6` &mdash; DHCPv6 server process. This process responds to DHCPv6 queries from clients.

- `kea-dhcp-ddns` &mdash; DHCP-DDNS process. This process acts as an intermediary between the DHCP servers and DNS server. It receives name update requests from the DHCP servers and sends DNS Update messages to the DNS servers.

- `b10-msgq` &mdash; Message bus daemon. This process coordinates communication between all of the other BIND 10 processes.

- `kea-sockcreator` &mdash; Socket creator daemon. This process creates sockets used by network-listening BIND 10 processes.

- `b10-stats` &mdash; Statistics collection daemon. This process collects and reports statistics data.

- `b10-stats-httpd` &mdash; HTTP server for statistics reporting. This process reports statistics data in XML format over HTTP.

These do not need to be manually started independently.

## Managing BIND 10

Once BIND 10 is running, a few commands are used to interact directly with the system:

- `bindctl` &mdash; Interactive administration interface. This is a low-level command-line tool which allows a developer or an experienced administrator to control Kea.

- `b10-cmdctl-usermgr` &mdash; User access control. This tool allows an administrator to authorize additional users to manage Kea.

The tools and modules are covered in full detail in this guide. In addition, manual pages are also provided in the default installation.

BIND 10 also provides libraries and programmer interfaces for C++ and Python for the message bus and configuration backend, and, of course, DHCP. These include detailed developer documentation and code examples.