複数のサーバを構築している場合、サーバ間の連携やログのタイムスタンプを合わせるた めに、サーバ内の時刻が同じであることは必須です。
そこで、今回はNTPサーバを1台構築し、サーバのシステム時刻を日本標準時間に自動的に合わせ、その他のサーバは構築したNTPサーバを参照させることで、管理しているサーバの時刻を同期させます。
NTPサーバ機能の有名所としては、ntpdとchronyがありますが、今回はntpdでNTPサーバを構築します。
なお、linuxにおけるntpdの設定は基本的に共通していますので、今回はArchLinuxで設定します。
ntpdのインストール #
サーバにて以下のコマンドでntpをインストールします。
sudo pacman -S ntp
ntpデーモンの設定 #
/etc/ntp.conf
を編集して、ntpデーモンの設定を行います。
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
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内からの時刻問い合わせ許可
ntpデーモンの起動と有効化 #
以下のコマンドで ntpデーモンを起動します:
sudo systemctl start ntpd.service
さらに、以下のコマンドで ntp デーモンを起動時に有効します:
sudo systemctl enable ntpd.service
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
iptablesの設定 #
NTPサーバとしてLAN内に公開しますので、iptablesで123番ポートへアクセスを許可します。
iptablesの具体的な設定方法は、iptablesの設定を参照ください。
iptables -A INPUT -p udp --dport 123 -j ACCEPT