管理サーバ構築 1(chrony、named)

3層Webシステム

構成概要

管理サーバを構築してNTPサーバ、DNSサーバ、NFSサーバ、監視サーバの各機能をシステムに提供します。管理サーバは2台(prsmg01、prsmg02)で冗長化またはH/A構成によって各機能の可用性を確保します。

ポートグループの作成

以下の設定で管理サーバのクラスタ用ポートグループを作成します。

設定項目設定値
名前Production MG Prv Network
VLAN ID10
仮想スイッチvSwitchp3

【ポートグループ作成手順】

No.操作
1ESXiコンソールの画面左の「ネットワーク」をクリック → ネットワーク管理画面表示
2「ポートグループ」タブ – 「ポートグループの追加」をクリック → ポートグループ作成画面表示
3以下の通り設定
 名前:Production MG Prv Network
 VLAN ID:10
 仮想スイッチ:vSwitchp3
4「追加」をクリック → ポートグループ作成画面終了
5ネットワーク管理画面・ポートグループ一覧に作成したポートグループが追加されていることを確認

OSインストール・メディアの入手

Red Hatのダウンロード・ページからRed Hat Enterprise Linux 9.5インストール・メディアを入手してESXiにアップロードします。

RHELダウンロード

管理サーバ構築(初期構築)

サーバ初期構築

以下の設定で仮想マシンを2台作成してOSインストール、サーバ初期構築を行います。

仮想マシン作成

設定項目管理サーバ#1管理サーバ#2
仮想マシン名prsmg01prsmg02
CPU22
メモリ4 GB4 GB
ハードディスク 1(内蔵HDD)100 GB(Thin Provisioning)100 GB(Thin Provisioning)
ネットワーク アダプタ 1Production MG Pub Metwork
CD/DVD メディア[Upload Directory]/rhel-9.5-x86_64-dvd.isor[Upload Directory]/rhel-9.5-x86_64-dvd.iso

OSインストール

設定項目管理サーバ#1管理サーバ#2
ホスト名prsmg01.exsample.lanprsmg01.exsample.lan
IPアドレス172.16.10.11172.16.10.12

サーバ初期構築

chrony設定

chrony.conf編集

/etc/chrony.confを編集して上位NTPサーバとNTPクライアントを設定します。

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
vi /etc/chrony.conf

【設定箇所】
(3行目)
#pool 2.rhel.pool.ntp.org iburst # デフォルトのタイムサーバ指定をコメントアウト
server 172.16.1.11 iburst # 追加(ESXiゲートウェイ#1をタイムサーバに指定)
server 172.16.1.12 iburst prefer # 追加(ESXiゲートウェイ#2をタイムサーバ(優先)に指定)

(28行目付近)
#allow 192.168.0.0/16
allow 172.16.10.0/24 # 追加(本番サイト内部からの時刻問合せを許可)
allow 172.16.20.0/24 # 追加(DRサイト内部からの時刻問合せを許可)

(33行目付近)
#local stratum 10
local stratum 3   # 追加(上位タイムサーバと時刻同期できない場合に自身をstratum 3と定義)

chronyd再起動/時刻同期確認

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# chronyd.service再起動
systemctl restart chronyd.service

# 時刻同期確認
chronyc sources

→ 「Name/IP address」に172.16.1.11、172.16.1.12が表示され172.16.1.12のMSが"^*"となっていることを確認

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsmg01 ~]# systemctl restart chronyd.service
[root@prsmg01 ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 172.16.1.11 2 6 17 17 +696us[ +696us] +/- 4080us
^* 172.16.1.12 2 6 17 17 -4056ns[-7291ns] +/- 3872us
[root@prsmg01 ~]#

NTPサービス許可

管理サーバ#1、管理サーバ#2のfirewalldサービス許可リストにntpサービスを追加します。

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# デフォルトゾーンに関連する情報をすべて表示
firewall-cmd --list-all
→ servicesにntpが含まれていないことを確認

# firewalldのサービス許可リストにntpサービスを(永続的に)追加
firewall-cmd --add-service=ntp --permanent

# 設定を再ロード
firewall-cmd --reload

firewall-cmd --list-all
→ servicesにntpが追加されたことを確認

ローカル・リポジトリ追加

インターネットへのゲートウェイとなっている物理ルータにはESXi内部への経路情報を設定していないため、システム内のサーバは基本的にインターネットに接続できません。つまりdnf(yum)を使用してパッケージをインストールすることもできないわけですが、これでは構築に支障をきたします。そこでインストールメディアを使用したローカルリポジトリを追加します。

repoファイル作成

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
cat > /etc/yum.repos.d/RHEL-DVD.repo <<EOF
[ISO-Base]
name=RHEL-DVD-Base
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1

[ISO-Appstrem]
name=RHEL-DVD-AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1
EOF

DVDマウント用シェル作成

RHEL-DVD.repo作成後は/mnt/cdromディレクトリを作成してインストール・メディア(DVD)をマウントすればdnfでパッケージをインストールすることが可能になります。

DVDのマウントコマンドを毎回打つのは少し手間なので(正しくは毎回ファイルシステム・タイプのiso9660を度忘れするので)ついでにDVDマウント専用のシェルも作成します。

シェル作成
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
vi /usr/local/bin/dvdmount


-----------------------------------------------------------------------------
【/usr/local/bin/dvdmountの内容】
-----------------------------------------------------------------------------
#!/bin/bash
if [ ! -d /mnt/cdrom ] ; then
mkdir /mnt/cdrom
fi

if [ `mount | grep -c "/mnt/cdrom"` -ne 0 ] ; then
echo "The DVD is already mounted."
exit
fi

mount -t iso9660 /dev/cdrom /mnt/cdrom

exit
DVDマウント
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# dvdmountに実行権限を追加
chmod u+x /usr/local/bin/dvdmount

# DVDマウント実行
dvdmount
→ "mount: /mnt/cdrom: 警告: ソースは書き込み禁止です、読み込み専用でマウントします."
or"The DVD is already mounted."と表示されればOK

リポジトリ確認

DVDをマウントした状態でリポジトリ・リストを出力します。DVDのリポジトリ・リストが表示されればOKです。

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
dnf repolist


-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsmg01 ~]# dnf repolist
サブスクリプション管理リポジトリーを更新しています。
コンシューマー識別子を読み込めません
This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.
repo id repo の名前
ISO-Appstrem RHEL-DVD-AppStream
ISO-Base RHEL-DVD-Base
[root@prsmg01 ~]

hostsファイルの設定

管理サーバ#1の/etc/hostsファイルを編集して管理サーバ#2に転送します。

【prsmg01で実行】
-----------------------------------------------------------------------------
# /etc/hosts編集
vi /etc/hosts

# 管理サーバ#2に転送
scp /etc/hosts prsmg02:/etc/

-----------------------------------------------------------------------------
【編集した/etc/hostsの内容】
-----------------------------------------------------------------------------
127.0.0.1 localhost localhost.landomain localhost4 localhost4.landomain4
::1 localhost localhost.landomain localhost6 localhost6.landomain6
172.16.10.10 prsmg00.exsample.lan prsmg00
172.16.10.11 prsmg01.exsample.lan prsmg01
172.16.10.12 prsmg02.exsample.lan prsmg02

named(BIND9)構築

named(BIND9)をインストールしてDNSサーバを構築します。

bind-chrootインストール

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
dnf -y install bind bind-chroot
【bind-chroot
Red Hat Enterprise Linux 9 でネットワークインフラストラクチャーサービスを管理するためのガイドより
管理者は、change-root 機能を使用して、プロセスとそのサブプロセスのルートディレクトリーが / ディレクトリーとは異なるものであることを定義できます。named-chroot サービスを開始すると、BIND はそのルートディレクトリーを /var/named/chroot/ に切り替えます。その結果、サービスは mount --bind コマンドを使用して、/etc/named-chroot.files にリストされているファイルおよびディレクトリーを /var/named/chroot/ で使用できるようにし、プロセスは /var/named/chroot/ 以外のファイルにアクセスできません。

プライマリDNSサーバ(管理サーバ#1)構成

named.conf編集
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /etc/named.conf

-----------------------------------------------------------------------------
【/etc/named.confの内容】
-----------------------------------------------------------------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

acl "internalnet" {
172.16.10.0/24;
};


options {
listen-on port 53 { 172.16.10.11; };
//listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { internalnet; localhost; };

/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

forwarders {
172.16.10.254;
};


forward only;

allow-recursion {
172.16.10.0/24;
};


dnssec-validation no;

managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";

allow-transfer {
172.16.10.12;
};


/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

// Production site Zone 
zone "exsample.lan" IN {
type master;
file "exsample.foward.db";
};

zone "10.16.172.in-addr.arpa" IN {
type master;
file "10.16.172.in-addr.arpa.rev";
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
設定項目説明
aclアクセス制御に使用する、IP アドレスの一致リストを名前を付けて定義
listen-on portBINDがクライアントからのクエリを受け取るネットワークインタフェースとポートを指定
allow-query問合せを許可する対象
recursionリゾルバとしての動作を定義(yes:リゾルバとして動作、no:リゾルバとして動作しない)
一部のサーバの構築でRed Hatのリポジトリへの接続が必要となるためyesを設定
forwarders自身で解決できないリクエストの転送先を指定
allow-recursionどのクライアントに対して再帰的クエリを許可するか
allow-transferゾーン転送を許可する対象(slave(セカンダリ)側サーバを指定)
zone “bkmsite.lan”bkmsite.lanゾーンの定義
type master:master(プライマリ)/slave(セカンダリ)のプライマリDNSサーバ
file:exsample.lanのゾーンファイル名
zone “10.16.172.in-addr.arpa” in-addr.arpa は逆引きに使用すると特殊ドメイン。
目的のIPアドレスの各数字を逆順にし、その後ろにin-addr.arpaを付加
exsample.lanゾーンファイル作成
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /var/named/exsample.foward.db

-----------------------------------------------------------------------------
【/var/named/exsample.foward.dbの内容】
-----------------------------------------------------------------------------
$TTL 86400
@ IN SOA prsmg01.exsample.lan.zone. root.exsample.lan.zone.(
2025043000 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; MinimumA TTL
)
IN NS prsmg01.exsample.lan.
IN NS prsmg02.exsample.lan.
prsmg00 IN A 172.16.10.10
prsmg01 IN A 172.16.10.11
prsmg02 IN A 172.16.10.12
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /var/named/10.16.172.in-addr.arpa.rev

-----------------------------------------------------------------------------
【/var/named/10.16.172.in-addr.arpa.revの内容】
-----------------------------------------------------------------------------
$TTL 86400
@ IN SOA prsmg01.exsample.lan.zone. root.exsample.lan.zone.(
2025043000 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; MinimumA TTL
)
IN NS prsmg01.exsample.lan.
IN NS prsmg02.exsample.lan.
10 IN PTR prsmg00.exsample.lan.
11 IN PTR prsmg01.exsample.lan.
12 IN PTR prsmg02.exsample.lan.
設定項目説明
TTLリソースレコードのデフォルトの有効期限
SOAレコードゾーンの基本情報を提供するレコード(プライマリ・ホスト名 責任者メールアドレス)
Serial:ゾーンファイルのバージョン番号
Refresh:セカンダリ→プライマリへのゾーン情報更新確認間隔
Retry:セカンダリの更新失敗後、サーバーが再度確認するまでの待機時間
Expire:セカンダリによるゾーン転送完了時間(秒)のリミット
MinimumA TTL:ネガティブキャッシュ(存在しないドメイン)を維持する時間
NSレコードドメインのネームサーバを指定(末尾にピリオド.必須)
Aレコードドメイン名をIPv4アドレスにマッピング
PTRレコードIPアドレスに対応するホスト名(末尾にピリオド.必須)をマッピング
DNSサーバ起動
【prsmg01で実行】
-----------------------------------------------------------------------------
# named.confの内容をチェック
named-checkconf
→ エラーが出力されなければOK

# named-chrootを起動
systemctl start named-chroot.service
→ named-checkconfがOKでもサービス起動時にエラーとなる場合も。
 その時は画面に表示されたメッセージに従って原因調査
名前解決確認
【prsmg01で実行】
-----------------------------------------------------------------------------
# 名前解決の確認
nslookup prsmg00
nslookup prsmg01
nslookup prsmg02
nslookup 172.16.10.10
nslookup 172.16.10.11
nslookup 172.16.10.12

→ nslookupコマンドが正引き、逆引きとも正常に結果を返すことを確認

# named-chrootの自動起動を有効化
systemctl enable named-chroot.service

セカンダリDNSサーバ(管理サーバ#2)設定

named.conf編集
【prsmg02で実行】
-----------------------------------------------------------------------------
vi /etc/named.conf


-----------------------------------------------------------------------------
【/etc/named.confの内容】
-----------------------------------------------------------------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

acl "internalnet" {
172.16.10.0/24;
};


options {
listen-on port 53 { 172.16.10.12; };
//listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { internalnet; localhost; };

/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

forwarders {
172.16.10.254;
};


forward only;

allow-recursion {
172.16.10.0/24;
};


dnssec-validation no;

managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";

/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

// Production site Zone
zone "exsample.lan" IN {
type slave;
file "exsample.foward.slv.db";
masters {
172.16.10.11;
};
};

zone "10.16.172.in-addr.arpa" IN {
type slave;
file "10.16.172.in-addr.arpa.slv.rev";
masters {
172.16.10.11;
};
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
DNSサーバ起動

セカンダリ(slave)側のゾーンファイルはプライマリ(mastar)側から転送されるので管理サーバ#2のゾーンファイルは作成不要です。named.confのチェックをして問題がなければnamed-chrootサービスを起動します。

【prsmg02で実行】
-----------------------------------------------------------------------------
# named.confの内容をチェック
named-checkconf
→ エラーが出力されなければOK

# exsample.lanのゾーンファイルが存在しないことを確認
ls -l /var/named/*slv*

# named-chrootを起動
systemctl start named-chroot

# exsample.lanの静引き、逆引きゾーンファイルが転送されたこと確認
ls -l /var/named/*slv*

# バイナリの正引き(exsample.foward.slv.db)ゾーンファイルの内容をテキスト形式で出力
named-compilezone -f raw -F text -o - exsample.lan /var/named/exsample.foward.slv.db

# バイナリの逆引き(10.16.172.in-addr.arpa.slv.rev)ゾーンファイルの内容をテキスト形式で出力
named-compilezone -f raw -F text -o - 10.16.172.in-addr.arpa /var/named/10.16.172.in-addr.arpa.slv.rev
名前解決確認

管理サーバ#1のDNSサーバを停止して管理サーバ#2のDNSサーバで名前解決ができることを確認します。

【prsmg01で実行】
-----------------------------------------------------------------------------
# named-chrootを停止
systemctl stop named-chroot


-----------------------------------------------------------------------------
【prsmg02で実行】
-----------------------------------------------------------------------------
# 名前解決の確認
nslookup prsmg00
nslookup prsmg01
nslookup prsmg02
nslookup 172.16.10.10
nslookup 172.16.10.11
nslookup 172.16.10.12

→ nslookupコマンドが正引き、逆引きとも正常に結果を返すことを確認

# named-chrootの自動起動を有効化
systemctl enable named-chroot.service


-----------------------------------------------------------------------------
【prsmg01で実行】
-----------------------------------------------------------------------------
# named-chrootを起動
systemctl start named-chroot

dnsサービス許可

管理サーバ#1、管理サーバ#2のfirewalldサービス許可リストにdnsサービスを追加します。

【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# デフォルトゾーンのサービス許可リストを表示
firewall-cmd --list-services
→ dnsが含まれていないことを確認

# firewalldのサービス許可リストにdnsサービスを(永続的に)追加
firewall-cmd --add-service=dns --permanent

# ランタイムモードで設定を再ロード
firewall-cmd --reload

# デフォルトゾーンのサービス許可リストを表示
firewall-cmd --list-services
→ dnsが追加されたことを確認

namedの設定が終わったら次はPacemakerをインストールして管理サーバのクラスタを構築します。

参考情報

「管理サーバ構築」を書くにあたり、以下のサイトを参考にさせていただきました。

【chrony】
基本的なシステム設定 | Red Hat Product Documentation
18.3. chrony の使用 | Red Hat Product Documentation

【BIND】
ネットワークインフラストラクチャーサービスの管理 | Red Hat Product Documentation
DNS-as-a-Service ガイド | Red Hat Product Documentation
RHEL8 上に BIND を構築する #bind – Qiita
BIND DNSサーバをマスタ、スレイブ構成でLinux上に構築する手順をメモ | KITA-SAN.BLOG
BINDのViewを使って複数のネットワークごとに見せる情報を変える – YGG Tech

【Pacemaker】
高可用性クラスターの設定および管理 | Red Hat Product Documentation
CentOS Stream 8 : Pacemaker : インストール : Server World

厚くお礼申し上げます。

コメント

タイトルとURLをコピーしました