2008. 3. 17.

[Linux] ntp (Network Time Protocol)

/etc/ntp.conf 파일 수정

server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org



[root@knh qmail]# ntpdate time.kriss.re.kr
10 Mar 16:31:10 ntpdate[24894]: the NTP socket is in use, exiting


------------------------------------------------------------------------------------------------

SRDB ID: 20748

개요: NTP 정보와 설치

세부 설명:

차례
___________________

1. NTP 개념
2. NTP 서버 설치 - 운영 모드 선택
3. NTP 클라이언트 설치
4. ntpdate 명령의 사용
5. ntpq 명령의 사용
6. 유용한 디버그 옵션
7. 일반적인 문제와 알려진 버그
8. NTP에 대한 추가 자료






1. NTP 개념
_____________


NTP는 컴퓨터 클라이언트나 서버의 시간을 다른 서버나 라디오 또는 위성 수신기와 같은 참조할 수 있는 타임 소스 또는 모뎀에 동기화하는 데 사용됩니다.
Coordinated Universal Time(UTC)에 동기화된 프라이머리 서버와 관련하여, NTP는 대개 LAN 상에서는 1 ms 이내, WAN 상에서는 10ms 이내의 클라이언트 정확성을 제공합니다.
NTP를 주 서버에 적용하려면 라디오나 위성 수신기 또는 모뎀이 필요합니다.

시간은 NTP 서버 계층을 통해 분배되는 데, 각 서버는 파일의 최상단에 위치하고 라디오 클럭과 같은 외부 타임 소스(대개 라디오 클럭)에 대한 액세스를 갖고 있는 Primary(stratum 1) 서버를 채택합니다.
stratum-2 서버는 stratum-1 서버로부터 시간을 얻고, stratum-3 서버는 stratum 2 서버로부터 시간을 얻는 식으로 진행됩니다.
동기화 루프가 장기화되는 것을 피하려면 strata의 수를 15로 제한하십시오.
네트워크가 격리되어 있어서 인터넷을 통해 다른 사용자의 서버에 접근할 수 없는 경우, 라디오 클럭을 구입하면 좋습니다. 다른 방법은, 알려진 프라이머리 또는 세컨더리 NTP 서버 중 하나에 맞추어 서버를 구성하는 것입니다.

동기화 서브넷의 각 클라이언트(서버 자체일 수도 있음)는 사용 가능한 서버 중 정확히 하나만을 선택하여 동기화하는데, 대개의 경우 자신이 접근할 수 있는 최하위 stratum 서버 중에서 택하게 됩니다. 이것은 최적의 구성이라 할 수 없으므로 NTP는 다른 전제 하에서도 운영됩니다. 다시 말하면, 각 서버의 시간은 다소 부정확할 수 있습니다. 실제로 NTP는 보다 낮은 스트라텀의 여러 시간 소스(최소 세 군데)에 접근하려고 합니다. 이렇게 하면 계약 알고리즘을 적용하여 이들 중 어느 한 곳에서 발생하는 이상 현상을 탐지할 수 있기 때문입니다. 일반적으로 모든 서버가 계약 하에 있을 경우, NTP는 선택할 서버가 최하위 stratum 인지, 가장 가까운 것인지(네트워크 지연 측면에서), 그리고 정밀성이 있는지 등의 요건과 다른 고려사항을 감안하며 이들 중 최선의 서버를 선택합니다.

마지막으로, 연관 모드의 문제가 있습니다. 각 서버 간의 연관에 따라 선택 가능한 여러 가지 모드가 있습니다. 연관을 symmetric-active 모드로 구성하면(일반적으로 구성 파일에서 peer declaration으로 표시됨), 필요에 따라 원격 서버로부터 시간을 얻고, 원격 서버에게 시간을 제공하고자 한다는 것을 원격 서버에 지시할 수 있습니다. 이 모드는 다양한 네트워크 경로를 통해 상호 연결된 다수의 중복된 시간 서버가 관련된 구성에 적합하며, 오늘날 인터넷 상에서 운영되는 대부분의 stratum - 1 및 stratum - 2 서버에 해당합니다.
연관을 클라이언트 모드로 구성하면(일반적으로 구성 파일에서 server declaration으로 표시됨), 사용자가 원격 서버로부터 시간을 얻으려 하지만 원격 서버에 시간을 공급하려 하지 않는 경우를 나타냅니다. 이 모드는 다른 로컬 클라이언트에게 동기화를 제공하지 않는 파일 서버와 워크스테이션 클라이언트에 적합합니다. 정확성과 신뢰성 요건이 엄격하지 않은 경우, broadcast나 multicast 모드를 사용하도록 클라이언트를 구성할 수 있습니다. 최고의 정확성과 신뢰성이 요구되는 경우, 클라이언트와 서버는 각각 클라이언트나 서버 또는 대칭 모드로 운영합니다.






2. NTP server 설치
___________________________


1. 다음과 같이 /etc/inet/ntp.server를 /etc/inet/ntp.conf로 복사하십시오.

# cp /etc/inet/ntp.server /etc/inet/ntp.conf

2. ntp.conf 파일을 편집하십시오.

이 파일에는 명확한 설명을 위해 많은 코멘트를 추가했습니다.
기본 파일에는 코멘트가 많지 않습니다.

#----- start of ntp.conf file ---------------------

# @(#)ntp.server 1.4 97/05/05 SMI
#
# /etc/inet/ntp.server
#
# /etc/inet/ntp.conf로 복사해서 편집할 수 있는 예제 파일입니다.
# 이 파일은 외부 하드웨어 클럭에 따라 로컬 클럭을 동기화하고
# NTP 멀티캐스트 네트워크 상에서
# 자신을 발표하는 서버를 위한 구성 탬플릿을 제공합니다.
#
# 다음 클럭 장치에 대해서는 RFC 1305를 참조하십시오.
# 이것은 외부 클럭 장치입니다. 다음 장치들은
# xntpd 3.4y에 의해 인식됩니다.
#
# XType 장치 이름 설명
# -------------------------------------------------------
# 1 (none) LOCAL Undisciplined Local Clock
# 2 trak GPS_TRAK TRAK 8820 GPS Receiver
# 3 pst WWV_PST PSTI/Traconex WWV/WWVH Receiver
# 4 wwvb WWVB_SPEC Spectracom WWVB Receiver
# 5 goes GPS_GOES_TRUE TrueTime GPS/GOES Receivers
# 6 irig IRIG_AUDIO IRIG Audio Decoder
# 7 chu CHU Scratchbuilt CHU Receiver
# 8 refclock- GENERIC Generic Reference Clock Driver
# 9 gps GPS_MX4200 Magnavox MX4200 GPS Receiver
# 10 gps GPS_AS2201 Austron 2201A GPS Receiver
# 11 omega OMEGA_TRUE TrueTime OM-DC OMEGA Receiver
# 12 tpro IRIG_TPRO KSI/Odetics TPRO/S IRIG Interface
# 13 leitch ATOM_LEITCH Leitch CSD 5300 Master Clock Controller
# 14 ees MSF_EES EES M201 MSF Receiver
# 15 gpstm GPS_TRUE TrueTime GPS/TM-TMD Receiver
# 17 datum GPS_DATUM Datum Precision Time System
# 18 acts NIST_ACTS NIST Automated Computer Time Service
# 19 heath WWV_HEATH Heath WWV/WWVH Receiver
# 20 nmea GPS_NMEA Generic NMEA GPS Receiver
# 22 pps ATOM_PPS PPS Clock Discipline
# 23 ptbacts PTB_ACTS PTB Automated Computer Time Service
#
# 일부 장치는 "fudge" 인자의 혜택을 받습니다. xntpd
# 문서를 참조하십시오.

# 피어 또는 서버입니다. "XType"을
# 위 테이블의 값으로 교체하십시오.

#로컬 클럭 장치를 추가하는 경우,
#해당 드라이버는 다음과 같은 지침에 의해 식별됩니다.
#서버 127.127.XX.0에서 127.127는 NTP에게 이것은 원격 네트워크 피어가 아닌
#로컬임을 지시하고, XX는 NTP distribution에서 설명된
#클럭 유형이라는 것을 지시합니다. 이러한 config file의 제한 지침은
#이 호스트가 지정된 두 IP 주소에만 이야기를 하며
#그 밖의 다른 곳은 신뢰하지 않으므로 어디에도
#시간을 제공하지 않는다고 설명하고 있습니다.


#다음 세 줄은 기본값으로 제공되는 것이고 사용자의 설치에 맞추어 변경하십시오.


server 127.127.XType.0 prefer
fudge 127.127.XType.0 stratum 0

broadcast 224.0.1.1 ttl 4



#세 가지 유형의 시간 서버
# 1. peer host_address [ key # ] [ version # ] [ prefer ]
# 로컬 서버가 호스트 주소로서 지정된 원격 서버와
# 함께 symmetric active 모드로 운영된다는 것을 지정합니다.
# 즉, 로컬 서버는 원격 서버에 맞추어 동기화할 수 있습니다.
# 2. server host_address [ key # ] [ version # ] [ prefer ] [ mode # ] server
# 로컬 서버가 command에서 이름이 지정된
# 원격 서버와 함께 "client" 모드로 운영된다는 것을
# 지정합니다. 이 모드에서 로컬 서버는 원격 서버에 맞추어
# 동기화될 수 있지만, 원격 서버는
# 로컬 서버에 동기화할 수 없습니다.
# 3. broadcast host_address [ key # ] [ version # ] [ ttl # ]
# 로컬 서버가 "broadcast" 모드로 운영된다는 것을
# 지정합니다. 이 모드에서 로컬 서버는 command에서
# 지정된 broadcast/multicast 주소의 클라이언트 무리에게
# 정기적인 broadcast 메시지를 전송합니다.
#
# key 주소에 전송된 모든 패킷이
# 지정된 키 번호를 사용하여 암호화된
# 인증 필드를 포함한다는 것을 나타냅니다. 이
# 번호의 범위는 unsigned 32 비트 정수입니다.
# 기본값으로 암호화 필드는
# 포함되어 있지 않습니다.
# version outgoing NTP 패킷에 사용되는 버전 번호를
# 지정합니다. Version 1, 2 및 3을 선택할 수
# 있습니다. 기본값은 버전 3입니다.
# prefer 호스트를 선택된 호스트로 표시합니다.
# 동기화를 위해 다른 비교 가능한 호스트보다 이
호스트가 선택됩니다.
# 전체 목록은 xntpd에 관한 매뉴얼 페이지를 참조하십시오.



NTP 주 stratum 1 서버에 대한 ntp.conf 파일 예제:


server 127.127.5.0
fudge 127.127.5.0 stratum 1




피어 모드의 NTP 서버에 대한 ntp.conf 파일 예제:

peer ntppeerserver





서버 모드의 NTP 서버에 대한 ntp.conf 파일 예제:


server sometimeserver prefer
server sometimeserver
server sometimeserver
# 언제나 로컬 클럭으로 되돌아갈 수 있습니다.
server 127.127.1.0
fudge 127.127.1.0 stratum 9




자신의 ntp.conf 파일을 생성했다면, 이를 저장한 다음 xntpd daemon을 시작하십시오.
# /usr/lib/inet/xntpd &




3. NTP 클라이언트 설치
____________________________


1. /etc/inet/ntp.client에서 /etc/inet/ntp.conf로 복사하십시오.

# cp /etc/inet/ntp.client /etc/inet/ntp.conf




기본 ntp.client 파일은 multicast를 사용하여 NTP 업데이트를 수신합니다. NTP 클라이언트가 이러한 업데이트를 수신할 수 있는 장소를 제한하려는 경우, 이것을 broadcast로 변경하십시오. (Broadcast 패킷은 다른 서브넷에 전달되지 않는 반면 multicast 패킷은 전달됩니다).


#
# /etc/inet/ntp.client
#
# /etc/inet/ntp.conf로 복사할 수 있는 예제 파일. 이 파일은
# 서버가 ntp multicast 네트워크 상에서 NTP 패킷을 제공하도록
# 수동적으로 기다리는 호스트를 위한 구성을 제공합니다.
#

multicastclient 224.0.1.1



2. xntpd daemon을 시작하십시오.

# /usr/lib/inet/xntpd -m &

(NTP 업데이트를 수신하는 방법으로 broadcast를 사용하는 경우 인수로서 -b를 사용하므로, xntpd daemon은 -m 인수와 함께 시작합니다.)





4. ntpdate 명령의 사용.
_____________________________



ntpdate 유틸리티가 로컬 날짜와 시간을 설정합니다. 이 유틸리티는 정확한 시간을 결정하기 위해, 인수로 주어진 호스트 상에서 Network Time Protocol(NTP) 서버를 폴링합니다. 이 유틸리티는 로컬 호스트에서 루트로 실행되어야 합니다. 이 유틸리티는 각 서버로부터 샘플을 얻어 표준 NTP 클럭 필터와 선택 알고리즘을 적용하여 이들 중 최선의 값을 선택합니다.

이 유틸리티는 daemon 실행의 대안으로서 cron(1M)으로부터 정기적으로 실행할 수 있습니다. 한 두 시간마다 한번씩 실행하면 충분히 정확한 시간을 얻을 수 있으므로 클럭 스테핑이 필요하지 않습니다.


이미 xntpd daemon을 실행하고 있다면 ntpdate 명령을 사용할 수 없습니다.
이 명령을 실행하려고 하면 다음과 같은 오류가 발생합니다.


# ntpdate champ
23 Sep 14:55:52 ntpdate[19780]: the NTP socket is in use, exiting


또한 ntpdate 명령을 실행하려면 루트 사용자가 되어야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

% ntpdate champ
23 Sep 14:44:36 ntpdate[19743]: bind() fails: Permission denied


ntpdate 명령으로 서버를 지정할 경우, 이름을 IP 주소로 전환할 수 있도록 사용자의 naming service를 반드시 실행하십시오. 그렇지 않으면 다음과 같은 오류가 발생합니다.


# ntpdate tiger
23 Sep 15:20:43 ntpdate[20041]: no server suitable for synchronization found


이 예에서 ntp 서버 "jedi"를 동기화되는 서버로 지정합니다.
# ntpdate jedi
23 Sep 17:12:21 ntpdate[20963]: adjust time server 129.148.192.147 offset
0.001422 sec




5. ntpq 명령의 사용
___________________________

ntpq는 현재 상태에 대해, 권장된 NTP 모드 6 제어 메시지 형식을 수행하는 NTP 서버에게 질의합니다. 현재 상태의 변경을 요청할 수도 있습니다. 프로그램은 대화형 모드로 실행되거나 명령줄 인수를 사용하여 제어될 수 있습니다. raw and pretty-printed output 옵션을 사용할 수 있게 하면서 임의 변수에 대한 읽고 쓰기 요청을 조립할 수 있습니다. ntpq는 서버에 복수 쿼리를 전송함으로써 피어 리스트를 일반 형식으로 얻고 인쇄할 수 있습니다.


NTP 서버에게 피어 리스트에 관해 질의하는 방법:

# ntpq -p jedi
remote refid st t when poll reach delay offset disp
==============================================================================
*eastpager1.East dollar.East.Sun 3 u 97 64 376 2.03 4.564 2.33
LOCAL(0) LOCAL(0) 5 l 19 64 377 0.00 0.000 10.01
NTP.MCAST.NET 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
255.255.255.255 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
+sunswe.Sweden.S carbon.UK.Sun.C 3 u 48 64 377 156.80 6.367 0.41
+canadamail1.Can franc.East.Sun. 3 u 12 64 377 29.48 13.528 29.65
-cosmo.Eng.Sun.C rolex.East.Sun. 2 u 98 128 377 84.08 -1.069 0.87
-centralpager1.C venus.EBay.Sun. 3 u 41 128 377 68.73 -19.219 6.70


remote - 원격 피어
refid - 피어가 동기화되는 호스트
st - stratum 번호
t - 유형, 즉 unicast, mulitcast, local (- = 알 수 없음)
poll - 초 단위 폴링 간격
reach - 도달가능성 레지스터


* 원격에서 현재 선택된 피어를 나타냅니다.
+ 호스트가 동기화에 대한 수락 가능한 피어이지만 수락되지 않았음을 나타냅니다
- 수락 불가능




6. 유용한 디버깅
_________________________


"server" 모드(연관)를 사용하는 경우, ntp.conf 파일에 최소한 세 개의 다른 서버를 두는 것이 바람직합니다. 구성하는 서버가 인터넷 상에서 멀리 떨어져 있고 Firewall을 설치했다면, Firewall 상에서 사용자의 NTP 서버로부터 포트 123 NTP 서버가 들어오고 나갈 수 있도록 허용하는 규칙을 작성하십시오. 일반적으로 NTP 서버를 ntp.conf에 나열된 시간 서버에 동기화하는 데에는 약 5분 정도가 소요됩니다. 동기화가 끝날 때까지 다른 NTP 클라이언트에게 broadcast/multicast NTP 패킷을 보내지 마십시오. 일반적으로 이들 패킷은 64초 간격마다 전송됩니다.

xntpd와 ntpdate 명령은 모두 debug 옵션을 가지고 있지만, ntpdate -d를 사용하는 경우 "작동은 끝까지 수행되지만" 실제로 네트워크 폴링은 수행하지 않으므로 주의해야 합니다.


다음 예에서는 ntp.conf에 대해 ntp.client를 사용하고 xntpd -d를 활성화했습니다.

# /usr/lib/inet/xntpd -d &
20743
# Solaris tick = 10000
kernel vars: tickadj = 625, tick = 10000
adj_precision = 1, tvu_maxslew = 61875, tsf_maxslew = 0.0fd70a37
create_sockets(123)
bind() fd 19, family 2, port 123, addr 00000000, flags=1
bind() fd 20, family 2, port 123, addr 7f000001, flags=0
bind() fd 21, family 2, port 123, addr 8194c097, flags=1
init_io: maxactivefd 21
report_event: system event 'event_restart' (0x01) status 'sync_alarm,
sync_unspec,
1 event, event_unspec' (0xc010)
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_hander: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147

(129.148.192.147 is the host "jedi")

또한 multicast나 broadcast NTP 패킷을 기대하면서 동시에 포트 123(ntp) 상에서 ntp 클라이언트에 대한 snooping을 시작했습니다.

# snoop -d le0 port 123
device /dev/le (promiscuous mode) 사용
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:15 1999)
champ -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:46 1999)
jedi -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:49 1999)
jedi -> BROADCAST NTP broadcast (Thu Sep 23 16:42:50 1999)
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:19 1999)
champ -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:50 1999)
jedi -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:53 1999)
jedi -> BROADCAST NTP broadcast (Thu Sep 23 16:43:54 1999)
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:44:23 1999)




7. 알려진 버그
______________


4060650 xntpd가 루핑되면서, cpu에 부하를 주고 메모리도 소진하여 컴퓨터를 사용할 수 없게 만듭니다.

4097366 외부 클럭 하드웨어는 xntpd에 의해 지원되지 않습니다.

4192098 xntpd는 일부 Ultra 5에서 "c011 sync_alarm"과 동기화되지 않습니다.

4130698 Solaris 2.6에 대한 ntp 설치/업그레이드 지시사항

4061948 SPARC 전용: 2.5.1 SUNWxntp Package는 Solaris 2.6과 호환되지 않습니다.
(E10k 시스템 전용)







8. NTP에 대한 추가 자료
________________________________


http://www.eecis.udel.edu/~ntp/
http://www.con.wesleyan.edu/~triemer/network/ntp/ntp_tcp.html (contains RFC
list)

댓글 없음: