Collectd는 ntpd 4.2.8(Ubuntu 16.04)을 모니터링할 수 없습니다.

Collectd는 ntpd 4.2.8(Ubuntu 16.04)을 모니터링할 수 없습니다.

ntpd 4.2.8 서비스를 실행하는 Ubuntu 16.04 기반 Docker 컨테이너가 있습니다. 컨테이너가 인스턴스화된 후 포트 123/udp를 게시했습니다.

LAN의 호스트나 다른 컴퓨터에서 ntpq -p <container_host>피어 목록과 동기화 상태를 가져오는 데 사용할 수 있습니다. 그러나 Collectd를 사용하여 모니터링하지 않으면 ntpdc -c kerninfo <container_host>실패/시간 초과됩니다. 이것은 나를 혼란스럽게 한다!

컨테이너 내에서 테스트했는데 합리적인 restrict진술이 있지만 합리적인 것은 없습니다. 하지만 두 경우 모두 시간 초과가 발생합니다. 컨테이너에서 tcpdump를 실행하면(권한 있는 컨테이너로 승격된 후) UDP 패킷이 도착했지만 응답이 없음을 알 수 있습니다. 물론 tcpdump를 사용하면 ntpq 실행을 사용할 때 요청과 응답을 볼 수 있습니다.

동일한 ntp.conf 파일을 사용하여 호스트에서 직접 ntpd 서버를 실행하면 ntpdc -c kerninfo <container_host>ntpd와 Collectd가 모두 호스트와 승인된 LAN의 다른 시스템에서 성공합니다! 그러나 호스트 시스템은 여전히 ​​ntp 4.2.6과 함께 제공되는 이전 버전의 Ubuntu(14.04)를 실행하고 있습니다.

따라서 유일한 차이점은 Docker 네트워킹(내가 아는 한 NAT)과 ntp 버전(4.2.6 대 4.2.8)입니다. 그러나 ntp.org 문서에는 NAT나 4.2.8 업데이트에 대한 언급이 없습니다. 그러면 클라이언트가 서버와 다른 서브넷에 있기 때문에(NAT로 인해) 명령 시간이 초과됩니까? 아니면 4.2.8에서 뭔가 바뀌었나요?

참고: 내 컨테이너 이미지는 ntpd를 실행하는 ubuntu:16.04를 기반으로 합니다.[이메일 보호됨](우분투 공식 저장소에서) 호스트 시스템은 4.2.6p5를 실행하는 Ubuntu 14.04를 실행하고 있습니다.

추신: 모든 제한 문이 정확하더라도 Collectd가 제출한 명령은 ntpdc -c kerninfo <container_host>컨테이너에서 실행될 때 ntpd의 시간 초과와 동일합니다.

고쳐 쓰다-ddd: 더 자세한 출력을 얻을 수 있는 옵션을 사용하여 컨테이너 내부에서 ntpd를 실행했다는 사실을 언급하는 것을 잊어버렸습니다 . 기록된 유일한 관련 데이터는 다음과 같습니다.

read_network_packet: fd=19 length 192 from 192.168.1.3
receive: at 26 172.17.0.2<-192.168.1.3 flags 19 restrict 000

업데이트 2: 해결 방법을 찾은 후, 같은 문제를 겪고 있는 다른 분들도 검색하실 때 질문/답변을 더 잘 찾으실 수 있지 않을까 하는 마음에 질문을 변경했습니다. 또한 호스트가 Ubuntu 16.04를 실행하고 있다고 생각했지만 실제로는 여전히 14.04를 실행하고 있는 버그를 수정했습니다.

답변1

내 문제를 해결했습니다. 이 오류는 ntp 4.2.8이 도구 ntpdc와 도구에서 사용하는 통신 모드(즉, mode7)를 더 이상 사용하지 않고(기본적으로 비활성화함으로써) 발생합니다.

ntp 4.2.8 이상부터는 ntpqntpdc 대신 이 도구를 사용해야 합니다. 이제 ntpdc와 동일한 명령을 지원합니다. 이렇게 하면 ntpq -c kerninfo <container_host>성공적으로 실행할 수 있습니다. 이 ntpq명령은 다른 모드(mode6이라고도 함)를 사용하여 통신합니다.

ntp 4.2.8에서는 아직 마이그레이션되지 않은 도구와의 호환성을 지원하기 위해 모드 7을 다시 활성화할 수 있습니다. 다음 행을 에 추가해야 합니다 /etc/ntp.conf.

enable mode7

그러나 이 제한에 대해서는 매우 주의해야 합니다. mode7을 활성화하고 ntpd 서버를 너무 열어두면 DDoS 증폭 공격을 수행하는 데 사용될 수 있는 것으로 보입니다. 현재 Ubuntu에서 IPv4 및 IPv6에 대한 기본 제한을 사용하고 있습니다.제 생각에는- 이 모드의 사용을 차단합니다:

restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

Collectd는 mode7만 지원하므로(참조이슈 #932), 컨테이너 내부 구성에서 이 모드를 다시 활성화하기로 결정했습니다. ntp가 이 모드의 재활성화를 지원하는 한, 이 변경으로 Collectd가 Ubuntu 16.04(또는 ntp 4.2.8+를 사용하는 모든 배포판)에서 ntpd를 모니터링할 수 없는 문제가 해결될 것입니다.

참고: 사람들이 이 문제에 직면했을 때 해결책을 찾을 수 있도록 더 나은 준비를 위해 NAT에 대해 오해의 소지가 없도록 질문을 편집하겠습니다. NAT는 애초에 근본 원인이라고 생각합니다.

관련 정보