0
0

定時帰る術-chronydのイロイロ

Last updated at Posted at 2024-01-30

最近、自宅鯖を遊んでいる時に、家の内部NTP同期もやってみようかと思って、設定してみたら、うまくいかない
さっそく環境をみてみよう。

環境

■NTPサーバ

[root@test02 ~]# ip a show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:81:9f:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.102/24 brd 192.168.1.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
[root@test02 ~]#
[root@test02 ~]#
[root@test02 ~]#
[root@test02 ~]# egrep -v "^$|^#" /etc/chrony.conf
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.1.0/24
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
log measurements statistics tracking

■クライアント

[root@test01 ~]# ip a show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:df:e0:bf brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
[root@test01 ~]#
[root@test01 ~]#
[root@test01 ~]#
[root@test01 ~]# egrep -v "^$|^#" /etc/chrony.conf
server 192.168.1.102 iburst  prefer
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
log measurements statistics tracking
[root@test01 ~]#
[root@test01 ~]#
[root@test01 ~]# chronyc -n sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.1.102                 0   6     0     -     +0ns[   +0ns] +/-    0ns
[root@test01 ~]# ping -c 1 192.168.1.102
PING 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
64 bytes from 192.168.1.102: icmp_seq=1 ttl=64 time=0.410 ms

--- 192.168.1.102 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.410/0.410/0.410/0.000 ms
[root@test01 ~]#

トラブルシューティング

■事象
サービス何回もrestartしてみたが、「?」のままで「*」になってくれない

■犯人さがす
直感的には、クライアント側は問題ないと思って、サーバ側の設定を見てみよう

①まずは、セキュリティ系は、大丈夫そう

[root@test02 ~]#
[root@test02 ~]# systemctl is-active firewalld nftables
inactive
inactive
[root@test02 ~]# getenforce
Disabled
[root@test02 ~]#

②chronydのallow設定も問題なさそう

[root@test02 ~]# grep allow /etc/chrony.conf
allow 192.168.1.0/24

③NTPの仕組み的には、まずはクライアントからリクエストをサーバに送る
なので、クライアントからのpingは大丈夫だけど、サーバからクライアントへの通信がちゃんと通るかをping確認しても、大丈夫そう

[root@test02 ~]# ping -c 1 192.168.1.101
PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=1.75 ms

④実はここでもう手上げな状況、仮想環境の何かのネットワークバグかと信じたく、あきらめようとする時に、あれ、パケットキャプチャまだやってないことが気づいた

とりあえず、クライアント側でパケットキャプチャをとってきて、「wireshark」で確認(-wを付けず、そのまま表示させてもよい)

 tcpdump host 192.168.1.102 -i enp0s8 -vv -w /var/tmp/101_4.cap

■パケット確認
クライアント側の「Peer Clock Stratum: unspecified or invalid (0)」で、対向のサーバに「「Stratum」がわからないから、教えて」ってサーバに投げた。
①クライアント
クライアント_1.png

②サーバ
が、サーバ側も「「Stratum」のことなんでいらないよ」ってクライアントに返した。
サーバ_1.png

■解決
ここで、やっとサーバ側chronyd設定が足りないのが気づいた
↓のところがコメントアウトされているままのが原因でした。
↓を外して同期できた。

[root@test02 ~]# grep -i Stratum /etc/chrony.conf
#local stratum 10

振り返

chronydを使って、ちゃんと時刻同期ができているのかは「chronyc -n sources」を使うことが多い
各列の意味がちゃんと理解できなくて、今回は見てみようかと思います。

■Stratum
サーバ側の「Stratum」設定値
※一番上位のNTPサーバは「Stratum 1」、次は「Stratum 2、Stratum 3など」
(15まで、デフォルトは10)
実際のパケットをみると、「Stratum」設定値をプラス1でやり取りしてるようにみえる。
例えば、デフォルト10の場合は、11でクライアントに送る。
(原因推測:NTPの世界では、「Stratum 1」が一番上位信頼性が高いサーバとなり、それ以外のNTPサーバ(自社/自宅などのNTPサーバ)が「Stratum 1」であることがあり得ないことだと同じと考える。「Stratum 1」にしても、chronyで「Stratum 2」にする仕組みだと思う。)

■poll
chronyの方で自動的に変更してくれる。安定だと判断された場合は、最大10になる。
「2^poll」の計算結果でサーバと同期する(pollが6の場合、2^6=64)

■Reach
サーバとずれがあった場合は、「Reach」が更新される。
最近の8回での同期が大丈夫であれば、「377」が表示されるた。
(「377」であれば、大丈夫って言えるかも)

■LastRx
クライアントがついの前から受信されたのか。
安定してない場合、「2^poll」の計算結果になったら、サーバと同期する。

■Last sample
前回同期でのずれ[実際調整された時間]+/- 誤差範囲

[root@test01 chrony]# chronyc -n sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.1.102                10   6    17     1    +15us[  +21us] +/-  454us

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0