macOS の時刻がずれる (time.apple.com 側の問題)

macOS の時刻がずれていたので調べていたら time.apple.com の IPv6 サーバーに問題がありそうでした。


ターミナルで time.apple.com の IPv6 サーバーを確認します。

$ dig AAAA time.apple.com
~~~(略)~~~
time.g.aaplimg.com.	456	IN	AAAA	2403:300:a0c:4000::1e2
time.g.aaplimg.com.	456	IN	AAAA	2403:300:a16:3000::1f2
~~~(略)~~~


2つのサーバーに対して sntp コマンドを実行してみます。

$ sudo sntp -sS 2403:300:a0c:4000::1e2
sntp: Exchange failed: Timeout
sntp_exchange {
        result: 6 (Timeout)
~~~(略)~~~
sntp: Clock select failed
$ sudo sntp -sS 2403:300:a16:3000::1f2
sntp: Exchange failed: Timeout
sntp_exchange {
        result: 6 (Timeout)
~~~(略)~~~
+0.003034 +/- 0.059945 2403:300:a16:3000::1f2 2403:300:a16:3000::1f2


"2403:300:a0c:4000::1e2" は何度やっても失敗します。

"2403:300:a16:3000::1f2" は成功することがあります。


IPv4 のサーバー (17.253.68.123, 17.253.68.251, 17.253.68.253) では確実に成功しています。


タイムサーバーがデフォルト (time.apple.com) でもずれる(デバイスの日時になる)ことがあります。

Mac mini, macOS 14.6

投稿日 2024/08/12 22:21

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2024/08/26 23:51

様々なコマンドを使って確認するのは面倒臭いので python スクリプトを作りました。


check_time_server.py として保存してください。

#!/usr/bin/env python3

import argparse
import socket
import sys

CHECK = {None: '--', False: 'NG', True: 'OK'}
PORT = 123

flag_dryrun = False
flag_verbose = False
timeout_second = 1
message = print


def verbose(msg):
    return flag_verbose and message(msg)


def try_sntp(addr):
    pkt = bytearray(4*12)
    pkt[0] = (3 << 3) | 3

    ipaddr = addr[4][0]
    sock = socket.socket(family=addr[0], type=addr[1], proto=socket.IPPROTO_UDP)
    if timeout_second > 0:
        sock.settimeout(timeout_second)
    try:
        sres = sock.sendto(pkt, (ipaddr, PORT))
        rres = sock.recvfrom(64)
    except OSError as e:
        message(f'Error: {e} ({ipaddr})')
        sock.close()
        return False
    sock.close()
    return True


def check_server(hostname):
    message(f'Server: {hostname}')
    addrs = socket.getaddrinfo(hostname, PORT, proto=socket.IPPROTO_UDP)
    verbose('Address:')
    hostmap = [{}, {}]
    for addr in addrs:
        ipaddr = addr[4][0]
        try:
            sname = socket.gethostbyaddr(ipaddr)[0]
        except OSError as e:
            verbose(f'Error: gethostbyaddr("{ipaddr}"): {e}')
            sname = hostname
        verbose(f'  {ipaddr:39} : {sname}')
        success = None
        if not flag_dryrun:
            success = try_sntp(addr)
        hmap = hostmap[int(addr[0] == socket.AF_INET6)]
        if sname not in hmap:
            hmap[sname] = []
        hmap[sname].append([ipaddr, success])
    for host in sorted(set(sum((list(h.keys()) for h in hostmap), []))):
        message('\n'.join([
            f'{host}:',
            *[f'  {CHECK[check]} - {addr}' for hmap in hostmap
              for addr, check in sorted(hmap.get(host, []))]]))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument('-d', '--dryrun', action='store_true')
    parser.add_argument('-t', '--timeout', type=int, default=1)
    parser.add_argument('server', metavar='SERVER')
    args = parser.parse_args()
    flag_dryrun = args.dryrun
    flag_verbose = args.verbose
    timeout_second = args.timeout
    check_server(args.server)


次のような結果が得られるでしょう。


$ python3 check_time_server.py time.apple.com
Server: time.apple.com
Error: timed out (2403:300:a0c:4000::1f2)
Error: timed out (2403:300:a0c:3000::1e2)
Error: timed out (2403:300:a16:4000::1f2)
jptyo5-ntp-001.aaplimg.com:
  OK - 17.253.68.125
jptyo5-ntp-002.aaplimg.com:
  OK - 17.253.68.253
  NG - 2403:300:a0c:4000::1f2
jptyo5-ntp-003.aaplimg.com:
  NG - 2403:300:a0c:3000::1e2
jptyo5-ntp-004.aaplimg.com:
  OK - 17.253.68.251
krsel6-ntp-002.aaplimg.com:
  NG - 2403:300:a16:4000::1f2
$ python3 check_time_server.py time.apple.com
Server: time.apple.com
Error: timed out (2403:300:a0c:4000::1f2)
Error: timed out (2403:300:a0c:3000::1e2)
jptyo5-ntp-001.aaplimg.com:
  OK - 17.253.68.125
jptyo5-ntp-002.aaplimg.com:
  OK - 17.253.68.253
  NG - 2403:300:a0c:4000::1f2
jptyo5-ntp-003.aaplimg.com:
  NG - 2403:300:a0c:3000::1e2
jptyo5-ntp-004.aaplimg.com:
  OK - 17.253.68.251
krsel6-ntp-002.aaplimg.com:
  OK - 2403:300:a16:4000::1f2


ちなみに、 ntp.nict.jp, time.google.com , time.aws.com など公開 NTP で NG が出るのは見た事がないです。

返信: 54
スレッドに付いたマーク ランキングトップの返信

2024/08/26 23:51 SEI-1 への返信

様々なコマンドを使って確認するのは面倒臭いので python スクリプトを作りました。


check_time_server.py として保存してください。

#!/usr/bin/env python3

import argparse
import socket
import sys

CHECK = {None: '--', False: 'NG', True: 'OK'}
PORT = 123

flag_dryrun = False
flag_verbose = False
timeout_second = 1
message = print


def verbose(msg):
    return flag_verbose and message(msg)


def try_sntp(addr):
    pkt = bytearray(4*12)
    pkt[0] = (3 << 3) | 3

    ipaddr = addr[4][0]
    sock = socket.socket(family=addr[0], type=addr[1], proto=socket.IPPROTO_UDP)
    if timeout_second > 0:
        sock.settimeout(timeout_second)
    try:
        sres = sock.sendto(pkt, (ipaddr, PORT))
        rres = sock.recvfrom(64)
    except OSError as e:
        message(f'Error: {e} ({ipaddr})')
        sock.close()
        return False
    sock.close()
    return True


def check_server(hostname):
    message(f'Server: {hostname}')
    addrs = socket.getaddrinfo(hostname, PORT, proto=socket.IPPROTO_UDP)
    verbose('Address:')
    hostmap = [{}, {}]
    for addr in addrs:
        ipaddr = addr[4][0]
        try:
            sname = socket.gethostbyaddr(ipaddr)[0]
        except OSError as e:
            verbose(f'Error: gethostbyaddr("{ipaddr}"): {e}')
            sname = hostname
        verbose(f'  {ipaddr:39} : {sname}')
        success = None
        if not flag_dryrun:
            success = try_sntp(addr)
        hmap = hostmap[int(addr[0] == socket.AF_INET6)]
        if sname not in hmap:
            hmap[sname] = []
        hmap[sname].append([ipaddr, success])
    for host in sorted(set(sum((list(h.keys()) for h in hostmap), []))):
        message('\n'.join([
            f'{host}:',
            *[f'  {CHECK[check]} - {addr}' for hmap in hostmap
              for addr, check in sorted(hmap.get(host, []))]]))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument('-d', '--dryrun', action='store_true')
    parser.add_argument('-t', '--timeout', type=int, default=1)
    parser.add_argument('server', metavar='SERVER')
    args = parser.parse_args()
    flag_dryrun = args.dryrun
    flag_verbose = args.verbose
    timeout_second = args.timeout
    check_server(args.server)


次のような結果が得られるでしょう。


$ python3 check_time_server.py time.apple.com
Server: time.apple.com
Error: timed out (2403:300:a0c:4000::1f2)
Error: timed out (2403:300:a0c:3000::1e2)
Error: timed out (2403:300:a16:4000::1f2)
jptyo5-ntp-001.aaplimg.com:
  OK - 17.253.68.125
jptyo5-ntp-002.aaplimg.com:
  OK - 17.253.68.253
  NG - 2403:300:a0c:4000::1f2
jptyo5-ntp-003.aaplimg.com:
  NG - 2403:300:a0c:3000::1e2
jptyo5-ntp-004.aaplimg.com:
  OK - 17.253.68.251
krsel6-ntp-002.aaplimg.com:
  NG - 2403:300:a16:4000::1f2
$ python3 check_time_server.py time.apple.com
Server: time.apple.com
Error: timed out (2403:300:a0c:4000::1f2)
Error: timed out (2403:300:a0c:3000::1e2)
jptyo5-ntp-001.aaplimg.com:
  OK - 17.253.68.125
jptyo5-ntp-002.aaplimg.com:
  OK - 17.253.68.253
  NG - 2403:300:a0c:4000::1f2
jptyo5-ntp-003.aaplimg.com:
  NG - 2403:300:a0c:3000::1e2
jptyo5-ntp-004.aaplimg.com:
  OK - 17.253.68.251
krsel6-ntp-002.aaplimg.com:
  OK - 2403:300:a16:4000::1f2


ちなみに、 ntp.nict.jp, time.google.com , time.aws.com など公開 NTP で NG が出るのは見た事がないです。

2024/09/14 01:53 SEI-1 への返信

time.apple.com に対する getaddrinfo を約1秒間隔で実行し、先頭3つの中に応答のあるサーバー(アドレス中に a16 があるもの)が幾つ含まれるかで色分けしてみた。


赤 = 0 個 : 時刻同期が確実に失敗する

黄 = 1 個 : 失敗することがそれなりにある

  ・ mac→[中継]→サーバー の通信で[中継]が経路構築している間にタイムアウトになる?

  ・[中継]に問題がないと思える状況下でエラーが出ることがある

   (いろいろと試した感触として、同一 IP サーバー群の中にハズレがあるのかな?と...)

青 = 2 個 : たぶん成功する

緑 = 3 個 : 青より確実性が高い


2024/9/13 14:00 頃から 9/14 07:00 頃まで(約17時間)

確実に失敗する時間帯が結構な頻度で現れます。(それが分かったので、サポートには連絡してあります)

IPv6 通信が有効な全員が同じ状態ではないにしろ、似たり寄ったりでしょう。


ちなみに、ntp.nict.jp など公開 NTP で全てのサーバーが応答するものは

になります。

2024/08/19 15:11 SEI-1 への返信

フィードバックにもサポートにも連絡しましたが改善されませんな。


サポートは連絡する前から分かっていることだけど、窓口担当がこちらの問題として処理を始めるから認識を覆すための作業がキツイ。やりたくないんだよな…



もう少し調べてみた。


time.apple.com として見える IP アドレス


17.253.68.123

17.253.68.125

17.253.68.251

17.253.68.253


2403:300:a0c:3000::1e2

2403:300:a0c:4000::1f2

2403:300:a16:3000::1f2


を逆引きすると


jptyo5-ntp-003.aaplimg.com 17.253.68.123 2403:300:a0c:3000::1e2

jptyo5-ntp-001.aaplimg.com 17.253.68.125 [2403:300:a0c:3000::1f2]

jptyo5-ntp-004.aaplimg.com 17.253.68.251 [2403:300:a0c:4000::1e2]

jptyo5-ntp-002.aaplimg.com 17.253.68.253 2403:300:a0c:4000::1f2

krsel6-ntp-001.aaplimg.com [17.253.114.125] 2403:300:a16:3000::1f2


として見えていた。([IP-ADDR] は time.apple.com として見えていない)


jptyo5-ntp-* (日本東京?) は IPv4 側は機能しているが IPv6 側が全滅している。同じサーバー名で IPv4 と IPv6 が割り当てられているのに IPv6 側が機能しないのはどういうことだろう?


IPv6 では IPv4 にはない krsel6-ntp-* (韓国ソウル?) を態々 DNS に追加している(DNS は地域毎に見え方が違うように細工されている)。もしかして IPv6 側が機能していないのは Apple (日本?) も分かっていて、この措置だったりするのかな?そうでなくても、この管理状況はかなり不味そうです。しかも日本地域限定かな?



NTP サーバーは NITC を使いたいところですが、負荷を増やすのは気が引けるので、据置機はプロバイダ(ISP)提示のサーバーを使うことにします。デフォルトで使えるのが一番いいのだけど…


2024/09/01 14:36 SEI-1 への返信

sntp を使わない確認方法を提示しておきます。


ターミナルで以下のコマンドを実行します。


% sudo tcpdump -s0 port 123 -v


何行か表示されて停止しますが、そのままにしておいて「システム設定」にて「自動的に設定」を オフ > オンすると


tcpdump: listening on en0, link-type EN10MB (Ethernet), snapshot length 524288 bytes
06:03:38.887784 IP6 (flowlabel 0x10e00, hlim 64, next-header UDP (17) payload length: 56) [MacのIPv6アドレス].53507 > jptyo5-ntp-002.aaplimg.com.ntp: [bad udp cksum 0x1af5 -> 0xdf89!] NTPv4, Client, length 48
	Leap indicator:  (0), Stratum 0 (unspecified), poll 0 (1s), precision 0
	Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
	  Reference Timestamp:  0.000000000
	  Originator Timestamp: 0.000000000
	  Receive Timestamp:    0.000000000
	  Transmit Timestamp:   3639175428.112116942 (2015-04-28T02:03:48Z)
	    Originator - Receive Timestamp:  0.000000000
	    Originator - Transmit Timestamp: 3639175428.112116942 (2015-04-28T02:03:48Z)

〜〜〜〜同様に10回繰り返し〜〜〜〜

06:04:07.469117 IP6 (flowlabel 0x00700, hlim 64, next-header UDP (17) payload length: 56) [MacのIPv6アドレス].63810 > jptyo5-ntp-003.aaplimg.com.ntp: [bad udp cksum 0x0ae5 -> 0x40be!] NTPv4, Client, length 48
	Leap indicator:  (0), Stratum 0 (unspecified), poll 0 (1s), precision 0
	Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
	  Reference Timestamp:  0.000000000
	  Originator Timestamp: 0.000000000
	  Receive Timestamp:    0.000000000
	  Transmit Timestamp:   2604348082.425649434 (1982-07-12T22:01:22Z)
	    Originator - Receive Timestamp:  0.000000000
	    Originator - Transmit Timestamp: 2604348082.425649434 (1982-07-12T22:01:22Z)

時刻の取得要求は

[MacのIPv6アドレス].[ポート番号] > jptyo5-ntp-002.aaplimg.com.ntp

のような通信方向を含む行から開始します。 要求側の

Timestamp: 0.000000000

は問題ありません。


この時は jptyo5* に対して要求してましたが全て応答がなく、12回実行試行して時刻の取得に失敗していました。


-----------------------------------------------------------------------


次に、「タイムサーバー」を「ntp.nict.jp」に設定します。設定しただけでは何も起きないので、「自動的に設定」を オフ > オンすると


tcpdump: listening on en0, link-type EN10MB (Ethernet), snapshot length 524288 bytes
06:07:33.559362 IP6 (flowlabel 0x20c00, hlim 64, next-header UDP (17) payload length: 56) [MacのIPv6アドレス].ntp > ntp-a3.nict.go.jp.ntp: [bad udp cksum 0xc6ac -> 0x83db!] NTPv4, Client, length 48
	Leap indicator:  (0), Stratum 0 (unspecified), poll 0 (1s), precision 0
	Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
	  Reference Timestamp:  0.000000000
	  Originator Timestamp: 0.000000000
	  Receive Timestamp:    0.000000000
	  Transmit Timestamp:   730811245.107559130 (1923-02-28T11:07:25Z)
	    Originator - Receive Timestamp:  0.000000000
	    Originator - Transmit Timestamp: 730811245.107559130 (1923-02-28T11:07:25Z)
06:07:33.588507 IP6 (flowlabel 0x20c00, hlim 23, next-header UDP (17) payload length: 56) ntp-a3.nict.go.jp.ntp > [MacのIPv6アドレス].ntp: [udp sum ok] NTPv4, Server, length 48
	Leap indicator:  (0), Stratum 1 (primary reference), poll 0 (1s), precision -20
	Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: NICT
	  Reference Timestamp:  3934213653.000000000 (2024-09-01T21:07:33Z)
	  Originator Timestamp: 730811245.107559130 (1923-02-28T11:07:25Z)
	  Receive Timestamp:    3934213653.599730595 (2024-09-01T21:07:33Z)
	  Transmit Timestamp:   3934213653.599731419 (2024-09-01T21:07:33Z)
	    Originator - Receive Timestamp:  +3203402408.492171464
	    Originator - Transmit Timestamp: +3203402408.492172288


時刻が取得出来ると

ntp-a3.nict.go.jp.ntp > [MacのIPv6アドレス].ntp

のような通信方向を含む行から開始します。


要求と取得がペアになって表示されるハズです。


2024/09/05 02:47 はに への返信

今はうちでもipv6が安定して使えるようになりました。


それはなによりです。もし、python3 が使用可能ならば、ターミナルから以下のコマンドを実行してみてください。 time.apple.com の IP アドレス 一覧が出てきます。 dig (DNS プロトコルを直接使うもの) とは違い、多くのアプリケーション ソフトウェアがサーバー名から IP アドレスを取得する方法です。


% python3 -c "import socket,sys;[print(i[4][0]) for i in socket.getaddrinfo(sys.argv[1],'')];" time.apple.com


手元で実行した結果は


2403:300:a16:3000::1f2
2403:300:a16:3000::1f2
2403:300:a0c:4000::1f2
2403:300:a0c:4000::1f2
2403:300:a0c:3000::1e2
2403:300:a0c:3000::1e2
17.253.68.123
17.253.68.123
17.253.68.251
17.253.68.251
17.253.68.253
17.253.68.253


となりました。sntp にしても timed にしても、この一覧からどれを使うか?という処理を実行しています。

sntp のバージョンによって異なるのは、この一覧からの選択方法の違いを意味します。(IPv4 を優先することもできます)


残念ながら、timed は先頭 3 つだろうことが分かりました。システムから重複で返ってくることで


2403:300:a0c:4000::1f2
2403:300:a0c:4000::1f2
2403:300:a0c:3000::1e2
2403:300:a0c:3000::1e2
2403:300:a16:3000::1f2
2403:300:a16:3000::1f2
〜〜〜略〜〜〜


となったとき、IPv6 で唯一応答する 2403:300:a16:3000::1f2 が先頭 3 つに含まれないので、確実に時刻同期に失敗するという訳です。


timed は定期的[1024秒=約17分置きかな?]に時刻取得を試みています。何処にアクセスしているかは tcpdump を使った方法が確実な手段になります。その通信相手が IPv4 / IPv6 か確認するには


% sudo tcpdump -s0 -i en0 port 123 -n


を実行して待機させて、「自動的に設定」を OFF > ON すると初期の時刻取得を開始するので、取得出来ていれば


17:53:00.296644 IP6 [[[Macのアドレス]]].60716 > 2403:300:a16:3000::1f2.123: NTPv4, Client, length 48
17:53:00.358330 IP6 2403:300:a16:3000::1f2.123 > [[[Macのアドレス]]].60716: NTPv4, Server, length 48


のような情報が1行ずつ出てきます。時刻が取得できなければ2行目 ("NTPv4, Server"を含む行) がありません。


IPv6 の接続をリンクローカルのみ(実質的にオフ)にして IPv4 だけにすると


17:50:37.480123 IP [[[Macのアドレス]]].50290 > 17.253.68.125.123: NTPv4, Client, length 48
17:50:37.510464 IP 17.253.68.125.123 > [[[Macのアドレス]]].50290: NTPv4, Server, length 48


のようになります。長時間 tcpdump を実行したままにすると取得失敗の有無を確認できると思います。


2024/09/14 18:18 SEI-1 への返信

> 先頭3つの中に応答のあるサーバー(アドレス中に a16 があるもの)が幾つ含


このダメな時にdnsのキャッシュをクリアしたら、順番変わりませんか?

dns cacheのクリアは、ターミナルで、

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

として行います。

たまたまかもしれませんが、getaddrinfoで


2403:300:a0c:4000::1e2

2403:300:a0c:4000::1e2

2403:300:a0c:3000::1e2

2403:300:a0c:3000::1e2

2403:300:a16:3000::1f2

2403:300:a16:3000::1f2

17.253.68.253

17.253.68.253

17.253.68.123

17.253.68.123

17.253.68.251

17.253.68.251


となってる時に、上記コマンドでdns cacheをクリアしてみると、


2403:300:a16:3000::1f2

2403:300:a16:3000::1f2

2403:300:a0c:4000::1e2

2403:300:a0c:4000::1e2

2403:300:a0c:3000::1e2

2403:300:a0c:3000::1e2

17.253.68.251

17.253.68.251

17.253.68.125

17.253.68.125

17.253.68.123

17.253.68.123


となってa16.3000が先頭に変わりました。どうも、a16.3000とa16.4000を一定時間ごと(?)に変えてるようで(昨日はa16.4000しか出てこなくて、今日はa16.3000が出てきます)、変えた直後はtimedに採用されない低い順番になる感じがします。


2024/08/27 05:24 三毛猫大好き への返信

> time.apple.com を参照する全ての環境で時間がズレるものではない


はい、その通りです。


IPv6 で krsel6-ntp-002.aaplimg.com から時刻が取得できる場合は、その時間が使われるでしょう。

取得できるかどうかは、Mac -> 中継 -> krsel* までに挟まっている [中継] 機器次第ではないかと思います。

ネットワーク的に遠いので...


手元では


sudo sntp -S time.apple.com


で、 jptyo* と krsel* がリトライで全て使用されても全く取得できない状況を確認しています。この場合は、デバイスの時刻しか情報がありません。これが正しくなければ時刻が狂うことになります。


  1. 「自動的に設定」をオフにする
  2. わざと時刻を狂わせる
  3. 再起動する
  4. 「自動的に設定」をオンにする
  5. 「タイムサーバー」をデフォルト以外にする → 正しい時刻
  6. 「タイムサーバー」をデフォルトにする → 狂った時刻


となることも確認しています。

2024/09/14 16:29 SEI-1 への返信

ここにも、時々、macの時間が(何ヶ月とか、日付もめちゃくちゃになる)酷く狂ってるという書き込みがあります。多くは、macbook air(インテルかAppleシリコンかは無関係)で、スリープのまま長期間(数ヶ月とか。でも短い場合には1週間とかの場合もあるようです)放置しててバッテリーが空になってると、そういうことになり易いようです。その修正法ですが、うちで試す限りは、日付と時刻を自動的に設定をオフにして、再起動してからこれをオンにすれば治るのですが、それでも治らない人が多数います。それで、日付と時刻を自動的に設定をオフにしてからマニュアルで時刻を合わせておいてから、再起動、日付と時刻を自動的に合わせるをオンにすれば治ります、と言ってます。

これは、マニュアルで合わせてから日付と時刻を自動的に設定するをオンにしてますので、本当にタイムサーバに参照して合ってるのかどうか怪しいです。このスレで、多分、マニュアルで合わせないと合わない場合は、参照してるサーバに正しく応答するものが入ってないのかもしれません、と思うようになりました。その場合は、一時的に、タイムサーバの設定をtime.google.comとかntp.nict.jpとかにすれば良いのでしょうけど。

2024/09/05 01:15 SEI-1 への返信

今はうちでもipv6が安定して使えるようになりました。

sntpをgnuのもの(homebrewでインストールしたもの)を使えば、time.apple.comでもipv4のアドレスを使います。

/usr/bin/sntpはmacOSに最初から入ってるsntpです。

/usr/bin/sntp  time.apple.com

sntp: Exchange failed: Timeout

となりますが、homebrewからインストールしたものを使うと、

sntp  time.apple.com         

sntp 4.2.8p18@1.4062-o  Sat May 25 07:06:58 UTC 2024 (1)

2024-09-05 16:55:55.322678 (-0900) +4.209204 +/- 2.806288 time.apple.com 17.253.68.123 s1 no-leap

となります。ipv4アドレスにアクセスしてます。homebrewからインストールしたものは、実行すると、sntp 4.2.8p18@1.4062...とsntpのバージョンが表示されますのでわかります。

googleのタイムサーバにアクセスした場合は、ipv6で実行されます。

sntp  time.google.com

sntp 4.2.8p18@1.4062-o  Sat May 25 07:06:58 UTC 2024 (1)

2024-09-05 16:56:28.602392 (-0900) +4.207247 +/- 2.804922 time.google.com 2001:4860:4806:c:: s1 no-leap

2024/08/27 05:49 SEI-1 への返信

「タイムサーバー」設定すると即座に時刻表示が変化するので、タイムアウト → リトライは実行されてないようです。

そこから time.apple.com で複数のサーバーがあるのはフェイルセーフの側面より負荷分散が主だと考えます。

すると timed は time.apple.com にあるサーバーが全て機能している事が前提ではないか?となります。


そもそも DNS から返される 3 台中 2 台が応答しない状況はどう考えても異常です。


2024/09/03 00:34 SEI-1 への返信

Transmit Timestamp が妙なので調べると、timed が作る Transmit Timestamp (送信時刻)はデタラメなようです。

この時は jptyo5* に対して要求してましたが全て応答がなく、12回実行試行

12回分の Transmit Timestamp データ

Transmit Timestamp: 3639175428.112116942 (2015-04-28T02:03:48Z)
Transmit Timestamp: 1159763816.521661893 (1936-10-02T04:36:56Z)
Transmit Timestamp: 609940164.511747985 (1919-05-01T11:49:24Z)
Transmit Timestamp: 3070283426.161944434 (1997-04-17T16:30:26Z)
Transmit Timestamp: 564215719.450580559 (1917-11-18T06:35:19Z)
Transmit Timestamp: 1944782976.817570838 (1961-08-18T01:29:36Z)
Transmit Timestamp: 4143608924.734486378 (2031-04-22T10:28:44Z)
Transmit Timestamp: 3840108894.944841893 (2021-09-08T16:54:54Z)
Transmit Timestamp: 1944782976.817570838 (1961-08-18T01:29:36Z)
Transmit Timestamp: 4143608924.734486378 (2031-04-22T10:28:44Z)
Transmit Timestamp: 3840108894.944841893 (2021-09-08T16:54:54Z)
Transmit Timestamp: 3054071124.936905150 (1996-10-12T01:05:24Z)
Transmit Timestamp: 739358827.234980664 (1923-06-07T09:27:07Z)
Transmit Timestamp: 359806168.791733457 (1911-05-28T10:09:28Z)
Transmit Timestamp: 2604348082.425649434 (1982-07-12T22:01:22Z)

Transmit Timestamp 領域の未初期化かな?




sudo sntp -S ntp.nict.jp を実行したときの tcpdump 出力


要求の送信データ

Leap indicator:  (0), Stratum 0 (unspecified), poll 0 (1s), precision 0
Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
  Reference Timestamp:  0.000000000
  Originator Timestamp: 0.000000000
  Receive Timestamp:    0.000000000
  Transmit Timestamp:   3934335555.499169999 (2024-09-03T06:59:15Z)
    Originator - Receive Timestamp:  0.000000000
    Originator - Transmit Timestamp: 3934335555.499169999 (2024-09-03T06:59:15Z)

時刻の受信データ

Leap indicator:  (0), Stratum 1 (primary reference), poll 0 (1s), precision -20
Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: NICT
  Reference Timestamp:  3934335555.000000000 (2024-09-03T06:59:15Z)
  Originator Timestamp: 3934335555.499169999 (2024-09-03T06:59:15Z)
  Receive Timestamp:    3934335555.523330043 (2024-09-03T06:59:15Z)
  Transmit Timestamp:   3934335555.523330863 (2024-09-03T06:59:15Z)
    Originator - Receive Timestamp:  +0.024160043
    Originator - Transmit Timestamp: +0.024160863

この送受信が正常なデータでしょう。




timed の場合、"Originator - XXXX Timestamp" の計算もデタラメになるのが気になります。

Reference Timestamp しか使用していないのなら、0.x 秒程度の誤差が生じるのも納得です。

実用上は問題ないでしょうけど。

2024/08/14 17:11 SEI-1 への返信

ここはあなたと同じ一般ユーザが読み書きしてるだけです。

サーバが落ちてると言われてもここを読む人は何もできませんし、関係者へ連絡が行くこともありません。

Appleに連絡してください。

Apple - Support - System Status

にはtime serverはリストされてませんが、

ここにリスト表示されている以外の問題については、サポートまでお問い合わせください。

となってます。

2024/08/27 06:47 SEI-1 への返信

SEI-1 さんによる書き込み:

1. > time.apple.com を参照する全ての環境で時間がズレるものではない

はい、その通りです。

IPv6 で krsel6-ntp-002.aaplimg.com から時刻が取得できる場合は、その時間が使われるでしょう。
取得できるかどうかは、Mac -> 中継 -> krsel* までに挟まっている [中継] 機器次第ではないかと思います。
ネットワーク的に遠いので...

 たぶん、このスレッドに書き込みした方々のMacでは不具合が出ていないのでしょうね。


「自動的に設定」をオフにする
2. わざと時刻を狂わせる
3. 再起動する
4. 「自動的に設定」をオンにする
5. 「タイムサーバー」をデフォルト以外にする → 正しい時刻
6. 「タイムサーバー」をデフォルトにする → 狂った時刻

となることも確認しています。

 試せば再現するかもしれませんが、せっかく調子良く動いているのに調子悪くさせる手順を試す勇気が私にはありません…。

2024/09/12 05:16 SEI-1 への返信

うちでやる限り、かなりの確率で2403:300:a16:3000::1f2はうまくゆきます(一番古い記録は2024/8/15でした)。

実際、SEI-1さんのcheck_time_server.pyでも、

Server: time.apple.com

Error: timed out (2403:300:a0c:4000::1e2)

Error: timed out (2403:300:a0c:4000::1f2)

Error: timed out (17.253.68.253)

jptyo5-ntp-002.aaplimg.com:

NG - 17.253.68.253

  NG - 2403:300:a0c:4000::1f2

jptyo5-ntp-003.aaplimg.com:

  OK - 17.253.68.123

jptyo5-ntp-004.aaplimg.com:

  OK - 17.253.68.251

NG - 2403:300:a0c:4000::1e2

krsel6-ntp-001.aaplimg.com:

  OK - 2403:300:a16:3000::1f2

となります。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

macOS の時刻がずれる (time.apple.com 側の問題)

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。