Ubuntu 20.04 NTP Service

Ubuntu Server Version 을 설치하게 되면 기본적으로 NTP 서비스를 활성화가 되어있습니다.

root@u-node-0:/etc/systemd# timedatectl -a
               Local time: Thu 2022-04-28 11:14:26 KST
           Universal time: Thu 2022-04-28 02:14:26 UTC
                 RTC time: Thu 2022-04-28 02:14:27
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes                          <<
              NTP service: active
          RTC in local TZ: no

RHEL 계열의 ntpd 혹은 chronyd 가 자동으로 설치가 되어서 그런건가?

Ubuntu 는 설치가 되면 systemd-timesyncd 라는 daemon 이 기본적으로 NTP 서비스를 수행합니다.

root@u-node-0:/etc/systemd# systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-01-15 06:36:26 KST; 3 months 11 days ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 164170 (systemd-timesyn)
     Status: "Initial synchronization to time server 91.189.91.157:123 (ntp.ubuntu.com)."
      Tasks: 2 (limit: 2343)
     Memory: 1.4M
     CGroup: /system.slice/systemd-timesyncd.service
             └─164170 /lib/systemd/systemd-timesyncd
 
Apr 06 20:29:10 u-node-0 systemd-timesyncd[164170]: Initial synchronization to time server 91.189.91.157:123 (ntp.ubuntu.com).

systemd-timesyncd의 설정을 변경하기 위해서는 /etc/systemd/timesyncd.conf 을 수정해야 되고,

root@u-node-0:/etc/systemd# cat /etc/systemd/timesyncd.conf
... 생략
 
[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

자세한 설정 수정 방법은 $ man timesyncd.conf를 참고합니다.

Chronyd

위와 같이 기본 timesyncd 를 사용하거나 내부 NTP Client 및 Server 를 구축하기 위해서는 권장되는 솔루션은 chronyd 입니다.

설치

아래 명령을 통해 설치가 가능힙니다.

$ sudo apt search chronyd
Sorting... Done
Full Text Search... Done
chrony/focal-updates,focal-security,now 3.5-6ubuntu6.2 amd64 [installed]
  Versatile implementation of the Network Time Protocol
 
$ sudo apt install chrony -y

재미있는건 chrony 가 설치가 되면 자동으로 enable 되어 있던 systemd-timesyncd는 disable 이 되고 chrony 가 enable 됩니다.

$ cat /var/log/apt/history.log
...
Commandline: apt install chrony
Install: chrony:amd64 (3.5-6ubuntu6.2)
Upgrade: libsystemd0:amd64 (245.4-4ubuntu3.15, 245.4-4ubuntu3.16), systemd-sysv:amd64 (245.4-4ubuntu3.15, 245.4-4ubuntu3.16), libpam-systemd:amd64 (245.4-4ubuntu3.15, 245.4-4ubuntu3.16), systemd:amd64 (245.4-4ubuntu3.15, 245.4-4ubuntu3.16), libnss-systemd:amd64 (245.4-4ubuntu3.15, 245.4-4ubuntu3.16)
Remove: systemd-timesyncd:amd64 (245.4-4ubuntu3.15)   <<<

$ systemctl status systemd-timesyncd
● systemd-timesyncd.service
     Loaded: masked (Reason: Unit systemd-timesyncd.service is masked.)         <<<
     Active: inactive (dead) since Thu 2022-04-28 11:15:22 KST; 7min ago
   Main PID: 164170 (code=exited, status=0/SUCCESS)
     Status: "Shutting down..."

설치가 완료되면 아래와 같이 서비스가 기동중입니다.

$ systemctl status chronyd
● chrony.service - chrony, an NTP client/server
     Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-04-28 11:15:25 KST; 7min ago
       Docs: man:chronyd(8)
             man:chronyc(1)
             man:chrony.conf(5)
   Main PID: 414899 (chronyd)
      Tasks: 2 (limit: 2343)
     Memory: 1.2M
     CGroup: /system.slice/chrony.service
             ├─414899 /usr/sbin/chronyd -F -1
             └─414900 /usr/sbin/chronyd -F -1

설정

chronyd 의 설정은 RHEL 에서 사용하는 방식과 동일하지만 설정 파일의 경로에 차이가 있습니다.

  • RHEL 계열 : /etc/chrony.conf
  • Debian 계열 : /etc/chrony/chrony.conf
$ cat /etc/chrony/chrony.conf
... 생략

pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
 
... 생략

chrony 설정 파일은 위와 같으며 내부 NTP 서비스를 하기 위해서는

allow 1.2.3.4

위와 같이 allow line 을 추가하면 됩니다.

그 외 자세한 설정은 문서 를 참고 합니다.

Check

아래 명령을 통해 NTP 서비스 동기화 상태를 확인 할 수 있습니다.

$ chronyc sources -v
210 Number of sources = 8
 
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- 91.189.91.157                 2   6   377    36  +8219us[+8219us] +/-  151ms
^- 91.189.94.4                   2   6   377    35  +4838us[+4838us] +/-  146ms
^- 91.189.89.198                 2   6   337    35  +4675us[+4675us] +/-  137ms
^- 91.189.89.199                 2   6   377    35  +5279us[+5279us] +/-  158ms
^- 194.0.5.123                   2   6   377    38  -2538us[-2538us] +/-   41ms
^- 193.123.243.2                 2   6   377    40   -778us[ -846us] +/-   36ms
^- 3.36.253.109                  2   6   377    39   -273us[ -273us] +/-   44ms
^* 163.152.23.171                2   6   377    39   -250us[ -317us] +/- 9385us

참고 문서

chhanz's profile image

chhanz

2022-05-02

Read more posts by this author