##時刻同期は大切です!
WindowsサーバをNTPサーバにするとLinuxからの時刻同期に手こずることがよく有りますよね?そんな人のために設定手順をまとめてみました。
##環境
- 外部NTPサーバ: ntp.jst.mfeed.ad.jp (210.173.160.87)
- 内部NTPサーバ: 192.168.0.1(Windows Server 2012 R2)
- 内部NTPクライアント: 192.168.0.23(CentOS 7.x)
※Active Directory 環境の場合はFSMO(PDCエミュレータ)を持っているドメインコントローラ、それ以外のドメインコントローラーともにデフォルト状態でLinuxから時刻同期をすることができました。確認したのはWindows Server 2016になります。
- 時刻同期フロー
- 外部NTP←内部NTP←(Linux、Windows、ルータ等のNTPクライアント)
- ※NTPプロトコルが通信できるようファイアウォールなどの許可設定が別途必要です
##NTP設定
レジストリを編集します。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="ntp.jst.mfeed.ad.jp,0x8"
"Type"="NTP"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"LocalClockDispersion"=dword:00000000
"AnnounceFlags"=dword:00000005
"MinPollInterval"=dword:00000006
"MaxPollInterval"=dword:0000000a
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer]
"Enabled"=dword:00000001
- Parameters - NtpServer
- 外部NTPサーバを記述します。RFC準拠でMin/MaxPollIntervalを使えるよう0x8フラグを指定します。複数記載する場合は区切り文字にスペースを使います。
- デフォルト値:time.windows.com,0x9
- Parameters - Type
- タイプをNTPにします
- デフォルト値:NTP(AD環境の場合はNT5DS)
- Config - LocalClockDispersion
- 0x0を指定します。
- デフォルト値:0xa
- Config - AnnounceFlags
- 権威ある時刻サーバを意味する0x5を指定します。
- デフォルト値:0xa
- Config - MinPollInterval
- 0x6(2の6乗=64秒)を指定します。Linuxのntpdのminpoll値がデフォルトで6の為。ntpdのminpoll値を変更している場合は調整が必要かもしれません。
- デフォルト値:0xa(AD環境の場合は0x6)
- Config - MaxPollInterval
- 0xa(2の10乗=1024秒)を指定します。Linuxのntpdのmaxpoll値がデフォルトで10の為。ntpdのmaxpoll値を変更している場合は調整が必要かもしれません。
- デフォルト値:0xf(AD環境の場合は0xa)
- TimeProviders\NtpServer - Enabled
- NTPサーバを有効にする為、0x1を指定します。
- デフォルト値:0x0(AD環境の場合は0x1)
※各デフォルト値は検証環境のWindows Server 2008 R2の場合です。後日、Windows Server 2016で確認すると一部異なるものもありました。
##サービス設定
スタートアップ設定を行い自動起動するようにします。
※AD環境の場合はデフォルトで自動起動の為、スタートアップ設定は不要です
sc config w32time start= auto
レジストリ変更を反映させる為、サービス再起動します。
sc stop w32time && sc start w32time
##NTP動作確認(Windowsサーバ)
w32tmコマンドにて確認を行います。
>w32tm /query /status /verbose
閏インジケーター: 0 (警告なし)
階層: 3 (二次参照 - (S)NTP で同期)
精度: -6 (ティックごとに 15.625ms)
ルート遅延: 0.1221313s
ルート分散: 0.8496165s
参照 ID: 0xD2ADA057 (ソース IP: 210.173.160.87) ← ソースIPが表示されていればOK
最終正常同期時刻: 2015/11/20 16:22:11
ソース: ntp.jst.mfeed.ad.jp,0x8
ポーリング間隔: 7 (128s)
フェーズ オフセット: -0.0090275s
クロック レート: 0.0156250s
State Machine: 1 (保留)
タイム ソース フラグ: 0 (なし)
サーバーのロール: 576 (高信頼タイム サービス)
最終同期エラー: 0 (コマンドは正しく完了しました。) ← このメッセージが表示されていればOK
最終正常同期時刻からの時間: 36.9219284s
上記のステータスになっていれば基本的には正常なのですが、この状態でもしばらく待たないとLinuxから同期できないことがあります。(通常、w32timeサービス再起動から1~2分程度)
ソースが「Local CMOS Clock」となっている場合は、外部NTPサーバと正常に同期できていません。設定を確認し問題無い場合は参照する外部NTPサーバを変更してみてください。
##Linuxの設定と動作確認
設定ファイルを編集します。
server 192.168.0.1 iburst
サービスを再起動しntpq -pコマンドで同期確認を行います。
# systemctl restart ntpd
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.0.23 210.173.160.87 3 u 21 64 1 0.253 42.460 0.517
↑
内部NTPサーバ(192.168.0.23)の先頭にアスタリスクが付いていること
refidに外部NTPサーバのIPアドレスが表示されていること