본문 바로가기
Linux

NTP(Network Time Protocol) 설정

by 여행을 떠나자! 2021. 11. 30.

2020.06.20

 

1. Chrony?

- NTP(Network Time Protocol) 구현체로 시스템 시간을 동기화하는 기능을 제공한다.

- RHEL 7 이전에는 ntpd를 사용하였으나 이후 chrony로 대체되었다.

- NTP에서 사용하는 포트는 UDP 123, 323이다. 
   The UDP port 123 needs to allow the client access
   The UDP port 323 needs to connect from a remote system.

- Stratum (계층)

   NTP는 계층적인 구조를 가지며, 각각의 계층은 상위 계층으로부터 시간을 동기화한다.

   계층은 0부터 15까지 총 16개로지역을 기반으로 구성되는데, 네트워크 지연을 최소화 가기 위함이다. 

   0 레벨은 stratum 0이며, Primary reference clock 장비에는 GPS, 세슘 원자시계 등이 있다.

http://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Network_Time_Protocol_servers_and_clients.svg/500px-Network_Time_Protocol_servers_and_clients.svg.png

 

 

2. Chrony 구성

- 본 문서에서는 방화벽 내부에 있는 서버를 대상으로 설정하였고, NTP 서버 접속을 고려해서 NTP 서버 목록을 변경하였다.

   time.google.com (Stratum 1)

   time.kriss.re.kr (Stratum 2)

   time.bora.net (Stratum 3)
- Stratum 1인 NTP 서버에 접속할 경우 접속되는 서버가 변경되므로 방화벽 설정시 이점을 고려해야 한다.

   time.google.com ==> time[1-4].google.com

 

a. Chrony 설정

- chrony.conf 파일을 수정하고 chronyd를 기동 한다.

   ✓ 접속할 NTP 서버 목록을server 옵션을 설정

   ✓ 본 서버에 NTP 클라이언트의 접속을 허용하도록 allow 옵션에 클라이언트 IP 주소 대역을 설정

   ✓ 본 서버에 참고할 로그를 저장하도록 log 옵션을 설정

# yum install chrony -y
...
# vi /etc/chrony.conf
server time.google.com iburst
server time.kriss.re.kr iburst
server time.bora.net iburst
...
# Allow NTP client access from local network.
allow 14.52.244.0/24

# Select which information is logged.
log measurements statistics tracking
...

# systemctl restart chronyd
#

 

b. 시간 동기화 확인

- chronyc 명령어로 시간 동기화 상태를 확인한다. NTP 서버들의 S(State)가 '*'(current synced)이면 시간 동기화가 되고 있는 상태이다. 

# chronyc sources -v
210 Number of sources = 5

  .-- 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
===============================================================================
^* time3.google.com              1   6    37    22    -25us[ -109us] +/-  666us
^- time.bora.net                 3   6    37    12  -6830us[-6830us] +/-  127ms
^- 210.98.16.100                 2   6    37    23   -349us[ -349us] +/-  132ms    # time.kriss.re.kr
#

 

 

3. 적용 사례
- References model

https://joungkyun.gitbook.io/~/files/v0/b/gitbook-28427.appspot.com/o/assets%2F-Lm2uHz4WVd4yXRNXA_I%2F-Lm2uJmInHFWUpViQp7j%2F-Lm2udq6HfZ7SjMnrvDM%2Fstratum.jpg?generation=1565581290457671&alt=media

 

a. NTP 서버 설정

- iap01(14.52.244.134), iap02(14.52.244.134) 서버에 '2.a Chrony 설정'에서 설명한 대로 설정한다. 

- 주의할 점은 아래 NTP 클라이언트가 접속할 수 있도록 chrony.conf 파일의 allow 옵션에 IP 주소 대역을 입력해야 한다.

 

b. NTP 클라이언트 설정

- chrony.conf 파일을 수정하고 chronyd를 기동 한다.

   ✓ 접속할 NTP 서버 목록(iap01, iap02)을 server 옵션을 설정

   ✓ 본 서버에 참고할 로그를 저장하도록 log 옵션을 설정

# yum install chrony -y
...
# vi /etc/chrony.conf
server iap01 iburst
server iap02 iburst
...

# Select which information is logged.
log measurements statistics tracking
...

# systemctl restart chronyd
#
# chronyc sources -v
210 Number of sources = 1
.-- 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
===============================================================================
^* iap01                        10   6   377    21    -18ns[  -18ns] +/-   81us
^? iap02                         0   7     0     -     +0ns[   +0ns] +/-    0ns
#
 

 

4. rdate 명령어

- rdate 명령어는 지정한 서버 시간으로 동기화하며, 사용하는 포트는 37 (UDP/TCP)이다.

- NTP 서버들 중에는 rdate를 지원하지 않는 경우도 있다.

    지원 서버 : time.nist.gov, time.bora.net
    미지원 서버 : time.kriss.re.kr, ntp.kornet.net 

$ sudo rdate -p -u time.nist.gov  # UDP
rdate: [time.nist.gov]    Mon Jun 22 13:17:00 2020
$ sudo rdate -p time.nist.gov     # TCP
rdate: [time.nist.gov]    Mon Jun 22 13:17:08 2020
$
$ nc -v time.bora.net 37
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 203.248.240.140:37.
$ nc -v time.bora.net 37 -u
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 203.248.240.140:37.
$ man rdate
NAME
     rdate - get the time via the network
...
OPTIONS
     -p     Print the time returned by the remote machine.
     -s     Set the system time to the returned time.
$

 

 

 

 

'Linux' 카테고리의 다른 글

LVM - LV 사이즈 확장  (0) 2021.11.10
LVM (Logical Volume Manager)  (0) 2021.11.10

댓글