NTPDがSyncできなかった理由

  • このエントリーをはてなブックマークに追加

とあるサーバのNTPDの同期ができていなかったので調べたメモ。

1
2
3
4
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
169.254.169.123 .INIT. 16 u - 1024 0 0.000 0.000 0.000

*が付いていないしreachも0なので同期できていない。

ntpdcで該当NTPサーバとの通信の状況を見てみる。サーバはAWSのTimeServerを利用しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ntpdc -c 'showpeer 169.254.169.123'
remote 169.254.169.123, local 10.0.103.31
hmode client, pmode unspec, stratum 16, precision -22
leap 11, refid [73.78.73.84], rootdistance 0.00000, rootdispersion 0.00000
ppoll 10, hpoll 10, keyid 0, version 4, association 35382
reach 000, unreach 213, flash 0x1600, boffset 0.00000, ttl/mode 0
timer 0s, flags config, bclient, prefer
reference time: 00000000.00000000 Mon, Jan 1 1900 0:00:00.000
originate timestamp: e0754e65.00000000 Thu, May 2 2019 11:09:25.000
receive timestamp: 00000000.00000000 Mon, Jan 1 1900 0:00:00.000
transmit timestamp: 00000000.00000000 Mon, Jan 1 1900 0:00:00.000
filter delay: 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000
filter offset: 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
filter order: 0 1 2 3
4 5 6 7
offset 0.000000, delay 0.00000, error bound 3.99217, filter error 0.00000

unreach 213, flash 0x1600 unreachのカウンタが増えていますし、flashの値にも何か記録されています。

ntp.hの定義を見ると、次のようになっています。0x1600ということはTEST10|TEST11|TEST13ということ?

ntp.h
1
2
3
4
#define TEST10          0x0200  /* peer bad synch or stratum */
#define TEST11 0x0400 /* peer distance exceeded */
#define TEST12 0x0800 /* peer synchronization loop */
#define TEST13 0x1000 /* peer unreacable */

NICが2枚刺さっているサーバらしい

eth0が10.0.103.31, eth1が10.0.100.111でeth1がDEFROUTE=1
ntpdがlistenしているのはeth0のみ。

1
2
3
4
netstat -tulpn | grep :123
udp 0 0 10.0.103.31:123 0.0.0.0:* 2995/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2995/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2995/ntpd

設定ファイルを見ると、listenはeth0のみ。なのでここにinterface listen eth1を追加してntpdを再起動しました。

/etc/ntp.conf
1
2
interface listen eth0
interface ignore ipv6

結果、同期されるようになりました。

疑問点

NICは同じネットワークアドレスを持っている。そして、ip routerouteを見ると、eth1のFlags=Gが2つあるのがすごい怪しい。

1
2
3
4
5
6
7
8
9
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.100.1 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 10.0.100.1 0.0.0.0 UG 10001 0 0 eth1
10.0.100.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
10.0.100.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0

どういう設定をしたサーバなのか調査する時間がないので、ここまで。

参考