#569 KVM環境での Rocky Linux を FreeIPA ドメインに参加させる手順:monitor と app 編
FreeIPAドメイン参加の技術レポート(monitor マシン・app マシン)
背景
社内検証環境として RHEL9 ホスト上に KVM 仮想環境を構築し、複数台の Rocky Linux 9 クローン VM(monitor、freeipa、bastion、app など)を展開した。これまでに router 役の rocky9 マシンで 10.10.0.0/24 と 10.20.0.0/24 のルーティングを構成し、freeipa マシンで FreeIPA サーバーと DNS サーバーを立ち上げている。今回の目的は、monitor マシン(10.10.0.10)とapp マシン(10.20.0.10)を FreeIPA ドメイン LAB.LOCAL に参加させ、内部 DNS/NTP 設定を統一することである。
初心者が理解できるように、各マシンの初期状態の確認、必要な設定変更、ドメイン参加操作、発生した問題と対処法を詳細に説明する。なお、NTP 設定では chrony を使用しており、Red Hat のガイドに従って FreeIPA サーバーを時刻源に設定した[1]。
1. monitor マシンのドメイン参加手順
1.1 初期状態の確認
virsh console で monitor に接続し、以下を確認した。
項目
確認コマンド
状態
備考
ホスト名
hostnamectl
monitor になっており FQDN ではなかった
FreeIPA 参加前に FQDN に変更する必要がある
ネットワーク設定
ip addr, ip route
10.10.0.10/24(enp7s0)と NAT 用 192.168.122.60/24(enp1s0)の2インターフェース
NAT 側がデフォルトゲートウェイになっていた
DNS/NTP
cat /etc/resolv.conf, cat /etc/chrony.conf
DNS は NAT 側の 192.168.122.1、NTP は pool 2.rocky.pool.ntp.org
FreeIPA サーバーを参照するよう変更が必要
IPA クライアント
rpm -q ipa-client
未インストール
インストールが必要
1.2 FQDN 設定と /etc/hosts の修正
1. hostnamectl set-hostname monitor.lab.local で FQDN に変更し、再起動して反映。
2. /etc/hosts に内部ホストの対応表を追記し、10.10.0.10 monitor.lab.local monitor を設定。
1.3 ネットワーク・DNS の調整
1. NAT 側インターフェースがデフォルトゲートウェイになっていたため、NetworkManager で enp1s0 を ipv4.never-default yes に設定。
2. 内部ネットワークインターフェース net10-monitor でゲートウェイをルータ 10.10.0.254 に設定し、DNS サーバーを FreeIPA サーバー(10.10.0.2)に変更。
3. インターフェースを down/up してルートを再構築。ip route で default via 10.10.0.254 dev enp7s0 となることを確認。
4. /etc/resolv.conf が自動生成されるため、NAT 側から提供される DNS を無視する設定 ipv4.ignore-auto-dns yes を実施。
1.4 NTP 設定の変更
chrony の設定ファイル /etc/chrony.conf を編集し、デフォルトの NTP プールをコメントアウトして、以下を追加した[1]。
server freeipa.lab.local iburst
サービスを再起動し、chronyc sources で FreeIPA サーバーが時刻源になっていること、timedatectl で同期状態が yes になっていることを確認した。
1.5 IPA クライアントインストールとドメイン参加
1. sudo dnf install -y ipa-client で必要なパッケージをインストール。
2. ipa-client-install を実行し、ドメイン名、サーバー名、レルム名を指定して参加を完了。途中で DNS 自動検出が失敗する旨の警告が出たため手動で進めた。admin アカウントのパスワードを入力し、mkhomedir オプションでホームディレクトリ自動作成を有効にした。
3. インストール直後、クライアント側では A/AAAA レコードや PTR レコードが FreeIPA DNS に存在しないというメッセージが表示された。kinit admin と ipa ping に成功したことを確認後、FreeIPA サーバーで DNS 設定を行った(後述)。
1.6 PTR レコード登録
monitor の逆引きゾーン 0.10.10.in-addr.arpa. に PTR レコードが無かったため、FreeIPA サーバーで以下を実行して追加した。
ipa dnsrecord-add 0.10.10.in-addr.arpa. 10 --ptr-rec monitor.lab.local.
登録後、dig -x 10.10.0.10 +short で monitor.lab.local. が返ることを確認。
1.7 テスト
· getent hosts, ping コマンドで内部・異セグメントホストへの疎通確認を行い問題なし。
· dig で外部ドメインも解決できることを確認し、curl で HTTPS 通信も成功。
2. app マシンのドメイン参加手順
2.1 初期状態の確認
項目
確認コマンド
状態
ホスト名
hostnamectl
app (FQDN 未設定)
IP アドレス
ip addr
10.20.0.10/24 (enp7s0) と 192.168.122.60/24 (enp1s0)
ルート
ip route
デフォルトゲートウェイが NAT 側 192.168.122.1
DNS/NTP
resolv.conf, chrony.conf
DNS は NAT 側、NTP は rocky.pool.ntp.org
IPA クライアント
rpm -q ipa-client
未インストール
2.2 ネットワークとホスト名の修正
1. hostnamectl set-hostname app.lab.local で FQDN を設定し、/etc/hosts に 10.20.0.10 app.lab.local app を追加。
2. NAT 側インターフェース enp1s0 を ipv4.never-default yes・ipv4.ignore-auto-dns yes に設定。
3. 内部ネットワーク net20-app でゲートウェイを 10.20.0.254、DNS サーバーを 10.10.0.2(FreeIPA)、DNS サフィックスを lab.local に設定し、インターフェースを再起動。
4. /etc/resolv.conf を確認し、nameserver 10.10.0.2 のみになったことを確認。
2.3 NTP 設定の変更
monitor と同様に /etc/chrony.conf に server freeipa.lab.local iburst を追加し、chronyd を再起動。chronyc sources で FreeIPA サーバーから同期していることを確認。
2.4 FreeIPA DNS の再帰クエリー設定
最初の試行では、app から外部ドメイン(google.com や mirrors.rockylinux.org)の名前解決が失敗した。これは FreeIPA 統合 DNS のデフォルト設定では再帰クエリーを同一ネットワークのクライアントにのみ許可しており、別セグメントからの再帰クエリーは REFUSED になるためである[2][3]。解決のため、FreeIPA サーバーの BIND 設定に trusted_network ACL を作成し、10.20.0.0/24 を追加した。
/etc/named/ipa-options-ext.conf
allow-recursion { trusted_network; };
allow-query-cache { trusted_network; };
/etc/named/ipa-ext.conf
acl "trusted_network" {
localnets;
localhost;
10.10.0.0/24;
10.20.0.0/24;
};
設定後、named サービスを再起動し、app から外部ドメインが解決できることを確認。Red Hat のナレッジベースではこの手順が再帰クエリー拒否の解決策として紹介されている[4]。
2.5 ipa-client のインストールと参加
1. dnf install -y ipa-client で必要なパッケージをインストール。DNS フォワーダー設定を修正したことで外部リポジトリからパッケージが取得できた。
2. ipa-client-install を実行し、Monitor と同様に手動で値を指定してドメイン参加を完了。--hostname=app.lab.local、--mkhomedir を指定した。Chrony の再設定は既に行っていたためそのまま no を選択。
3. ipa-client-install 完了時に app の A/AAAA レコードと PTR レコードが無いというメッセージが表示された。A レコードは自動で追加されていたが、PTR レコードの登録先である逆引きゾーン 0.20.10.in-addr.arpa. が未作成だったためエラーとなっていた。
2.6 逆引きゾーンと PTR レコードの追加
1. FreeIPA サーバーで 10.20.0.0/24 用の逆引きゾーンを作成する。--name-server には絶対名(末尾にドット)を指定する必要がある。
ipa dnszone-add 0.20.10.in-addr.arpa. --name-server=freeipa.lab.local. --admin-email=hostmaster@lab.local
--admin-email は省略可能で、指定しなければ root アカウントが使用される[5]。
1. ゾーン作成後、PTR レコードを追加する。
ipa dnsrecord-add 0.20.10.in-addr.arpa. 10 --ptr-rec=app.lab.local.
登録後に dig -x 10.20.0.10 +short で app.lab.local. が返ることを確認した。
2.7 最終確認
· kinit admin と ipa ping に成功し、Kerberos 認証が機能していることを確認。
· getent hosts や ping で内部各ホストへの名前解決と疎通を確認し、外部サイトへの curl も成功。
· app のドメイン参加が monitor と同様に完了した。
3. 課題と解決策のまとめ
課題
発生状況
解決方法
NAT インターフェースがデフォルトゲートウェイに設定されていた
monitor/app いずれも初期状態では enp1s0 (192.168.122.0/24) が default route になっており、内部ルーティングが機能しなかった。
NetworkManager で NAT 側の ipv4.never-default を有効にし、内部インターフェースのゲートウェイをルータ (10.10.0.254 / 10.20.0.254) に設定して対処。
FreeIPA DNS が外部ドメインの再帰クエリーを拒否
app マシンが FreeIPA DNS を参照するようにした後、外部サイトの名前解決ができず dnf が失敗。
FreeIPA サーバーの BIND 設定に trusted_network ACL を追加し、allow-recursion と allow-query-cache をその ACL に設定[4][3]。
逆引きゾーンが存在せず PTR レコードを登録できない
app の ipa-client-install 実行時に PTR レコードが無いとの警告が出た。逆引きゾーンも存在しないため ipa dnsrecord-add がエラーになった。
ipa dnszone-add 0.20.10.in-addr.arpa. コマンドで逆引きゾーンを作成し、PTR レコードを追加。--name-server には絶対名を指定し、--admin-email は省略可能[5]。
4. まとめと今後の展望
本作業では、monitor マシンと app マシンを FreeIPA ドメイン LAB.LOCAL に参加させるために必要な一連の手順を確認し、具体的に実行した。主なポイントは以下のとおりである。
· FQDN と /etc/hosts の整備:
FreeIPA の Kerberos 認証と DNS 連携には正しい FQDN が必須であり、 /etc/hosts に短縮名・FQDN・IP のマッピングを正確に記載した。
· ネットワークと DNS/NTP の統一:
内部ルータをデフォルトゲートウェイに設定し、DNS サーバーを FreeIPA サーバーに統一した。chrony で NTP サーバーも FreeIPA サーバーに合わせ、システム時刻の同期を保証した[1]。
· IPA クライアントの導入:
ipa-client-install を用いてドメインに参加し、Kerberos 認証や SSSD 設定を自動化した。
· DNS 再帰設定と逆引きゾーンの管理:
FreeIPA DNS の再帰クエリー制限に対応するため BIND の ACL 設定を変更し、必要な逆引きゾーンを追加した[4][3]。
これにより monitor/app マシンは FreeIPA ドメインに参加し、中央集権的な認証・DNS 管理を利用できるようになった。今後はアプリケーションサーバーやサービスをこのドメインで統合管理し、必要に応じて ACL や自動証明書配布など FreeIPA の機能を活用していく予定である。
[1] How to configure chrony as an NTP client or server in Linux
https://www.redhat.com/en/blog/chrony-time-services-linux
[2] [3] [4] FreeIPA (IdM) integrated DNS server denies recursive query from client networks - Red Hat Customer Portal
https://access.redhat.com/solutions/5753431
[5] 17.6. Managing DNS Zone Entries | Identity Management Guide | Red Hat Enterprise Linux | 6 | Red Hat Documentation
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/identity_management_guide/managing-dnszone-entries
