フレッツ光+NTPを使った時刻同期とubuntu 22、PiOS bookworm(もしかするとubuntu 24も?)についてのメモ
はじめに
自分のネット環境(フレッツ光)で、PiOS bookwormの時刻同期ではまり、なんとか、回避策らしきものを見つけたので、メモに起こしてみました。
なんか、うまく時刻同期できないのがいる
自分のネット環境だと、ubuntu22が動いているPCで、標準のsystemd-timesyncdで家LANの外のNTPサーバと時刻同期はできている。
が、PiOS bookwormが動いているPi3Bでは、標準のsystemd-timesyncdでは、家LANの外のNTPサーバとうまく同期してくれない。ただ、NTPサーバを家LANのNTPサーバに設定すると、サクッと同期してくれる。
最初は、iptablesとかufwとかを疑うも、そもそも入れていなかったのと、iptablesを入れてみても、何も設定が入っていないことが判明。
ほかのNTPをしゃべるパッケージを試す
PiOS bookworm上で、systemd-timesyncdをapt removeして、apt installで古からのntp/ntpdを入れてみる。
ntpdは家LANの外のNTPサーバとは同期せず、ntpdateだとなぜかOK。
気を取り直して、OpenNTPDを入れてみたところ、なぜか、これのntpdだと、家LANの外のNTPサーバと同期してくれる。
上の現象は、IPv4 onlyでもIPv6 onlyでも混在でも変わらず。
もしや、DSCPかな?
パケットキャプチャして、追いかけてみると、家LANの外のサーバとうまく同期してくれるほうは、送出パケットのDSCPという値が0x0、ダメなほうは、0x46ということが判明。
で、DSCP値が、0x46の場合は、NTPサーバからの返答パケットそのものが返ってこない。
とりあえず、古からのntpで、奮闘
古からの、ntpのconfiguration fileの、ntp.confには、DSCPなる設定が書ける[1] ことを見つけて、試しに、「DSCP 0」の行を追加したところ、あっさりと、家LANの外のNTPサーバと同期。
パケットキャプチャーでも、ntpの送出パケットのDSCP値が0x0で、NTPサーバからの返答パケットが確認できた。
[1] https://www.ntp.org/documentation/4.2.8-series/miscopt/#commands-and-options
さて、systemd-timesyncdのほうは?
色々調べてみるに、DSCPの類の設定ができる情報にはたどり着けず、PiOS bookworm上で、apt source systemdで、使われているsystemdのソースを落としてきてみて、掘ってみた。
もしかして、ソースにハードコード?
掘ってみたところ、それらしいところを見つけた。
ubuntu22ではIPTOS_LOWだったのが、ubuntu24とPiOS bookwormでは、IPTOS_DSCP_EF。
もしかして、DSCP値が、ソースにハードコードされている?
ってことは、systemd-timesyncdだと、自分の環境では、もはや、家LANの外のNTPサーバと同期できないってことなの?
※識者のかたからの情報お待ちしています。
ーー
>lsb_release -a && grep -n --color IPTOS src/timesync/timesyncd-manager.c
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
666: (void) setsockopt_int(m->server_socket, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
ーー
>lsb_release -a && grep -n --color IPTOS src/timesync/timesyncd-manager.c
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble
656: (void) socket_set_option(m->server_socket, addr.sa.sa_family, IP_TOS, IPV6_TCLASS, IPTOS_DSCP_EF);
ーー
>lsb_release -a && grep -n --color IPTOS src/timesync/timesyncd-manager.c
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
655: (void) socket_set_option(m->server_socket, addr.sa.sa_family, IP_TOS, IPV6_TCLASS, IPTOS_DSCP_EF);
ーーそのほか
知人からの情報で、自分と同じネット環境(フレッツ光)の人で、やはり、DSCP値ではまっている人がいる [2] ことを知りました。
[2] https://qiita.com/hoto17296/items/d8874a67b082dcc42516
記事の方は、IPv6でのsshができなくて困ったのだそうで、IPv4 over IPv6環境でも同じことが起こるのだそうです。
自分の場合は、これに当てはまっていたので、今回のように、時刻同期で、はまったようです。
※ DS-Lite や MAP-E による IPv4 over IPv6 を設定している場合は IPv4 での SSH 接続でも同様の問題が発生する。
さいごに
PiOS bookwormで、systemd-timesyncdをremoveして、古のntpをinstallして、DSCP設定をしてやれば、回避はできそうな目途は見えました。
また、まだ、試せてはいないのですが、ubuntu24でも、同じ現象が出るかも、と思ったりです。
systemd-timesyncdを用いたNTPでの時刻同期にはまった人の参考になれば、です。
