본문 바로가기

지식/system

NTP 작동법

Time Server Operation
 이 문서는 안녕 리눅스를 이용하여 time server 를 운영하는 것을 목적으로 한다. 리눅스 서버에서 시간 동기화를 이용하는 방법으로는 rdate 와 ntp 방식이 있다. 이 두 방식에 대한 차이는 http://time.ewha.net 을 참조하고, 여기서는 ntp 방식을 이용하여 time server 를 운영하는 방법을 설명하도록 한다. 기본적으로, ntp 방식은 straum 이라는 계층구조를 가지는데, straum 0 은 GPS 나 세슘 원자 시계등 시간을 구하는 장비를 의미하며, straum 1 은 GPS 나 세슘 원자시계등에서 직접 시간을 동기화하는 서브들을 의미한다. straum 2 부터는 계속 트리 구조로 내려가 게 된다. 여기서 straum 을 설명하는 이유는, 무턱대고 무조건 straum 1 에 동기화를 한다면, 이 straum 1 서버들은 부하를 견디지 못할 것이고, 그렇다면 서비스를 포기하는 현상이 발 생할 수 있게된다. 또한, 이렇게 사용하는 것은 ntp 설계 의미를 무시하는 일이기도 하 다. 그래서, 보통 사용하는 환경은 straum 2 에서 동기화를 하고, 이 동기화를 받은 straum 3 서버에 나머지 같이 운영하는 서버들을 peer 로 해서 동기화를 시키면 된다. ntp protocol 을 이용했을 경우, straum 1 ~ 15 까지의 편차가 micro seconds 이므로, 굳이 straum 1 이나 2 를 고집할 이유가 전혀 없다고 봐도 무방하다. 국내에서 운영중인 straum 2 서버는 다음과 같다. * straum 2 list ntp.ewha.net ticktock.ewha.net ntp1.epidc.co.kr ntp2.epidc.co.kr time.bora.net time.korserve.net t2.korserve.net rokkorclub.net time.wonkwang.ac.kr noc6-3.koren21.net 최신 목록은 http://time.ewha.net/domestic.shtml 에서 확인을 하도록 한다. 그럼, 본격적으로 설정을 해 보도록 하며, 서버가 A,B,C 가 있다고 가정을 하고, (물론 더 많을 수도 더 적을 수도 있다.) A 서버를 서비스를 위한 time server 로 설정을 하 고 B 서버와 C 서버를 A 서버에서 sync 하도록 설정을 하는 것을 예로 한다. 이하 부터 는 A 를 서버, B 와 C 를 peer 라 호칭을 한다. 방화벽 설정에 대해서는 3 번 항목을 참고한다. 1. straum 3 서버 설정하기 straum 3 라고 명칭한 이유는 straum 2 에서 sync 를 하기 때문이다. straum 2 에서 sync 하는 이유는, straum 1 의 수가 워낙적고, 접속이 원할하지 않으며, 실제로 접 속을 제한하는 서버들이 많기 때문이다. /etc/ntp.conf 를 다음과 같이 수정을 한다. 

 Hanterm - cat /etc/ntp/ntp.conf
 [oops@main dir]$ cat /etc/ntp/ntp.conf restrict default nomodify notrap noquery restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap # straum 2 server list server ntp.ewha.net server ntp1.epidc.co.kr server time.bora.net server time.wonkwang.ac.kr server time.korserve.net server noc6-3.koren21.net driftfile /var/lib/ntp/drift broadcastdelay 0.008 keys /etc/ntp/keys [oops@main dir]$ 
 straum 2 서버 리스트는 위의 링크를 참조하여 설정을 하도록 한다. /etc/ntp/ntp.conf 는 안녕 리눅스의 경우이다. 보통 따로 패치를 하지 않는다면 기본 값으로 /etc/ntp.conf 를 사용한다. driftfile 과 key 의 경우에도 배포본마다 위치가 다를 수 있으니 알아서 확인을 하도록 한다. restric 설정은 peer 들이 본 서버로 sync 하는 것에 대한 제한을 한다. restrict default nomodify notrap noquery 이 설정은 기본으로 모든 권한을 주지 않음을 의미한다. restrict 127.0.0.1 127.0.0.1 즉, 서버 자신에서는 모든 권한을 가진다. restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap 192.168.0.0 ~ 192.168.0.255 c class 에서는 질의를 할 수 있는 권한을 가진다. 즉, 위의 2 라인은 항상 기본으로 들어가는 설정이며, peer 를 거느릴 서버에서는 (즉 A 의 입장에서는) 하위 peer 들의 질의를 받을수 있도록 3 번째 라인과 같이 restrict 설정을 해 주어야 한다. 설정을 마쳤다면, service ntpd restart 명령으로 ntpd 를 시작 하고, ntpq 명령을 이 용하여 sync 를 잘 하고 있는지 확인을 한다. 

 Hanterm - ntpq -p
 [oops@main dir]$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *211.189.50.33 220.73.142.73 2 u 62 64 17 0.822 6.191 0.052 +ntp1.epidc.co.k 192.168.17.8 2 u 60 64 17 1.217 6.426 0.187 -zero.bora.net 192.12.19.20 2 u 60 64 17 2.427 2.205 0.226 -mrtg.wonkwang.a 203.254.163.74 2 u 56 64 17 9.292 42.379 0.106 +korserve.net 128.86.8.123 2 u 56 64 17 5.706 6.679 0.086 noc6-3.koren21. 192.36.144.22 2 u 58 64 0 1.540 3.777 0.051 [oops@main dir]$ 
 ntpd 를 막 재시작 하고 ntpq 를 실행한 경우, 5 분 정도를 기다려야 sync 가 진행이 된다는 것을 명심한다. remote 는 sync 를 하는 straum 2 서버 주소이다. refid 는 각 straum 2 서버가 현재 sync 를 하고 있는 straum 1 서버를 보여준다. st 는 각 라인의 remote 들의 straum 을 나타낸다. 그 외의 항목들은 ntp 가 알아서 하는 것들이니 신경쓰지 말자. 가장 중요한 것은 remote 필드의 주소 앞에 붙어 있는 기호들이다. 각 기호의 의미 는 다음과 같다. * 는 현재 sync 를 받고 있음을 의미한다. + ntp 알고리즘에 의해 접속은 가능하지만 sync 를 하고 있지는 않음을 의미 - ntp 알고리즘에 의해 접속은 가능하지만 sync 가능 리스트에서 제외 blank 는 접속이 불가능함을 의미한다. 이외에 .(dot) 또는 # 등의 기호가 나올 수 있지만, 그냥 여기서는 무시하도록 한다. 아 참고로, 위의 결과는 임의로 수정한 것이다. 마지막으로 st 가 16 이 나올 경우는, 해당 서버에 접속을 할 수 없음이다. 2. peer 설정 다음은, B 와 C 를 straum 3 로 설정한 A 로 부터 sync 를 받도록 설정을 한다. A 도 메인은 a.com 이라고 가정을 하자. 

 Hanterm - cat /etc/ntp/ntp.conf
 [oops@main dir]$ cat /etc/ntp/ntp.conf restrict default nomodify notrap noquery restrict 127.0.0.1 # straum 2 server list server a.com driftfile /var/lib/ntp/drift broadcastdelay 0.008 keys /etc/ntp/keys [oops@main dir]$ 
 peer 설정에서는 server 를 straum 3 으로 지정한 서버 A 를 지정한다. 그 외에는 틀 린 것이 없다. 역시 service ntpd restart 로 재시작을 한 후에 위에서 처럼 ntpq 로 확인을 한다. 

 Hanterm - ntpq -p
 [oops@main dir]$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *a.com 211.189.50.33 2 u 62 64 17 0.822 6.191 0.052 [oops@main dir]$ 
 여기서 잠깐 의문.. 왜 ntpq 확인시에, A 서버에서 sync 하는 st 가 2 인데, straum 3 에서 sync 하는 peer 들의 ntpq 에서도 여전히 2 일까? 이는 A 서버의 시간을 동기화 하는 것이 아니라 straum 3 서버가 straum 2 에서 sync 하는 시간을 forwarding 하는 것이기 때문에, straum 3 서버와 동일하게 2 로 표기가 되는 것이다. 그래서 굳이 A,B,C 가 각각 straum 2 에 sync 를 할 필요가 없는 것이 다. 또한, 그렇게 한다면 상위 straum 서버들은 상당히 버거울 것이고.. 3. 방화벽 설정 ntp protocol 은 기본적으로 udp 123 번을 사용을 한다. 안녕 리눅스에서는 기본으로 oops-firewall 이 구동이 되므로, 다음의 설정들을 적용해 줘야 한다. 서버의 입장 (A 의 경우) 에서는 /etc/oops-firewall/filter.conf 에서 UDP_ALLOWPORT = 123 또는 UDP_HOSTPERPORT = 192.168.0.0/255.255.255.0:123 과 같은 설정이 필요하다. 전자는 123 번 포트를 anywhere 로 여는 것이고 후자는 접 속을 192.168.1.x 의 C class 에서의 접속만 허용하는 모습니다. peer 의 입장 (B 나 C) 에서는 /etc/oops-firewall/filter.conf 의 가장 마지막 설정 인 OUT_UDP_ALLOWPORT 에 아래와 같이 123 번을 등록한다. OUT_UDP_ALLOWPORT = 53 123 161 설정을 마친 후에, service oops-firewall restart 명령으로 방화벽 룰을 갱신하도록 한다.