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 명령으로 방화벽 룰을 갱신하도록
    한다.

'Infrastructure' 카테고리의 다른 글

crontab -e로 날짜별 디비 백업  (0) 2010.02.09
Crontab 설정 하기  (0) 2010.02.09
sis.or.kr - 윈도우 보안 총정리  (0) 2010.01.29
TIP  (0) 2010.01.29
Dump 설정  (0) 2010.01.29

+ Recent posts