NTP(Network Time Protocol)

ITSY MAN ㅣ 2016. 7. 19. 14:06

반응형

1. NTP  왜 필요할까요
패킷을 주고받는 장비와 장비 간에 시간 정보를 동기화하는 프로토콜입니다. 장애가 발생 시에 로그를 보고 분석하는 경우가 많은대요 시간대에 따라서 장애 발생 시간이 다르게 표시된다면 분석하기 힘들 것입니다. NTP 프로토콜은 1985년 애 개발돼서 가장 오래된 프로토콜 중 하나라고 하네요. 
표준 시간을 생성하는 상위 부터, 하위 타임 서버, 그리고 호스트 종단 장비까지 각 상 하위 서버를 계층화 (Stratum Layer) 하여 관리하도록 만들어졌습니다.
권장 표준은 NTPv4(RFC 5905, public 1/100sec, 1/200ms accuracy), 시스코는 default NTPv3을 사용한다고 합니다. NTP는 UDP 123 포트에서 실행됩니다.

 # NTP는 전체 네트워크에서 Clock을 동시화하기 위해 사용
 # cisco IOS Router는 기본적으로 NTP Server로 동작
 # Router가 신뢰할 수 있는 시간 Server로부터 동기화되면, Router는 Lower stratum peer로 동기화를 허용

NTP 게 층화 구조에는 Stratum 0, Stratum 1, Stratum 2, Stratum 7, Stratum 16등 이 있다.
 ㄱ. stratum(계층) 0 : 원자시계, GPS 시계, NTP 서버로 동작하는 일반적인 하드웨어들은 기본적으로 수동으로 0을 설정할 수 없다. 자신이 보유한 시간 정보를 stratum 1 장비에게 제공한다.
stratum0 장비는 인공위성 등 우주 공학이 발전한 미국과 러시아 등이 많이 보유하고 있다.

 ㄴ. stratum 1 : stratum 0에 디렉트로 연결된 대형 서버 장비들을 의미, 정확한 시간 정보를 제공하며(stratum0에 가장 가깝게), stratum2로 NTP를 동기화해준다. 일반 클라이언트가 가져올 수 있는 가장 정확한 시간 정보 

 ㄷ. stratum 2. : 다수의 Stratum 1로부터 받은 NTP 정보를 비교하여 정확한 정보를 선택하고 이를 레이어 stratum2 장비들과 공유하고 하위 레이어로 동기화한다. stratum1과 2 device들은 보통 서로 NTP peer 관계를 맺고 각자가 가진 정보를 비교하여 정확도를 높인다.

ㄹ. stratum 7 : Cisco Device에서 NTP master 설정 시 Default 값으로 7로 설정된다. 여기서 해당 장비가 외부 서버로 NTP를 긁어오지 않는다고 가정할 경우 자기 자신이 가진 ntp master 정보를 가져옴으로써 stratum8로 동작하게 됨

 ㅁ. stratum 16 : 가장 하위 값으로 16으로 설정 시 NTP 서버로 동작할 수 없다 (하위 값이 존재하지 않기 때문에) 일정 시간 NTP 요청에 응답하지 않거나, 라우팅 연결성 확보 실패 혹은 인증에 실패하는 경우 16으로 설정되고 비 활성화된다.


굳이 정확도와 신뢰성을 따지자면 0이 제일 좋은 거 같다..
stratum 0 > stratum 1 > stratum 2 > stratum 7 > stratum 16


NTP 관련 Configuration

- show -
show clock - 설정 시간을 보여줌
show calendar - 장비 내부 하드웨어(배터리를 사용한) 설정 시간을 보여줌
show clock detail -  시간과 서머타임 등의 정보와 타임 소스(manual config, NTP etc) 등을 보여줌
show ntp status - NTP 동기화 관련 정보
show ntp association (detail) - NTP 정보를 주고받는 서버 등의 장비를 보여준다. NTP master 등등


- setting -
(config)#ntp server 10.1.1.1 {key} {number} : NTP 시간 정보를 가져올 서버를 지정한다. 서버는 상위 stratum으로 동작하며, 복수의 서버를 지정할 경우 한 개의 서버로 동기화되고 백업 서버는 ntp candidate로 지정된다. 복수개의 NTP 서버 중 마스터가 선정되는 순서는 stratum이 낮은 순, stratum이 동일할 경우 manual 설정 서버가 broadcast client 방식보다 우선한다, 위 사항도 모두 동일한 경우 먼저 NTP 패킷을 수신한 쪽의 서버를 등록한다  (NTPserver 이중화)

(config)#ntp server 10.1.1.1 prefer
prefer 명령은 동일한 stratum 서버가 다수 존재할 경우 이중 마스터 서버를 수동으로 선정할 수 있게 하기 위한 명령어이다. 반드시 stratum이 동일한 경우에만 해당하며, stratum이 다른 경우 prefer 설정 유무에 상관없이 stratum이 작은 값을 선호한다.

(config)#ntp master {1-15}
해당 장비가 NTP 마스터 서버로 동작한다. stratum은 기본값 7로 설정된다 (1-15 설정 가능), 본인의 장비가 NTP 마스터 서버로 동작하게 되면 되도록 보안에 신경을 써야 한다. NTP 개발된 지가 오래된 만큼 보안상 취약점이 많이 존재하기 때문이다 NTP server와 NTP master가 동시에 설정되었을 경우, 두 개의 NTP 정보(외부 서버 정보와 로컬 타임 정보)가 서로 경쟁한다.
마스터로 지정되지 않아도 외부에 NTP 정보를 동기화해주는 것은 가능하다. 

(config)#ntp max-association 1
Association을 맺는 서버의 개수를 1로 제한 (1-4249967295 사이에서 설정)

(config)#ntp logging
로킹 기능 활성화 또는 Test 환경 트러블 슈팅시에 필수적

(config)#ntp clock-preiod 00000000
ntp clock-period는 하드웨어 Tick을 보정하는 장비별 자동 설정값이다. 따라서 수동설정을 할 필요가 없다. 모델이 다른 타 장비로 설정값을 복사할 시에도 이 값은 제외하도록 한다.

(config)#ntp update-calendar
NTP로 동기화된 software time을 hardware time으로도 동기화한다.
하드웨어 시간 정보는 장이 부 하나 기타 외부 환경에 의해 정확도가 점차 떨어지므로 소프트웨어 시간 정보를 주기적으로 받아오도록 하는 것이 권장

(config)#ntp access-group
표준 ACL을 이용하여 출발지 IP 별로 NTP 쿼리 요청을 차단하거나 서버가 외부 디바이스로 동기화해주는 기능을 필터링한다. 보통은 인증 기능을 사용할 경우 더 나은 보안 효과를 가질 수 있기 때문이다. 하지만 실제 잘 사용되지 않는다.
peer : 모든 요청 동기화 요청
serve : 외부 디바이스로 NTP 동기화를 하거나, 로컬 장비에서 나가는 쿼리를 허용한다. 로컬 장비 동기화는 허용 안됨
serve-only : 외부 디바이스로 NTP 동기화만 허용
query-only : 로컬 장비의 쿼리 요청만 허용
해보진 않았지만 ACL의 permit, deny 명령어를 통해 직접 설정을 해보는 게 감이 바로 온다.

(config)#ntp source lo0
장비의 NTP 소스 주소를 명시한다. 이는 외부에서 peer나 server를 등록할 시에 해당 장비의 소스 주소를 설정해야 하만 NTP 프로토콜을 주고받게 된다. 이 설정을 하여도 인터페이스에 ntp broadcast를 설정할 경우엔 외부에서 서버의 소스 주소가 아닌 해당 인터페이스 주소가 ntp association에 등록된다.


(config)#ntp trusted-key
(config)#ntp authenticate
(config)#ntp authenticaion-key {key number} md5 {WORD}
NTP 인증을 위한 명령어들이다. 서버에서 인증 기능을 활성화하고 인증키를 생성할 시 해당 서버와 동기화를 원하는 클라이언트에서도 마찬가지로 인증 기능을 활성화하고 동일한 인증키를 적용해야 한다. 그리고 ntp trusted-key 명령을 통해 신뢰하는 서버의 킷값을 지정해야 하며, NTP server {주소}{키값} 도 모두 동일하게 적용해야 한다. 인증키 해싱은 MD5 만 현재 지원한다.

(config-if)#ntp broadcast {client}{ver}{key}{destication}
(config-if)#ntp multicast {client}{ver}{key}{TTL}{group address}
브로드 캐스트, 멀티 캐스트로 NTP를 주고받도록 인터페이스를 설정한다. 동기화될 클라이언트 느 client 명령어를 설정해서 작동하며, 위의 인증값도 모두 설정을 마쳐야 비로소 동기화가 가능하다. 멀티 캐스트는 특정 그룹 주소로 NTP 패킷을 방송하며 서버와 클라이언트가 이미 멀티캐스트 통신(PIM)이 가능한 환경이어야 동기화된다.
여기서 broadcast, multicast NTP 클라이언트로 설정되어 association을 받을 경우 외부와 ntp server 혹은 ntp peer 등의 패리스 페어링이 불가능하다. 수동으로 NTP 정보를 받아와야 할 경우 no ntp 명령으로 초기화 후 다시 설정한다.

NTP 설정은 시스코 IOS 종류에 따라 추가되거나, 설정 자체가 상이한 부분이 많이 존재하므로 검색을 통해 확인하는 것이 가장 빠르다.

http://code2501.tistory.com/117 여기서 봤습니다.


반응형