Alibaba Cloud ECS の Time Zone, NTP まわりをみてみた

## 環境
- 東京リージョン（ap-northeast-1）で ECS を立ち上げました。
- インスタンスタイプは ecs.n4.small
- OS は CentOS 7.4 です。

```

# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
```

## タイムゾーン
デフォルトのタイムゾーンは `Asia/Shanghai` でした！ UTC+8 なので、なにも気にせず使っていると、ログの時間や cron ではまりそうです。


```
# timedatectl
      Local time: Thu 2018-02-15 10:14:44 CST
  Universal time: Thu 2018-02-15 02:14:44 UTC
        RTC time: Thu 2018-02-15 10:14:43
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.
```

`Asia/Tokyo` か `UTC` にセットしておいた方が、運用上良いと思います。　

```
# timedatectl set-timezone Asia/Tokyo
# timedatectl set-timezone UTC
```

## NTP
NTP は chrony ではなく ntp が有効になっていました。

```
# systemctl list-unit-files
chronyd.service                               disabled
ntpd.service                                  enabled
```

ntp.conf を見てみました。aliyun の NTP サーバを見に行くようになっています。
これらの NTP サーバの情報は、ドキュメントにも載っていました。
https://jp.alibabacloud.com/help/faq-detail/40583.htm

```
# cat /etc/ntp.conf
driftfile  /var/lib/ntp/drift
pidfile    /var/run/ntpd.pid
logfile    /var/log/ntp.log


# Access Control Support
restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery
restrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noquery
restrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noquery
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery


# local clock
server 127.127.1.0
fudge  127.127.1.0 stratum 10


restrict ntp1.aliyun.com nomodify notrap nopeer noquery
restrict ntp1.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp2.aliyun.com nomodify notrap nopeer noquery
restrict ntp2.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp3.aliyun.com nomodify notrap nopeer noquery
restrict ntp3.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp4.aliyun.com nomodify notrap nopeer noquery
restrict ntp4.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp5.aliyun.com nomodify notrap nopeer noquery
restrict ntp5.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp6.aliyun.com nomodify notrap nopeer noquery
restrict ntp6.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noquery
restrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noquery


server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
```

時刻同期の状況も確認してみます。

```
# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 127.127.1.0     .LOCL.          10 l  662   64    0    0.000    0.000   0.000
*182.92.12.11    10.137.38.86     2 u   62   64  377   62.432  771.403   1.019
 120.25.115.19   10.137.53.7      2 u   87   64  222   74.786  776.907   1.835
 203.107.6.88    100.107.25.114   2 u   83   64  222   59.055  775.496   2.026
-120.25.108.11   10.137.53.7      2 u   31   64  377   75.766  781.655   1.435
 10.143.33.49    .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 10.143.33.50    .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 10.143.33.51    .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 10.143.0.44     .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 10.143.0.45     .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 10.143.0.46     .INIT.          16 u    - 1024    0    0.000    0.000   0.000
-100.100.5.1     10.143.0.44      3 u   17   64  377   73.744  773.212   1.256
-100.100.5.2     10.143.0.44      3 u   22   64  377   77.402  773.716   1.811
+100.100.5.3     10.143.0.44      3 u   13   64  377   73.890  772.016   3.269
-100.100.3.1     10.137.38.86     2 u   18   64  377   77.474  770.219   1.480
+100.100.3.2     10.143.0.44      3 u   15   64  377   72.587  774.374   1.591
+100.100.3.3     10.143.0.44      3 u   20   64  377   73.611  772.133   1.174
```

### ECS がグローバル IP アドレスを持ってない場合の時刻同期
上で確認していたインスタンスは、グローバル IP を持っていました。つまり、インターネットへの outbount/inbount 通信が出来るインスタンスです。

ECS をプライベートなネットワーク（グローバル IP アドレスを持たないので、インターネットへの outbount/inbount 通信が出来ない状態）で運用したい場合、時刻同期はどうなるでしょうか。

ちなみに AWS の場合は、Amazon Time Sync Service を使うことで、インターネットへの接続なしにリンクローカル IP アドレスを使って時刻同期を行うことができます。

では、プライベートな ECS を立ち上げて、時刻同期状況を確認してみます。

`100.100.3.1` に `*` が付いているので、時刻同期が出来ています！

<img width="636" alt="スクリーンショット 2018-02-16 15.00.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/135946/c14c1ef1-b2bc-5747-5b4f-a3dd45908bc4.png">

でも一つ疑問が。 `100.100.3.1` は reserved IP address なのですが、ルーティングはどうなっているのでしょうか。
実は、Alibaba Cloud の場合、 VRouter のルートテーブルに、 `100.64.0.0/10` 宛はシステムルートエントリとしてデフォルトで登録されているのです。
https://jp.alibabacloud.com/help/doc-detail/53682.htm

また、ntp.conf に記載されている NTP サーバは、名前で記載されているのに、`100.100.3.1` と名前解決できています。

DNS サーバの設定を見てみましたが、Alibaba Cloud の DNS サーバが設定されていました。　
これらの DNS サーバも　 `100.64.0.0/10` のシステムルートエントリでルーティングされるので、インターネット接続不要で名前解決することができるのですね。

```
# cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.138
nameserver 100.100.2.136
search localdomain
```

DNS サーバを上書きなどで消さないようにしておけば、インターネット接続なしに、名前解決ができ、NTP 時刻同期もできることが分かりました。　


## まとめ
- タイムゾーンのデフォルトは `Asia/Shanghai` になっているので、 `UTC`, `Asia/Tokyo` に変更するのが良いと思います。
- インターネット接続を持たない ECS も NTP 時刻同期可能
  - デフォルトの DNS サーバは消さないようにしておく