2014年11月23日日曜日

Arch Linuxで時刻同期 | NTP, systemd-timesyncd

Arch Linuxは、デフォルトで時刻合わせの機能がインストールされていないので、時刻合わせの設定が必要。時刻合わせをするには、ntpを使う方法とsystemd-timesyncdを使う方法がある。時刻合わせにおいて、ntpはホスト側にもクライアント側にもなれる。systemd-timesyncdはクライアント側のみ。

自分は、ホスト側になることはないので、設定が簡単なsystemd-timesyncdを使っている。サーバー用途でなく、普段使いのPCであればsystemd-timesyncdがいいと思う。ただ、timesyncdはまだ歴史が浅いと思うので、今後ゴタゴタがあるかもしれないのが気になるところ。

NTPを使う場合
pacmanからntpパッケージをインストールする。
# pacman -S ntp


公式wikiによると、The ntp package provides a default configuration file that should make ntpd work out of the box in client mode, without requiring custom configuration.らしい。クライアントモードで使うのであれば、/etc/ntp.confのサーバーを日本のサーバーに変更するだけで良い気がする。ntpは使ってないので、設定は特に精査していない。
# vim /etc/ntp.conf

# For additional information see:
# - the ntp.conf man page
# - http://support.ntp.org/bin/view/Support/GettingStarted
# - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon

# Associate to public NTP pool servers; see http://www.pool.ntp.org/
server 0.jp.pool.ntp.org iburst
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
server 3.jp.pool.ntp.org iburst

# By default, the server allows:
# - all queries from the local host
# - only time queries from remote hosts, protected by rate limiting and kod
restrict default kod limited nomodify nopeer noquery notrap
restrict 127.0.0.1
restrict ::1

# Location of drift file
driftfile /var/lib/ntp/ntp.drift

設定の意味は
未指定: 制限なし(全てのNTPパケットを許可)
ignore: 全てのNTPパケットを無視
nomodify: 時刻問合せには応答するが、時刻の変更要求などは無視
notrust: 時刻問合せには応答するが、自身の時刻合わせには使用しない
nopeer: 指定ホストと相互に同期しない
noquery: NTPの実装に依存する時刻問合せを無視

設定ファイルがかけたら、デーモンを起動する。
# systemctl daemon-reload
# systemctl start ntpd.service
# systemctl enable ntpd.service

ntpq -pで状態を確認。
$ ntpq -p

ホストの状態は、
* 同期している
+ いつでも同期できる
x クロックが不正確なため無効
空白(スペース) 以下のような理由で使用不可となっている
・不正経路やサーバダウン等の理由でサーバと通信できない
・サーバやサーバまでの経路のファイアウォール等で123/udpのパケット受信を拒否している
・サーバが自分自身(ループ)
・単に同期に時間がかかっている(しばらく待ってみる)


timesyncdを使う場合
timesyncdを使う場合、systemdのバージョンが217以上であったほうが良い。一応、213以上であれば使えるようになっているらしいが、設定ファイルの書き方が違ったり、216より古いとsystemd-networkdを起動させないといけなかったりしてめんどくさい。systemdのバージョンの確認をする。
$ pacman -Qi systemd

Name           : systemd
Version        : 217-6
Description    : system and service manager
Architecture   : x86_64
URL            : http://www.freedesktop.org/wiki/Software/systemd
Licenses       : GPL2  LGPL2.1  MIT
Groups         : None
Provides       : nss-myhostname  systemd-tools=217  udev=217
Depends On     : acl  bash  dbus  glib2  kbd  kmod  hwids  libcap  libgcrypt  libsystemd  libidn  lz4  pam  libseccomp
                 util-linux  xz

バージョンが217以上であれば、まず、timedatectlから時刻合わせ機能を有効にする。もし、ntpとかchronyをこれまで使っていたら、systemctlから無効にしてアンインストールしておいたほうが良いと思う。
# timedatectl set-ntp true 

timesyncdの設定ファイルは/etc/systemd/timesyncd.confになる。このファイルに、使いたいNTPサーバー"NTP="以下に指定する。複数指定する場合は、空白を区切りとする。予備サーバーは"FallbackNTP="以下に指定する。
# vim /etc/systemd/timesyncd.conf

[Time]
NTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org

状態をsystemctlから確認する。こんな表示になれば動いてるはず。
$ systemctl -l status systemd-timesyncd

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled)
   Active: active (running) since 日 2014-11-23 18:21:04 JST; 2h 47min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 1142 (systemd-timesyn)
   Status: "Using Time Server 129.250.35.251:123 (0.arch.pool.ntp.org)."
   CGroup: /system.slice/systemd-timesyncd.service
           └─1142 /usr/lib/systemd/systemd-timesyncd

11月 23 18:21:04 Alpha systemd-timesyncd[1142]: Using NTP server 129.250.35.251:123 (0.arch.pool.ntp.org).
11月 23 18:21:04 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 64s/-0.000s/0.028s/0.000s/+0ppm
11月 23 18:22:08 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 128s/+0.000s/0.028s/0.000s/+1ppm
11月 23 18:24:16 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 256s/+0.001s/0.028s/0.000s/+2ppm
11月 23 18:28:32 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 512s/+0.001s/0.028s/0.001s/+3ppm
11月 23 18:37:05 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 1024s/+0.001s/0.029s/0.001s/+3ppm
11月 23 18:54:09 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 2048s/+0.003s/0.029s/0.001s/+4ppm
11月 23 19:28:17 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 2048s/+0.004s/0.029s/0.002s/+5ppm
11月 23 20:02:25 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 2048s/-0.001s/0.028s/0.003s/+5ppm (ignored)
11月 23 20:36:34 Alpha systemd-timesyncd[1142]: interval/delta/delay/jitter/drift 2048s/-0.005s/0.028s/0.006s/+4ppm

NTPはmonlistリクエストによるDDoS攻撃とかあるけど、systemd-timesyncdを使っている場合は問題ないんだろうか。chrootを使ったほうがいいとか、monlistのめんどくささから、timesyncdを使っているんだけど。


参考:
[1]Network Time Protocol daemon
[2]systemd-timesyncd

スポンサーリンク

スポンサーリンク

0 件のコメント:

コメントを投稿