数あるサーバ構築の中で、Chronyサーバ(NTP)構築は一番簡単らしいので実際に構築作業をした。
##環境
Rocky Linux 8.6
理解すること
・デーモンプロセスChronyd
・クライアントコマンドchronyc
・設定ファイル /etc/chrony.conf
・SV構築基本手順
前提知識
■SV構築の基本手順
①最新パッケージのDLインストール rpm dnf install
②設定ファイル編集 vi /etc
③デーモン再起動 systemctl start/restart
④FW許可 firewall-cmd
⑤動作確認
■NTP(Network Time Protocol):
時刻情報プロトコルで、NW上にあるコンピュータの時刻を同期させるために使用する。このプロトコルを利用するクライアントコンピュータと、NW上のNTPサーバから基準となる時刻情報を受け取り、その情報をもとに内部時計を修正する。
■Chrony:
前述したNTPと同じ意味と解釈していい。
CentOS7以降sytemdの時代になり、NTPではなくChronyに代替された。
※以下chronyの説明だけする。
Chrony SV構築手順
① 仮想SV2台用意(ChronyサーバとChronyクライアント)
→各々に2つNIC設置
・enp0s3:送信元NAT用(仮想LANから外部通信可)
・enp0s8:内部NW用
② 社内Chronyサーバとインターネット上のNTP SV(Stratum)と同期
③ 社内Chronyクライアントが社内Chronyサーバと同期
手順①はすでに構築済みのため、手順②から始める
仮想SVのNICのIP情報確認
[root@localhost ~]# ip a s enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 172.16.1.1/24 brd 172.16.1.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
[root@localhost ~]# ip a show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 172.16.1.2/24 brd 172.16.1.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
valid_lft forever preferred_lft forever
NTP(NW経由で時刻を同期するプロトコル)のポート番号を調べる。
/etc/servicesファイルは、TCPやUDPのポート番号と、そのポートを利用するサービス
(あるいはプロトコル名)の情報を対応させるファイル。
[root@localhost ~]# grep ntp /etc/services | grep 123
ntp 123/tcp
ntp 123/udp # Network Time Protocol
NTP通信には123番ポートが使われることを確認。
chronyデーモンのサービスの稼働状況確認
[root@localhost ~]# systemctl status chronyd.service
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: e>
Active: inactive (dead) since Fri 2022-11-04 03:33:41 JST; 3s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
3行目あたりActive: inactive (dead)
とあるので、「chronyd.serviceというunitは存在するが稼働していない」
システム起動同時に、同unitを起動する設定になっているかデフォルトの状態を確認。
[root@localhost ~]# systemctl is-enabled chronyd.service
disabled
システム起動時に chronydサービスは起動しない設定となっている。
chronyd PKGの確認とDL&インストール
rpm -qa
コマンドで指定したPKGがインストール済みか照会。
[root@localhost ~]# rpm -qa | grep chrony
chrony-4.1-1.el8.rocky.0.1.x86_64
設定ファイルの編集 /etc/chrony.conf
設定ファイルにコピーしバックアップファイルを作成しておく。
何かあっても、デフォルトの状態に復元可能にするため。
[root@localhost ~]# cp -p /etc/chrony.conf /etc/chrony.conf_org
[root@localhost ~]# ls -l /etc/chrony.conf*
-rw-r--r--. 1 root root 1108 11月 4 4:00 /etc/chrony.conf
-rw-r--r--. 1 root root 1108 11月 4 4:00 /etc/chrony.conf_org
3 #pool 2.rhel.pool.ntp.org iburst //Red Hatがインターネット上に公開してるNTP SV。
4 #今回は面白くないのでこれをコメントアウトし、他のNTP SVを指定する
5 server ntp.nict.jp iburst
5行目に、NICT-NTP 独立行政法人 情報通信研究機構が公開してるNTP SVを指定した。
※頭にserverを付ける
※iburst ( initial burst ):起動時に4回連続Stratumに問合せ精度を上げる
23 # Allow NTP client access from local network.
24 # 仮想LAN(内部NW)でNTPクライアントとサーバを同期させるためIP指定
25 allow 172.16.1.0/24
25行目:社内Chronyクライアントが社内Chronyサーバと同期させるために、クライアントのIP記述
ログファイル格納されるディレクトリ確認
35 # Specify directory for log files.
36 logdir /var/log/chrony
保存して設定ファイルの編集完了
Stratumと同期をとれる状態か確認
timedatectl
コマンドで設定ファイル編集しただけでは、tratumと同期をとれない状態と確認
[root@localhost ~]# timedatectl
Local time: 金 2022-11-04 04:23:21 JST
Universal time: 木 2022-11-03 19:23:21 UTC
RTC time: 木 2022-11-03 19:23:20
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
デーモンの起動
編集した設定ファイル/etc/chrony.conf
を読みに行かせるためにchronydデーモン(chronyd.service)の起動
[root@localhost ~]# systemctl status chronyd.service
→ inactive (dead)
[root@localhost ~]# systemctl start chronyd.service
[root@localhost ~]# systemctl status chronyd.service
Active: active (running)
プロセスも確認し、chronudデーモンが稼働している事をPIDレベルで確認
[root@localhost ~]# ps aux | grep chronyd | grep -v grep
chrony 11209 0.0 0.0 132568 3620 ? S 04:29 0:00 /usr/sbin/chronyd
システム起動と同時にchronydも起動させる
[root@localhost ~]# systemctl enable chronyd.service
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service → /usr/lib/systemd/system/chronyd.service.
[root@localhost ~]# systemctl is-enabled chronyd.service
enabled
Stratumと同期をとれる状態か確認
設定ファイルを編集し, chronydデーモンを起動したので編集した設定ファイルを読みにいった。
そのためStratumと同期とれているはず。
確認。
[root@localhost ~]# timedatectl
Local time: 金 2022-11-04 04:38:00 JST
Universal time: 木 2022-11-03 19:38:00 UTC
RTC time: 木 2022-11-03 19:37:58
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Stratumと同期をとれる状態か確認できた。
LAN内のChrony SVがStratumと同期する様子の確認
[root@localhost ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-a3.nict.go.jp 1 6 377 18 -3407us[-4422us] +/- 26ms
同期がとれている場合、左側に*
ntp-a3.nict.go.jpというStratumを使ってChrony SVが同期する様子の確認できた。
これで社内Chrony SVがStratumとインターネット経由で同期した。
FWの許可 firewall-cmd
現在のFWの状況を確認。
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
services: cockpit dhcpv6-client ntp ssh
現在デフォルトでは、【①ssh ②dhcpv6クライアント③cockpit】の3つのサービスしかFWは許可されていない。
今、NTPサーバとして振舞いたいのでNTP(ポート番号123)を許可したい。
FWの許可設定を行う。
クライアントからのアクセスに対し、NTPを許可する。
色々なサービスがある中で今回FWを許可するntpがあるか確認
[root@localhost ~]# firewall-cmd --get-services | grep ntp
→ ntp
長いので割愛
永続的にntpを許可する
[root@localhost ~]# firewall-cmd --add-service=ntp --permanent --zone=public
Warning: ALREADY_ENABLED: ntp
success
firewalldというデーモンに設定変更した内容を読みこませるため、再起動する。
FWにNTPが追加されたか確認する
[root@localhost ~]# systemctl restart firewalld.service
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: cockpit dhcpv6-client ntp ssh telnet
以上、LAN内のchrony SVの設定は終了。
現在、chrony SVのメモリにおいて、chronydデーモンは待機中。
誰かが時刻を聞きに来たら教えてあげるSV設置済みのため、
CLからのリクエストを待つ状態。 psコマンドで稼働中のchronydデーモンのプロセスID確認する。
[root@localhost ~]# ps aux | grep chrony | grep -v grep
chrony 782 0.0 0.1 151164 4540 ? S 11月04 0:00 /usr/sbin/chronyd
メモリ上に展開されているPID782のchronydデーモンがクライアントからの時間リクエストを待っている状態です。
リクエストがあれば、chronydデーモンが正確な時間を返す。
Chrony CL側の設定ファイル編集()
①chrony PKGがインストール済みか・稼働状態を確認する
②クライアント側がアクセスするChrony SVのIPアドレスを編集ファイル/etc/chrony.conf
に記述
③chronydデーモンの再起動し編集した設定ファイルを読み込ませる
[root@localhost ~]# rpm -qa | grep chrony
chrony-4.1-1.el8.rocky.0.1.x86_64
[root@localhost ~]# systemctl status chronyd.service
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2022-11-05 00:43:03 JST; 1s ago
インストール済みだが、サービスが稼働していない。
設定ファイルの編集
vi /etc/chrony.conf
→#pool 2.centos.pool.ntp.org iburst :コメントアウト#をつける
server 172.16.1.2 iburst :chronySVのIP追記
設定ファイル編集したので、デーモン再起動しデーモンの稼働状態を確認する
systemctl start chronyd.service ; systemctl status chronyd.service
→active (running)
以上、Chrony SV構築完了。
クライアントからのChronyアクセスのログは、SV側の/var/log/messages
に格納されている。
[root@localhost ~]# grep chrony /var/log/messages
Nov 4 04:29:05 localhost chronyd[11209]: Using right/UTC timezone to obtain leap second data
Nov 4 04:29:09 localhost chronyd[11209]: Selected source 133.243.238.244 (ntp.nict.jp)
Nov 4 04:29:09 localhost chronyd[11209]: System clock TAI offset set to 37 seconds
Nov 4 23:39:59 localhost chronyd[782]: chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC
まとめ
Chrony SV構築手順:
①最新PKGのDLインストール
rpm -qa | grep chrony
dnf install chrony -y
②設定ファイルの編集
vi /etc/chrony.conf
③デーモン起動
systemctl start/restart chronyd
④FW許可
firewall-cmd --add-service=ntp --permanent --zone=public
systemctl restart firewalld
⑤動作確認
chronyc sources/tracking/ntpdata