【RHEL9.2対応】CoreDNSをPodman(rootless)+systemdで構築する

DNSサーバーとして軽量かつ柔軟に使える「CoreDNS」
今回は、RHEL 9.2環境でCoreDNSをPodmanコンテナで構築し、systemd化して常駐サービス化する手順を紹介します。

以下の内容に沿って進めます。

  • CoreDNSのイメージ取得(pull)
  • Corefileとhostsファイルの準備
  • podman runでのCoreDNS起動
  • 動作確認(dig)
  • Podmanコンテナのsystemd化(永続運用)

目次

1. 事前準備

PodmanはRHEL9.2に標準搭載されていますが、未導入の場合は以下のコマンドでインストールしてください。

$ sudo dnf install -y podman





また、確認用にbind-utils(digコマンド含む)も入れておくと便利です。

$ sudo dnf install -y bind-utils






2. CoreDNSのイメージをpull

まずはCoreDNSのDockerイメージを取得します。

$ podman pull coredns/coredns:latest





podman imagesで確認して、イメージが取得できていればOKです。


3. Corefileとhostsファイルの準備

CoreDNSの設定は「Corefile」で行います。今回は /opt/coredns に設定ファイル類をまとめます。

$ sudo mkdir -p /opt/coredns
$ cd /opt/coredns





■ Corefile の例

$ sudo tee Corefile > /dev/null <

ポート制限に注意(53番ポートは非rootではバインド不可)
rootlessでは、1024未満のポートはバインドできません。
そのため、Corefileで指定するポートを :1053 などに変更する必要があります。

例:Corefile(rootless用)

■ hosts ファイルの例

$ sudo tee hosts > /dev/null <





この構成では、test.localdb.local のような名前解決をローカルhostsで処理し、それ以外のドメインは 8.8.8.8(Google DNS)へフォワードします。


4. PodmanでCoreDNSを起動

以下のようにCoreDNSコンテナを起動します。

$ sudo podman run -d \
–name coredns \
–network host \
-v /opt/coredns/Corefile:/Corefile:ro \
-v /opt/coredns/hosts:/etc/coredns/hosts:ro \
coredns/coredns:latest -conf /Corefile

rootlessの場合はポートマッピングも起動時に指定します。

podman run -d \
–name coredns \
-p 1053:1053/udp -p 1053:1053/tcp \
-v $HOME/coredns/Corefile:/Corefile:ro \
-v $HOME/coredns/hosts:/etc/coredns/hosts:ro \
coredns/coredns:latest -conf /Corefile

ポイントは以下の通り:

  • --network host:ホストのポート53を直接使う(NATなし)
  • -vで設定ファイルをコンテナにマウント
  • -confオプションでCorefileのパスを指定

起動後の確認
STATUSが「up」になっていることを確認します。

$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5f3c7b2e8a9 docker.io/coredns/coredns:latest -conf /Corefile 10 seconds ago Up 10 seconds ago coredns


5. 動作確認(dig)

別ターミナルで以下のように dig で名前解決を試してみます。

$ dig @127.0.0.1 test.local
text
コピーする
編集する
; <<>> DiG 9.16.23-RH <<>> @127.0.0.1 test.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;test.local. IN A ;; ANSWER SECTION: test.local. 0 IN A 10.1.1.100 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Jul 13 12:00:00 JST 2025 ;; MSG SIZE rcvd: 56


外部DNSへフォワードされる確認(Google DNS):

$ dig @127.0.0.1 www.google.com
text
コピーする
編集する
; <<>> DiG 9.16.23-RH <<>> @127.0.0.1 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 67890 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 300 IN A 142.250.196.100 ;; Query time: 15 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Jul 13 12:01:00 JST 2025 ;; MSG SIZE rcvd: 60


6. CoreDNSコンテナをsystemdで常駐化

Podmanの便利な機能として、コンテナをsystemdサービス化できます。

$ podman generate systemd –name coredns –files –restart-policy=always –container-prefix=coredns.service

このコマンドで container-coredns.service というsystemdユニットファイルが生成されます。
※ --container-prefix= を指定することで、サービス名が container-coredns.service ではなく coredns.service になります。

これで、カレントディレクトリに coredns.service が生成されます。
次にこのユニットファイルを、ユーザー用の systemd ディレクトリに移動します:

$ mkdir -p ~/.config/systemd/user
$ mv coredns.service ~/.config/systemd/user/

systemctl --user でサービス有効化・起動

$ systemctl –user daemon-reexec
$ systemctl –user enable –now coredns.service

サービスの起動状態を確認:

$ systemctl –user status coredns.service

再起動してもCoreDNSコンテナが自動起動されるようになりました。


7. 補足:ファイアウォールのポート確認

CoreDNSがポート53でリッスンするため、Firewalld設定を確認しておきましょう。

$ sudo firewall-cmd –add-port=53/udp –permanent
$ sudo firewall-cmd –add-port=53/tcp –permanent
$ sudo firewall-cmd –reload






まとめ

今回の記事では、以下のような流れでCoreDNSの構築を行いました:

  1. CoreDNSイメージのpull
  2. Corefile/hostsファイルの用意
  3. Podmanでコンテナ実行(host network)
  4. digで動作確認
  5. Podmanコンテナのsystemd常駐化

RHEL9.2+Podman環境は、今後主流になる可能性が高いため、systemd連携を含めた構成は特に実務に活かせます。


おまけ:ファイル構成まとめ

/opt/coredns/
├── Corefile # CoreDNS設定
└── hosts # ローカル名前解決


		
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次