ntpサーバの構築

この記事では、linuxでの時刻同期の設定方法を紹介します。

複数のサーバを構築している場合、サーバ間の連携やログのタイムスタンプを合わせるために、サーバ内の時刻が同じであることは必須です。
そこで、今回はNTPサーバを1台構築し、サーバのシステム時刻を日本標準時間に自動的に合わせます。併せて、その他のサーバは構築したNTPサーバを参照させることで、管理しているサーバの時刻を同期させます。

NTPサーバ機能の有名所としては、ntpdとchronyがありますが、今回はntpdでNTPサーバを構築していきます。

なお、linuxにおけるntpdの設定は基本的に共通していますが(バージョンによる違いはあります)、今回はArchLinuxにおけるntpdの設定になります。

1.ntpdのインストール

サーバにて以下のコマンドでntpをインストールします。

$ sudo pacman -S ntp

2.ntpデーモンの設定

/etc/ntp.confを編集して、ntpデーモンの設定を行います。

2-1.ntpdの同期先の指定

デフォルトでは、ntpdの同期先の指定方法してserverが利用されていますが、poolで指定すると、DNSのラウンドロビンのサーバも指定できますので、poolで指定します。
ntpdの同期先としては、インターネットマルチフィード株式会社が運営をするPublic NTPサーバを利用します。
また、インターネットにアクセスできない場合でも、時刻の提供を続行できるように サーバのlocal timeを追加します。その際に、fudgeを使ってstratum 12 サーバーとして 追加することで、インターネットが接続可能な限りlocal timeは使用されません。

# server 0.arch.pool.ntp.org
# server 1.arch.pool.ntp.org
# server 2.arch.pool.ntp.org
# server 3.arch.pool.ntp.org
pool ntp.jst.mfeed.ad.jp
server 127.127.1.1
fudge 127.127.1.1 stratum 12

2-2.restrictの指定

restrictを以下のように設定して、ntpdの同期先との同期、サーバ自身及びLAN(ここでは、192.168.10.0/24)内からの時刻問い合わせを許可します。

restrict default kod limited nomodify nopeer noquery notrap # default設定
restrict 127.0.0.1 # サーバ自身のアクセス許可(ipv4)
restrict ::1 # サーバ自身のアクセス許可(ipv6)
restrict source notrap nomodify noquery # ntpdの同期先との同期許可
restrict 192.168.10.0 mask 255.255.255.0 nomodify nopeer noquery # LAN内からの時刻問い合わせ許可

3.ntpデーモンの起動と有効化

以下のコマンドで ntpデーモンを起動します。

$ sudo systemctl start ntpd.service

さらに、以下のコマンドで ntp デーモンを起動時に有効します。

$ sudo systemctl enable ntpd.service

4.ntpサーバの確認

以下のコマンドを実行して、同期先のサーバの前に+か*が付与されていれば問題ありません。

ntpq -p

remote refid st t when poll reach delay offset jitter
==============================================================================
ntp.jst.mfeed.a .POOL. 16 p - 64 0 0.000 0.000 0.000
LOCAL(1) .LOCL. 12 l 478 64 200 0.000 0.000 0.000
+ntp1.jst.mfeed. 133.243.236.17 2 u 60 64 377 2.790 0.190 0.636
+ntp3.jst.mfeed. 133.243.236.17 2 u 8 64 377 2.808 -0.018 0.755
*ntp2.jst.mfeed. 133.243.236.17 2 u 4 64 377 2.738 1.666 0.637

5.iptablesの設定

NTPサーバとしてLAN内に公開しますので、iptablesで123番ポートへアクセスを許可します。

iptablesの具体的な設定方法は、以下の関連記事を参照ください。

関連記事→iptablesの設定

# 123番ポートへのアクセス許可
iptables -A INPUT -p udp --dport 123 -j ACCEPT

終わりに

今回はntpサーバの構築を紹介しました。今後は、他のサーバを構築した際に、今回設定したNTPサーバを参照することで、時刻をLAN内で同期することが可能となります。