DHCPサーバーをローカルで立ち上げる場合、Linux上にISC DHCPやKea DHCPをインストールして運用することが多いかと思います。
今回はDHCPサーバーをコンテナ化してDocker上で動かし、ローカルネットワークにIPアドレスを配布できるようにします。
コンテナ化することで、使用するOSや環境ごとに微妙に異なる手順を統一して展開できたり、バックアップを取るのも設定ファイルだけで済んだり、あるいはマシンを変える場合も設定のみをtarで固めて、移行先のマシンで展開・起動するだけで済むなど、何かとメリットがあります。
今回使用するファイルはすべてgithubに置いてありますので、こちらを使用して進めていきます。
https://github.com/ytsurui/kea-dhcp4-docker-simple
前提条件
今回の記事は、下記のソフトウェアが事前にホスト上にインストールされていることを前提としています。
- docker-ce
- docker-compose
docker、docker-composeコマンドの実行には、インストール後に権限を触ってない場合は、root権限で実行しないとエラーが出るかと思います。
動作確認は、ubuntu server 20.04 x64で取っていますが、arm版のubuntuや、CentOSなど他の環境にdockerをインストールした環境でも動くと思います。
ファイルの準備
最初に、gitコマンドで上記リポジトリの内容をすべてローカルにクローンするか、あるいは下記に示すファイルのみをテキストレベルでコピーします。- gitコマンドを使用する場合
- ファイルをコピーする場合
- Dockerfile
- docker-compose.yaml
- conf/kea-dhcp4.conf
設定の修正
初期状態では、下記に示す設定となっています。
- DHCPリクエストを受け付けるネットワークインターフェイス名:
ens192 - IPアドレスの配布対象とするネットワーク: 192.168.4.0/24
- プール範囲: 192.168.4.11 - 192.168.4.200
- デフォルトゲートウェイ: 192.168.4.1
- DNSサーバー: 192.168.4.1
- ドメイン名: your-domain.local
配布対象のネットワークを増やす場合は、31行目から始まるsubnet4の配列に含まれている配布対象とするネットワーク、IPアドレス配布プール、デフォルトゲートウェイの固まりを増やしていけば幾らでも追加できます。
また、ローカルドメイン名などが不要な場合は、その項目を中括弧ごと消し込むことで配布されなくなります。
ネットワークインターフェイス名の確認
ネットワークインターフェイス名は、DHCPコンテナを動作させるホストマシンのネットワークインターフェイス名を指定します。
最近のLinux環境では、ip addr showで入れるとマシン上で使用可能なネットワークインターフェイス一覧が出てきます。
コンテナの起動
下記の順番でコマンドを実行し、DHCPコンテナイメージのビルド、DHCPコンテナの起動を行います。
docker-compose up -d
正しく起動できているかは、「ss -anu」を実行し、DHCPポート(UDP 67)が待ち受けを開始しているか見ることで確認が取れます。
コンテナ内部で動いているkea-dhcpの動作ログを見たい場合は、「docker-compose logs」で確認できます。
エラーで起動しない場合は、何か変なメッセージが出ているかと思います。
ファイアウォールの開放
firewalldで構成されている場合は、下記のコマンドを実行し、ポート開放を行います。
firewall-cmd --add-port 67/udp --permanent && firewall-cmd --reload