데비안 리눅스 시스템에서 NTP를 이용해 타임서버와 시간을 동기화하는 방법에 대해 알아 보자.
윈도우와 마찬가지로, 데비안 리눅스 역시 설치한 후 필수적으로 해야 하는 설정들이 몇 가지 있다. 그 중, (필자 생각으로는) 마지막인, NTP 설정에 대해 알아보자
NTP(Network Time Protocol)이란
NTP는 네트워크를 이용해 현재의 시각을 동기화 해 주는 기능이다. 컴퓨터의 시간은 컴퓨터 메인보드에 내장된 자체 시계를 이용해 유지되긴 하지만, 시간이 지날수록 실제 시각과 오차가 발생하게 된다. 이를 방치할 경우 간단하게는 로그 분석등을 진행 할 때 귀찮아 지는 것에서 시작해, 어플리케이션에 따라 서버의 동작에도 영향을 줄 수 있는 문제가 발생 할 수 있다. 이때문에, NTP를 이용해 신뢰할 수 있는 타임서버로 부터 시간 데이터를 받아, 로컬 시계를 계속 동기화 해 주는 작업이 꼭 필요하다.
NTP 클라이언트의 설치
데비안 리눅스의 많은 패키지들 중에서 시간과 관련된 기능들을 제공하는 ntpdate 라고 하는 패키지가 있다. 이 패키지를 이용해 NTP를 사용할 수 있도록 설정해 보겠다.
sudo apt-get install ntpdate
newuser@debian:~$ sudo apt-get install ntpdate 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다... 완료 상태 정보를 읽는 중입니다... 완료 The following additional packages will be installed: ntpsec-ntpdate ntpsec-ntpdig python3-ntp 다음 새 패키지를 설치할 것입니다: ntpdate ntpsec-ntpdate ntpsec-ntpdig python3-ntp 0개 업그레이드, 4개 새로 설치, 0개 제거 및 0개 업그레이드 안 함. 172 k바이트 아카이브를 받아야 합니다. 이 작업 후 599 k바이트의 디스크 공간을 더 사용하게 됩니다. 계속 하시겠습니까? [Y/n] 받기:1 http://deb.debian.org/debian bookworm/main amd64 python3-ntp amd64 1.2.2+dfsg1-1+deb12u1 [88.9 kB] 받기:2 http://deb.debian.org/debian bookworm/main amd64 ntpsec-ntpdig amd64 1.2.2+dfsg1-1+deb12u1 [31.9 kB] 받기:3 http://deb.debian.org/debian bookworm/main amd64 ntpsec-ntpdate amd64 1.2.2+dfsg1-1+deb12u1 [29.0 kB] 받기:4 http://deb.debian.org/debian bookworm/main amd64 ntpdate all 1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1 [22.0 kB] 내려받기 172 k바이트, 소요시간 0초 (2,247 k바이트/초) Selecting previously unselected package python3-ntp. (데이터베이스 읽는중 ...현재 33821개의 파일과 디렉터리가 설치되어 있습니다.) Preparing to unpack .../python3-ntp_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking python3-ntp (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpsec-ntpdig. Preparing to unpack .../ntpsec-ntpdig_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking ntpsec-ntpdig (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpsec-ntpdate. Preparing to unpack .../ntpsec-ntpdate_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking ntpsec-ntpdate (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpdate. Preparing to unpack .../ntpdate_1%3a4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1_all.deb ... Unpacking ntpdate (1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1) ... python3-ntp (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpsec-ntpdig (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpsec-ntpdate (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpdate (1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... Processing triggers for man-db (2.11.2-2) ...
NTP설정
정상적으로 설치가 됐으면 timedatectl을 입력해서 상태를 확인해 본다
newuser@debian:~$ timedatectl Local time: 수 2024-11-06 00:03:33 KST Universal time: 화 2024-11-05 15:03:33 UTC RTC time: 수 2024-11-06 00:03:33 Time zone: Asia/Seoul (KST, +0900) System clock synchronized: yes NTP service: inactive RTC in local TZ: yes Warning: The system is configured to read the RTC time in the local time zone. This mode cannot be fully supported. It will create various problems with time zone changes and daylight saving time adjustments. The RTC time is never updated, it relies on external facilities to maintain it. If at all possible, use RTC in UTC by calling 'timedatectl set-local-rtc 0'.
정상적으로 설치가 되긴 했으나, 몇가지 설정을 더 해주어야 한다. 먼저, 아래에 나타난 경고 메시지 부터 없에보도록 하겠다. (경고 메시지가 나타나지 않았다면 넘어가도 무방하다.)
RTC 기준 시간 설정
sudo timedatectl set-local-rtc 0
이 명령은 시스템의 하드웨어 시계의 기준을 UTC로 변경해 주는 명령이다. timedatectl을 입력해서, 에러 메시지가 사라졌는지 확인해 보자
newuser@debian:~$ sudo timedatectl set-local-rtc 0 newuser@debian:~$ timedatectl Local time: 수 2024-11-06 11:11:22 KST Universal time: 수 2024-11-06 02:11:22 UTC RTC time: 수 2024-11-06 02:11:22 Time zone: Asia/Seoul (KST, +0900) System clock synchronized: yes NTP service: inactive RTC in local TZ: no
에러 메시지가 사라진 것이 보인다. 이제 나머지 NTP 설정을 진행 하도록 한다.
사용자의 표준 시간대 설정
위의 예에서는 Time zone이 Asia/Seoul (KST, +0900)로 표시되고 있다. 만약 다른 시간대를 사용하고 싶다거나, 원하는 시간대가 아닐 경우 시간대를 변경 해 주어야 한다. 사용 가능한 시간대 목록을 확인하기 위해 다음과 같이 입력해 보자
timedatectl list-timezones
시스템에서 사용 가능한 시간대의 목록이 좌라락 펼쳐진다. (이 문서에서는 목록이 너무 길어 표시하지 않는다.) 이 중 원하는 시간대를 찾아 아래의 명령과 같이 적용시켜 주면 된다.
sudo timedatectl set-timezone Asia/Seoul
이렇게 하면 사용자 시간대가 대한민국 표준시로 변경 된다. 다른 시간대를 원할 경우, list-timezones을 통해 확인한 시간대 이름을 Asia/Seoul 자리에 대신 넣어주면 된다.
NTP 동기화 설정 및 NTP 서버 추가
시간 동기화에 사용할 NTP 서버주소와 기타 설정 정보는 아래의 파일에 저장 되어 있다.
/etc/systemd/timesyncd.conf
이 파일의 내용을 에디터를 이용해 수정해 주면 된다. 필자는 nano를 이용해 파일을 수정해 보겠다.
sudo nano /etc/systemd/timesyncd.conf
# 어쩌고..... # 저쩌고..... # 주저리..... # ..... [Time] #NTP= #FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048 #ConnectionRetrySec=30 #SaveIntervalSec=60
파일의 끝 부분정도에 위치한 [Time]부분에 설정을 적어 주면된다. 참고로 # 으로 시작하는 줄은 주석처리 되어 무시되는 줄 이다.
NTP=192.168.256.256 # 주로 사용할 NTP 서버 주소 FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org # 2차로 사용할 NTP 서버 주소
NTP=으로 시작하는 행에서 #을 삭제하고, 원하는 주소를 적어 준다. IP주소를 적어줘도 되고, 도메인 명을 적어줘도 무방하다.
FallbackNTP=행은, 위에서 설정한 NTP 서버가 사용할 수 없을 경우를 사용하기 위한 백업 서버들의 주소이다. 기본 제공 서버들을 사용해도 되고, 원하는 서버가 있으면 서버의 주소를 적어두면 된다. 물론, #을 삭제해 주어야 적용 되는 부분으로, 백업 NTP서버를 사용하지 않는다면 그냥 두면 되겠다.
그 외에 [Time]항목 내부의 모든 #을 삭제해 준다. 마지막으로 Ctrl+X 를 눌러 파일을 저장해 주면 되겠다
# 수정된 timesyncd.conf의 예 # 어쩌고..... # 저쩌고..... # 주저리..... # ..... [Time] NTP=192.168.256.257 FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org RootDistanceMaxSec=5 PollIntervalMinSec=32 PollIntervalMaxSec=2048 ConnectionRetrySec=30 SaveIntervalSec=60
NTP 서비스 활성화
sudo timedatectl set-ntp true
서비스 재시작
sudo systemctl restart systemd-timesyncd.service
마지막으로 서비스를 재 시작 해주면 된다. 작업이 완료 된 후, timedatectl을 입력해서 상태를 확인해 본다
newuser@debian:~$ timedatectl Local time: 수 2024-11-06 00:03:33 KST Universal time: 화 2024-11-05 15:03:33 UTC RTC time: 수 2024-11-06 00:03:33 Time zone: Asia/Seoul (KST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
위와 같이 표시 된다면, NTP 서비스 설정이 정상적으로 이루어 진 것이다.
NTP 동작 확인
마지막으로, NTP가 실제로 잘 동작하고 있는지를 확인해 보기로 한다.
sudo systemctl status systemd-timesyncd.service
timesyncd 서비스의 동작상태가 표시되며, 마지막으로 시간을 가지고 온 시각과 가져온 서버 정보들이 표시된다. 해당 내용이 있다면, NTP가 정상적으로 동작하며 시간을 동기화 하고 있다는 뜻이다.
newuser@debian:~$ sudo systemctl status systemd-timesyncd.service ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled) Active: active (running) since Wed 2024-11-06 12:29:07 KST; 7min ago Docs: man:systemd-timesyncd.service(8) Main PID: 1650 (systemd-timesyn) Status: "Contacted time server 121.174.142.82:123 (0.debian.pool.ntp.org)." Tasks: 2 (limit: 19041) Memory: 1.4M CPU: 33ms CGroup: /system.slice/systemd-timesyncd.service └─1650 /lib/systemd/systemd-timesyncd