태그 보관물: ntp

NTP server config

NTP server setting

ntp server … 당연한듯 하면서도 매우 어렵다.

RHEV 시험을 보는데 ntp 설정을 하지 못해 쩔쩔맨적이 있다. 이때 뿐만이 아니라 time이란게 당연히 맞다고만 생각하지 어떻게 맞는지는 생각해본적이 없었던 것 같다.

이전에 한번 ntp에 관해 조금 본적이 있는데… 그때도 굉장히 어려워서 잘 이해가 안갔었다. 그래서 일단 그냥 되는거 외워서 쓰자 라고 생각했는데… 역시나 외워서 쓰는데는 한계가 있다.

그래서 이번에 조금 더 살펴 봤다.

ntpnetwork로 연결되어 있는 컴퓨터들끼리 clock 시각을 동기화 시키는데 사용되는 protocol이다.

ntpcomputer clock 시간을 1/1000초 이하 까지 동기화 시키기 위해 협정세계시(UTC Coordinated Universal Time)를 사용한다.

Computer network 에서 정확한 시간을 유지하는것은 여러가지 이유로 아주 중요하다. 수십분의 1초 정도의 차이만으로도 큰 문제가 발생될 수 있다.

예를 들어 보안메커니즘이나 여러대의 컴퓨터가 하나의 파일시스템을 수정하는것(NFS, CIFS)이나, 그 반대의 경우(분산 파일 시스템 ceph, lustre …)에도 정확히 동기화된 clock 시간에 의존해야 한다. 항공기의 운항 궤적을 그림으로 표시해 주는 항공관제 시스템에도 매우 정확한 시간측정이 요구되는것은 당연하다.

협정세계 시각은 무선이나 위성시스템 등 여러가지 방법으로 얻어진다. GPS 나 정부기관 등과 같은 특수한 수신자들은 보다 높은 수준의 서비스를 이용하는것이 가능하지만, 모든 컴퓨터에 수신기를 장착하는것은 비 경제적이며, 현실성이 없다. 그 대신에 시각 서버로 지정된 컴퓨터들에만 수신기를 장착하고, 이 서버들과 network으로 연결되어 있는 computer들의 clock 시각은 NTP 와 같은 protocol을 사용하여 동기화 하는 것이다.

협정세계시 로부터 떨어져 있는 수준을 표시하기 위해 흔히 계층번호를 쓰는데 0번 계층은 전용 송신기 또는 위성 위치추적 시스템으로 부터 수신된 실제 시각인 무선 클록을, 1번 계층은 이 무선 클록과 직접 연결되어 있는 컴퓨터의 클록을, 2번 계층은 1번으로부터 시각을 받은 컴퓨터 등으로 원천 협정 세계시로부터 멀수록 계층 번호거 커져 간다.

NTP라는 용어는, protocol과 컴퓨터상에서 실행되는 client / server program, 둘 모두에 대해 사용된다. program은 사용자에 의해 NTP client , NTP server 또는 둘 모두로 해석 될 수 있다. NTP client는 시각 server에 정확한 현재 시각을 교환할 것을 요구한다. 이 교환의 결과를 통해, clientserver의 시각과의 차이를 이용하여 link 지연시간을 계산할 수 있으며, 자신의 clockserver에 있는 clock 과 일치 하도록 조정할 수 있다. 하나의 규칙으로서, 처음 clock을 맞추기 위해서는 5~10 분동안 모두 6번의 시각 교환이 요구된다. 일단 시각 동기화가 끝나면, client는 매 10분 마다 message 교환을 통해 clock을 수정 한다. Clock 동기화의 신뢰도 및 정확도를 높히기 위해서 여러대의 서로 다른 server와 다양한 network경로가 사용된다. Client / server 동기화에 아울러, NTP broadcast 를 통한 컴퓨터 clock동기화도 지원한다. NTP는 매우 높은 수준의 내 고장성과 확장 가능성을 염두에 두고 설계 되었다.

NTP server 에서 사용되는 용어

– Reference Clock – GMT, UTC와 같이 표준시간 또는 참고 시간( 기준 시간 )

– Strata – NTP sever의 계층적 구조

– Stratum-1 Server – NTP 1 계층 server

– Stratum-2 Server – NTP 2 계층 server

– … -15 계층 까지 존재.

– Drift file – PPM(Parts-Per-Million) 단위로 offset에 일치하는 단일 부동 소수점이 들어가 있다. (:/var/ntp/ntp.drift)

– Resolution – 시간 제공 장치에서 사용하는 시간의 최소 단위.

) 손목시계의 Resolution : 1

– Precision – 컴퓨터 프로그램에서 사용하는 시간의 최소 단위.

– Accuracy – 시간의 정확성. 기준시간(UTC) 과 얼마나 근접한가를 나타냄.

– Jitter – 시간을 측정했을 때 생기는 오차 중 작은 값.

– Wander – 시간을 측정 했을 때 생기는 오차 중 큰 값.

UTC & GMT

UTC (Universal Time Coordinate) 협정세계시, 그리니치 표준시 대신에 사용되는 표준시. 협정세계시는 국제사회가 사용하는 과학적 시간의 표준이다.

197211일 부터 시행된 협정세계시에서는 67년 국제도량형총회가 정한 세슘원자의 진동수에 의거한 초의 길이가 그 기준(원자초)으로 쓰인다. 그 때까지 시간의 기준으로는 지구의 자전에 의한 평균태양시와 지구의 공전에 의한 태양년에서 산출한 초의 길이가 쓰였다. 그리니치 표준시(GMT)는 원래 평균태양시를 기준으로 한 것이었다. 따라서 원자시계를 표준으로 하면서 부터 GMT라는 명칭이 실체(実体)를 바르게 나타내지 못하는 불합리한 점이 생겼다. 이러한 문제를 없애기 위해서 1978년 국제무선통신자문위원회(CCIS)총회는 통신분야에서는 금후 그리니치평균시를 협정세계시(UTC)로 바꾸어 쓰자는 권고안을 채택하였다.

GMT(Greenwich Mean Time) 그리니치 표준시.

그리니치 천문대를 지나는 본초자오선(그리니치자오선)을 기준으로 하는 시. 약호 GMT. 약칭하여 그리니치시 라고도 한다. 1925년 이전의 그리니치시는 정오를 0 시로 하여 시간을 재기 시작하는 방식의 천문학용 평균태양시의 명칭이었다. 이에 반해 일상생활에서는 자정을 0시로 하여 시간을 재는 방식이 사용되었으며, 이것을 그리니치상용시(GCT)라고 하였다. 192511일 국제천문연합에서는 그리니치시를 12시간 압당겨 그리니치상용시와 일치 시켰으며, 이를 세계시라고 하여 전세계 공통의 표준시로 사용하였다. 그러나 지구의 자전을 근거로 한 이 세계시는 수정시계나 원자시계와 비교한 결과 지구 자전의 불규칙성에 의한 오차가 있으므로 1972년 이후에는 새로이 협정세계시가 세계표준시로 사용되었다. 협정세계시란 세계시와는 달리 원자 방사의 진동수를 기준으로 하고, 원자시의 초를 세분화 하여 세계시와의 차이가 0.9초 이내가 되도록 만든 것이다.

# date +%s command 입력 시 197211일 로 부터 몇초가 흘렀는지 확인 할 수 있다.

1468925136 초 만큼 흘러 있더라…

단절된 환경에서의 ntp server 를 만들어보자.

원격에 ntp server 가 있는경우 client 로 연결 시키는 건 쉬우므로…

# vim /etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict ::1

restrict 10.1.0.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0 iburst

fudge 127.127.1.0 stratum 10

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

disable monitor

###

Server 127.127.t.u

fudge 127.127.t.u stratum 10

t clocktype이고 uunit number 이다.

t Clock type 46가지나 있지만 흔히들 단절된 환경에서 ntp server 를 꾸리는거면 1을 쓰면된다.

만약 GPS나 원자시계를 이용해서 NTP server 를 꾸리는 거라면 PTP(Precision Time Protocol) manual page를 찾아보자.

u  0 ~ 3 사이의 unit number 를 쓰면 된단다. 일반적으로 0을 쓴다.

그러면 server 127.127.1.0 이 되는데 여기서 중요한점, 절대로 localhost127.0.0.1 이렇게 적어 넣으면 안된다. Ntp server 에서의 127.127 local의 시간을 참조한다는 뜻이므로 반드시 시켜줘야한다.

아래의 fudge 는 날조하다 사기치다 라는 뜻이 있는데, ntp server stratum을 날조 시켜 준다. 이 이후 부터 붙는 client들은 stratum11이 되는것이다.

fudge 127.127.1.0 stratum 10

restrict 구문은 service 를 허용 할 access control list이다.

# man ntp_acc command로 사용법을 확인 할 수 있는데. 각 한줄 씩 알아보면…

restrict default nomodify notrap nopeer noquery

default 0.0.0.0/0 을 의미한다.

nomodify run time중에 재설정을 허용하지 않는다는 의미이다.

notrap mode 6 controll message trap service를 거부 하겠다는 의미이다.

nopeer 동일계층의 peer를 만들지 않겠다는 의미이다. 지금 설정에서는 stratum 11 peer이다. client가 아니다. Client stratum 12이다.

noquery ntpq, ntpdc querie에 응답하지 않겠다는 의미이다.

종합해보면 모든대역에서 오는 쿼리를 응답하지 않겠다는 의미이다. 이것은 기본설정에 들어가 있다.

rstrict 127.0.0.1 ### 자기 자신에게 허용을 하겠다는 의미이다.

restrict ::1 ### ipv6 의 자기자신에게 허용을 하겠다는 의미이다.

restrict 10.1.0.0 mask 255.255.255.0 nomodify notrap

이 구문이 우리가 service를 허용할 대역이다.

includefile /etc/ntp/crypto/pw ### ntp.conf 의 추가 설정파일을 지정한다. pw file을 열어보면 암호화된 password를 적으라고 되어 있는데 궂이 저기 적지 않고 ntp.conf 에 적거나 다른 어딘가에 지정하여 적어도 상관없다.

keys /etc/ntp/keys ### md5 로 암호화된 key file 의 위치를 지정한다.

disable monitor ### monitoring을 비활성화 한다. 일반적인 ntp server 에서는 monitoring을 사용하지 않는다.

# systemctl restart ntpd

### ntp service 기동

# systemctl enable ntpd

다음 아래 두개의 command를 사용하여 상태를 확인하자.

[root@controller ~]# ntpstat

synchronised to local net at stratum 11 ## 11 계층에서 동기화 됨 을 의미 10ntp service이고 이 service를 받는 local computer11 계층이 된다.

time correct to within 11 ms ## 11 milli second 이내에서 정확하다 라는 의미이다.

polling server every 64 s ## ntp server 에서 64초에 한번씩 시간을 가져온다.

[root@controller ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

*LOCAL(0) .LOCL. 10 l 25 64 377 0.000 0.000 0.000

[root@controller ~]#

맨 앞의 * remote server 의 상태 mark이다.

Mark

‘ ‘ (reject ) communication이 불가능한 서버

x’(falseticker)falseticker 검사결과 사용되지 않는 서버

.’(execess) 참조서버가 많아서 사용되지 않는 서버

’(outlayer) clustering 검사결과 사용되지 않는 서버

+’(candidat) 접속 test를 합격하여 언제든지 참조가 가능한 서버

#’(selected) 동기 거리가 멀지만 참조가 가능한 서버

*’(sys.peer) 동기중인 서버

o’(pps.peer) 동기중인 서버(동기는 PPS 신호로 부터 간접적으로 행해짐.)

remote # local(0)으로부터 시간을 가져왔다는 뜻이다. local(0)10계층이며(service를 받는 local computer11 계층이다.) 현재 local system clock을 뜻한다.

refid # Kiss code reference id를 나타낸다. 해당 ntp serverreference 하고 있는 serveripcode가 나온다. 현재의 경우 stratum 10 을 가리키고 있는 것이고, 이는 ntp server local에 있는 system clock을 가리킨다. Ntp server local stratum 11이다. Client 12 이고

refid 는 다음과 같이 있다.

The refid can have the status values:

An IP address – The IP address of a remote peer or server;

.LOCL. – This local host (a place marker at the lowest stratum included in case there are no remote peers or servers available);

.PPS. – “Pulse Per Second” from a time standard;

.IRIG. – Inter-Range Instrumentation Group time code;

.ACTS. – American NIST time standard telephone modem;

.NIST. – American NIST time standard telephone modem;

.PTB. – German PTB time standard telephone modem;

.USNO. – American USNO time standard telephone modem;

.CHU. – CHU (HF, Ottawa, ON, Canada) time standard radio receiver;

.DCFa. – DCF77 (LF, Mainflingen, Germany) time standard radio receiver;

.HBG. – HBG (LF Prangins, Switzerland) time standard radio receiver;

.JJY. – JJY (LF Fukushima, Japan) time standard radio receiver;

.LORC. – LORAN-C station (MF) time standard radio receiver. Note, no longer operational (superseded by eLORAN);

.MSF. – MSF (LF, Anthorn, Great Britain) time standard radio receiver;

.TDF. – TDF (MF, Allouis, France) time standard radio receiver;

.WWV. – WWV (HF, Ft. Collins, CO, America) time standard radio receiver;

.WWVB. – WWVB (LF, Ft. Collins, CO, America) time standard radio receiver;

.WWVH. – WWVH (HF, Kauai, HI, America) time standard radio receiver;

.GOES. – American Geosynchronous Orbit Environment Satellite;

.GPS. – American GPS;

.GAL. – Galileo European GNSS;

.ACST. – manycast server;

.AUTH. – authentication error;

.AUTO. – Autokey sequence error;

.BCST. – broadcast server;

.CRYPT. – Autokey protocol error;

.DENY. – access denied by server;

.INIT. – association initialized;

.MCST. – multicast server;

.RATE. – (polling) rate exceeded;

.TIME. – association timeout;

.STEP. – step time change, the offset is less than the panic threshold (1000ms) but greater than the step threshold (125ms).

st # 몇 계층의 stratum을 참조 하는지 나타낸다.

t # type 을 나타낸다. u : unicast, b : broadcast, l : local

when # 마지막 패킷을 가져온 후로부터 몇초가 지났는가를 뜻한다.

Poll # 몇초에 한번씩 시간을 가져 오는지 나타낸다.

Reach # 시간을 가져온지 얼마나 지났는가를 나타내는데… 8진수로 나타내면서… 8비트 까지 밖에 못 나타낸다. 이게 ntp server 가 기동해서 몇번이나 시간을 가져 왔는가를 체크하는것 같다. 최대가 377인데 2진수 11111111 8진수 이다. 패킷을 1번 가져 올때마다 1비트씩 1로 체운다. 처음 시작할 때는 1(00000001) 로 시작한다. 이때의 reach1이다. 이게 너무 낮으면 내 아래의 client가 시간을 가져가지 못한다. 37(00011111) 최소 5번의 패킷을 가져오기 전 이라면 clien가 시간을 가져가지 못하더라.

Delay # roundtrip delay

offset # offset

jitter # 시간을 측정했을 때 생기는 오차 중 작은 값

 

client 에서의 설정

client # vim /etc/ntp.conf

server 10.1.0.11 iburst

### 위 구문을 추가 해 준다. 10.1.0.11 ntp server ip 이다.

iburst initialization burst인데 ntp service를 기동하면 첫 패킷을 8번 연속으로 보냄으로서 좀더 빨리 시간동기화를 하게 해준다.

[root@compute1 ~]# ntpstat

synchronised to NTP server (10.1.0.11) at stratum 12

time correct to within 15 ms

polling server every 64 s

[root@compute1 ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

*controller.test LOCAL(0) 11 u 26 64 377 1.159 -0.110 0.148

client 에서 이렇게 나오면 잘 연결이 된것이다.

 

다음을 참조 함

http://asone.tistory.com/169

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/index.html

http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831

http://se.uzoogom.com/185