NTPクライアント(CentOS7.2 + Chrony3.4)からNTPサーバ(Windows10)に
同期させようとしたのですが、私の場合もうまくいかず、対策を調査して
いたらこのページにたどり着きました。おかげさまで、原因と対策が
わかったので、報告したいと思います。
Windows NTPサーバは、[インターネット時刻サーバと同期する]設定が OFF の
場合、内部クロックの精度を[LocalClockDispersion]レジストリの値を
"Root Dispersion"(ゆらぎ/精度)として、NTP クライアントに提供している(*1)
ようです。
NTP クライアントは、"Root Dispersion"を以下のコマンドで確認できます。
# chronyc ntpdata
...
Root dispersion : 10.000061 seconds
...
[LocalClockDispersion]レジストリのデフォルト値は"10"、つまり10秒なので、
NTP クライアント側でも、"Root Dispersion"は近い値になるようです。
NTP クライアントである Crony は、"Root Dispersion"が[maxdistance]の
デフォルト値3秒を超える場合、NTP サーバと同期しない(*2, *3)ため、
結果として、Windows NTP サーバと同期できないという問題が発生していました。
解決方法は2つあります。
以下いずれの方法でも、うまく同期することを確認しました。
-
方法1 Windows NTP サーバの設定を変更する
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config"レジストリキーの[LocalClockDispersion]レジストリの値を"0"に設定し、[Windows Time]サービス(W32Time)を再起動します。
-
方法2 NTP クライアントの設定を変更する
"/etc/chrony.conf"に、"maxdistance 20"という行を追加し、
"systemctl restart chronyd"コマンドにより NTP クライアントを再起動
します。[maxdistance]パラメータに指定する値は、"chronyc ntpdata"
コマンドで表示された"Root dispersion"よりも大きめの値を指定します。
なお、Windows NTP サーバにて、Windows10 のデフォルトのインターネット
時刻サーバである"time.windows.com"を設定したところ、NTP クライアント
では、"Root dispersion : 7.789963 seconds"と表示されました。
これも、3秒以上なので、Chrony では同期できません。
おそらくこれが、over様のおっしゃる"親和性がない"理由なのでしょう。
逆に言えば、同じ Windows 同士なら、この程度のずれは許容範囲のようで、giftend様が報告しているように Windows7 からは問題なく同期できるのでしょう。
そのため、giftend様がNTPサーバの参考にされた下記サイトのように、
https://www.eaton-daitron.jp/techblog/5751.html
[LocalClockDispersion]レジストリについての説明がないため、Linux NTP
クライアントから Windows NTP サーバを利用したい方は、
この問題に陥りやすいのでしょう。
giftend様は、そのあと、このレジストリの値を"0"にしてコンピュータを
再起動したので、うまく同期がとれるようになったということだと思います。
*1 https://docs.microsoft.com/ja-jp/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings
*2 https://chrony.tuxfamily.org/faq.html#_using_a_windows_ntp_server
*3 https://unix.stackexchange.com/questions/404046/chrony-3-1-refuses-to-sync-with-ntp-server