Ubuntu 16.04의 NTP 풀 프로젝트에서 사용할 NTP를 구성하는 방법


소개

정확한 시간 유지는 거의 모든 서비스 또는 소프트웨어에 중요합니다. 이메일, 로거, 이벤트 시스템 및 스케줄러, 사용자 인증 메커니즘 및 분산 플랫폼에서 실행되는 서비스는 모두 시간순으로 이벤트를 기록하기 위해 정확한 타임스탬프가 필요합니다. 이러한 서비스는 네트워크 시간 프로토콜(NTP)을 사용하여 시스템 시계를 신뢰할 수 있는 외부 소스와 동기화합니다. 이 소스는 원자 시계, GPS 수신기 또는 이미 NTP를 사용하는 다른 시간 서버일 수 있습니다.

이것은 NTP 풀 프로젝트 프로젝트가 시작되는 곳입니다. 전 세계 수천만 명의 클라이언트에게 알려진 "좋은 시간\에 쉽게 액세스할 수 있는 시간 서버의 거대한 전 세계 클러스터입니다. Ubuntu 및 대부분의 다른 주요 Linux 배포판의 기본 시간 서버이며 네트워크로 연결된 많은 시간 서버입니다. 기기 및 소프트웨어 애플리케이션.

이 가이드에서는 서버에서 NTP를 설정하고 NTP 풀 프로젝트의 일부로 구성하여 NTP 풀 프로젝트의 다른 사용자에게 정확한 시간을 제공합니다. 여분의 CPU 주기와 사용하지 않는 대역폭을 제공하는 것은 커뮤니티에 무언가를 돌려주는 완벽한 방법입니다.

필요한 대역폭은 상대적으로 낮으며 제공할 수 있는 양과 서버가 상주하는 위치에 따라 조정할 수 있습니다. 각 클라이언트는 20분마다 몇 개의 UDP 패킷만 보내므로 대부분의 서버는 초당 약 12개의 NTP 패킷만 수신하며 하루에 두 번, 초당 최대 100개의 패킷이 급증합니다. 이것은 50-120Kb/sec의 스파이크와 함께 10-15Kb/sec의 대역폭 사용량으로 해석됩니다.

NTP 풀 프로젝트에 참여하기 전에 충족해야 하는 세 가지 기본 요구 사항이 있습니다.

  1. 서버에는 고정 IP 주소가 있어야 합니다.
  2. 서버에 영구적이고 안정적인 인터넷 연결이 있어야 합니다.
  3. 귀하의 IP 주소는 거의 변경되지 않거나 드물게 변경됩니다(1년에 한 번 이하).

대부분의 클라우드 기반 서버의 경우 처음 두 가지 요구 사항은 일반적으로 자동으로 충족됩니다. 세 번째 요구 사항은 NTP 풀 프로젝트에 참여하는 것이 장기적인 약속을 구성한다는 점을 강조합니다. 물론 상황이 바뀌면 풀에서 서버를 빼는 것이 좋지만 트래픽이 완전히 사라지기까지 오랜 시간(대부분 몇 주, 때로는 몇 달 또는 몇 년)이 걸립니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • IPv6 네트워킹이 구성된 Ubuntu 16.04 서버 1대. 기존 Droplet에서 IPv6 네트워킹을 구성해야 하는 경우 이 자습서를 따를 수 있습니다.
  • Ubuntu 16.04 자습서로 초기 서버 설정에 따라 설정할 수 있는 루트가 아닌 sudo 사용자 및 방화벽.

1단계 - NTP 설치

NTP 패키지는 기본적으로 설치되지 않으므로 패키지 관리자를 사용하여 설치합니다. 먼저 패키지를 업데이트합니다.

  1. sudo apt-get update

그런 다음 NTP를 설치합니다.

  1. sudo apt-get install ntp

전제 조건에 지정된 대로 방화벽을 구성한 경우 NTP 풀과 통신하려면 포트 123에서 UDP 트래픽을 허용해야 합니다.

  1. sudo ufw allow 123/udp

UFW에 대한 자세한 내용은 Ubuntu에서 UFW로 방화벽을 설정하는 방법을 참조하세요.

이제 NTP가 설치되었지만 기본 NTP 풀 시간 서버를 사용하도록 구성되었습니다. 대신 특정 시간 서버를 선택해 보겠습니다.

2단계 - 적합한 업스트림 서버 선택

NTP 풀 프로젝트는 풀에 참여하려는 운영자에게 기본 pool.ntp.org 서버를 사용하는 대신 우수한 네트워크 로컬 시간 서버를 선택하도록 요청합니다. 이렇게 하면 NTP 풀 프로젝트가 안정적이고 빠르고 건강하게 유지됩니다. 시간 소스를 선택할 때 패킷 손실이 없고 서버 간 홉이 가능한 한 적은 안정적인 네트워크 연결이 필요합니다.

다중 계층 및 계층적 NTP 프로토콜은 관련된 당사자를 기본 서버, 보조 서버 및 클라이언트로 분리합니다. 기본 서버는 Stratum 1이라고 하며 Stratum 0이라고 하는 시간 소스에 직접 연결됩니다. 이 소스는 원자 시계, GPS 수신기 또는 무선 항법 시스템일 수 있습니다. 체인의 보조 서버는 Stratum 2, Stratum 3 등으로 불립니다.

각 서버는 클라이언트이기도 합니다. Stratum 2 클라이언트는 업스트림 Stratum 1 서버에서 시간을 수신하고 다운스트림 Stratum 3 서버 또는 다른 클라이언트에 시간을 제공합니다. NTP 풀 프로젝트 구성원이 제대로 작동하려면 NTP 데몬에 3개 이상의 서버가 구성되어 있어야 합니다. 이 프로젝트는 최소 4개에서 7개 이하의 소스를 권장합니다.

NTP 풀 프로젝트는 공용 Stratum 1 및 Startum 2 시간 서버 목록을 제공합니다. 이 목록은 명시된 제한 사항에 따라 공개 액세스가 가능한 NTP 시간 서버를 지정합니다. 세 가지 유형이 있습니다.

  • OpenAccess: 이 시간 서버는 NTP 풀 사용 권장 사항을 준수하는 모든 클라이언트에게 열려 있습니다.
  • RestrictedAccess: 이 시간 서버에는 NTP 풀 사용 권장 사항 외에 일부 액세스 제한이 있습니다.
  • ClosedAccess: 이 시간 서버가 닫히거나 사전 협의가 필요합니다.

경고: 승인을 받지 않은 경우 OpenAccess로 나열되지 않은 서버를 사용하지 마십시오.

Stratum 1 시간 서버 목록을 방문하십시오. 다음과 같은 목록이 표시됩니다.

ISO 코드 열을 기준으로 목록을 정렬하고 서버의 데이터 센터와 지리적으로 가까운 하나 또는 두 개의 서버를 찾습니다. 서버의 액세스 정책 열에 OpenAccess가 표시되면 문제 없이 사용할 수 있습니다. "RestrictedAccess\라고 표시된 경우 클릭하여 항목을 열고 AccessDetails 필드에 표시된 지침을 읽으십시오. 종종 NotificationMessage가 예로 설정되어 있음을 알 수 있습니다. 이는 제공된 주소로 전달되는 비공식 이메일을 작성해야 함을 의미합니다. ServerContact에서 서버 운영자에게 이 시간 서버를 NTP 풀 프로젝트 구성원의 시간 소스로 사용하려는 의사를 알립니다.

사용하려는 서버를 식별했으면 ISO 열에서 각 서버에 대한 링크를 클릭하고 해당 호스트 이름 또는 IP 주소를 복사합니다. 3단계에서 이 주소를 사용합니다.

그런 다음 동일한 프로세스에 따라 Stratum 2 목록에서 3개 또는 4개의 서버를 선택합니다.

시간 서버를 선택했으면 이를 사용하도록 NTP 클라이언트를 구성해야 합니다.

3단계 - 풀에 참여하도록 NTP 구성

NTP 풀과 함께 서버를 사용하고 새 시간 서버를 구성하려면 NTP 데몬의 구성을 일부 수정해야 합니다. 이렇게 하려면 /etc/ntp.conf 파일을 편집합니다.

  1. sudo nano /etc/ntp.conf

먼저 driftfile이 구성되어 있는지 확인하세요. 드리프트 파일은 공칭 주파수에서 실행되는 시스템 클록과 올바른 시간과 동기화를 유지하는 데 필요한 주파수 사이의 주파수 오프셋을 저장합니다. 안정적이고 정확한 시간을 달성하는 데 도움이 됩니다. 기본 설치의 구성 파일 상단에서 다음을 찾을 수 있습니다.

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift
...

그런 다음 구성에서 기본 시간 소스 항목을 제거합니다. pool [0-3].ubuntu.pool.ntp.org iburst 또는 pool ntp.ubuntu.com 패턴의 모든 행을 찾고 있습니다. 기본 구성을 사용하는 경우 강조 표시된 줄을 제거합니다.


# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst

# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

제거한 줄을 pool 키워드 대신 server 키워드를 사용하여 이전 단계에서 직접 선택한 서버로 바꿉니다.

...
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst
...

NTP 풀 권장 사항에 따라 각 서버에 iburst 옵션을 사용합니다. 이렇게 하면 서버에 연결할 수 없는 경우 일반적인 한 패킷이 아닌 8개의 패킷 버스트를 보냅니다. NTP 풀 프로젝트에서 burst 옵션을 사용하면 매 폴링 간격마다 8개의 패킷을 보내는 반면 iburst는 처음에만 8개의 패킷을 보내기 때문에 남용으로 간주됩니다.

다음으로 기본 구성이 관리 쿼리를 허용하지 않는지 확인합니다. 그렇지 않으면 서버가 NTP 반사 공격에 사용되거나 서버 상태를 수정하려는 ntpqntpdc 쿼리에 취약해질 수 있습니다. noquery 옵션이 기본 restrict 줄에 추가되었는지 확인합니다.

...
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

공식 문서에서 다른 옵션에 대한 자세한 정보를 찾을 수 있습니다.

NTP 데몬 구성 파일은 이제 다음과 같아야 하지만 파일에 무시해도 되는 추가 설명이 있을 수 있습니다.


driftfile /var/lib/ntp/ntp.drift

server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

파일을 저장하고 편집기를 종료합니다.

이제 NTP 서비스를 다시 시작하고 시간 서버가 시계를 업스트림 서버와 동기화하도록 하십시오.

  1. sudo systemctl restart ntp.service

몇 분 후 ntpq 명령을 사용하여 시간 서버의 상태를 확인하십시오.

  1. ntpq -p

출력은 다음과 유사해야 합니다.

Output
remote refid st t when poll reach delay offset jitter ============================================================================== mizbeaver.udel. .INIT. 16 u - 64 0 0.000 0.000 0.000 montpelier.ilan .GPS. 1 u 25 64 7 55.190 2.121 130.492 +nist1-lnk.binar .ACTS. 1 u 28 64 7 52.728 23.860 3.247 *ntp.okstate.edu .GPS. 1 u 31 64 7 19.708 -8.344 6.853 +ntp.colby.edu .GPS. 1 u 34 64 7 51.518 -5.914 6.669

원격 열은 NTP 데몬이 사용 중인 서버의 호스트 이름을 알려주고 refid 열은 서버가 사용 중인 소스를 알려줍니다. 따라서 Stratum 1 서버의 경우 refid 필드에 GPS, PPS, ACTS 또는 PTB가 표시되고 Stratum 2 이상의 서버에는 업스트림 서버의 IP 주소가 표시됩니다. st 열은 계층을 나타내며 지연, 오프셋 및 지터는 시간 소스의 품질에 대해 알려줍니다. 이 세 필드에는 값이 낮을수록 좋습니다.

귀하의 시간 서버는 이제 대중에게 시간을 제공할 수 있습니다. 다른 호스트에서 ntpdate를 호출하여 이를 확인할 수 있습니다.

  1. ntpdate -q your_server_ip

출력은 다음과 유사해야 하며 시간 서버와 오프셋을 조정했음을 알려줍니다.

Output
server your_server_ip, stratum 2, offset 0.001172, delay 0.16428 2 Mar 23:06:44 ntpdate[18427]: adjust time server your_server_ip offset 0.001172 sec

이제 다른 사람들이 사용할 수 있도록 NTP 풀 프로젝트에 NTP 서버를 등록할 준비가 되었습니다.

4단계 - NTP 풀에 서버 추가

다른 사람이 사용할 수 있도록 서버를 추가하려면 manage.ntppool.org를 방문하십시오.

로그인하면 서버를 추가하기 위한 간단한 인터페이스가 표시됩니다.

서버의 IP 주소를 입력하고 제출을 클릭하십시오.

다음 화면에서는 서버 지역을 식별했는지 확인하라는 메시지가 표시됩니다. 예상과 다른 지역에 서버가 표시되면 설명 상자를 사용하여 알려주세요.

마음에 들면 예, 내 서버입니다. 추가를 클릭하여 항목을 확인합니다.

귀하의 서버는 이제 NTP 풀 프로젝트의 일부입니다. NTP 풀의 모니터링 시스템이 귀하의 서버에 대해 수집한 정보를 보려면 http://www.pool.ntp.org/scores/your_server_ip를 방문하십시오. 시간당 몇 번 서버를 확인하고 시스템의 점수와 함께 오프셋 데이터를 표시합니다. 서버가 좋은 시간을 유지하고 연결할 수 있는 한 점수는 20점에 도달할 때까지 올라갑니다. 점수가 10보다 높은 서버만 풀에서 사용됩니다.

연결 문제 해결

서버를 동기화하는 데 문제가 있는 경우 포트 123에서 나가는 패킷을 삭제하는 패킷 방화벽이 있을 수 있습니다. 방화벽 상태를 확인하는 방법을 알아보려면 Ubuntu에서 UFW로 방화벽을 설정하는 방법을 살펴보십시오.

NTP 풀 프로젝트의 모니터링 스테이션이 NTP 서버에 연결할 수 없고 서버 점수가 내려가거나 서버를 사용하여 다른 시계를 동기화할 수 없는 경우 패킷 방화벽이 설치되어 수신되는 포트 123의 트래픽. 방화벽 상태를 확인하십시오.

방화벽이 없다고 확신하거나 들어오는 트래픽과 나가는 트래픽 모두에 대해 포트 123을 열었다면 서버 공급자 또는 다른 전송 공급자가 도중에 패킷을 삭제했을 수 있습니다. 이러한 문제를 스스로 해결할 수 있는 지식이 없다면 커뮤니티에 문의하여 도움을 받는 것이 가장 좋습니다. NTP 풀 프로젝트 운영자에게 이메일을 보냅니다. 도움을 요청하기 전에 문제를 해결하기 위해 이미 시도한 모든 단계를 보여줄 수 있는지 확인하십시오.

결론

이 자습서에서는 자체 시간 서버를 성공적으로 설정하고 NTP 풀 프로젝트의 구성원으로 만들어 커뮤니티에 시간을 제공했습니다. 시간 관리 커뮤니티와 연락을 유지합니다. 메일링 리스트에 가입하세요. 서버의 점수를 모니터링하고 필요한 조정을 하십시오.