Synology NAS에서 일정주기마다 자동으로 시간 동기화하기
이전에 NAS 설치하고, 공유기를 바꿔 집안 네트워크를 기가비트로 올린 이후 NAS는 꽤 유용하게 써먹고 있습니다.
밖에서 문서나 음악파일 찾을 일이 있으면 미리 설정한 FTP 혹은 외부 서버 접속이 가능한 앱으로 바로바로 찾을 수 있고 말이죠.
DDNS의 경우는 NAS에 직접 설정하는게 아니라 조금 망설이고 있는데.. 조만간 시간 내서 한번 정리는 해야겠네요.
아무튼 잘 쓰고는 있는데, 제 경우는 관리자 계정에 한해 로그인시 구글 인증기(Google Authenticator) 를 통한 2단계 인증을 씁니다.
근데, 이 인증기는 시간에 기반한 임시 비밀번호다 보니 NAS의 시간 동기화 기능이 정상적으로 작동하지 않아 가끔 관리자 계정 로그인을 실패합니다.
제 경우는 세번 실패하면 그 IP는 차단되어 해당 IP로는 로그인이 불가능해지기 때문에 접속이 조금 귀찮아집니다.
DSM에서는 이렇게 구글 인증기로 로그인을 못하는 경우 이메일로 인증코드를 받아 로그인할수도 있게 만들어져 있어서 로그인이야 했습니다.
근데 솔직히 이쯤 되면 좀 짜증나더군요;
이렇게 입력해놔도 이런 일이 생기는걸 보니 DSM 자체 시간 동기화 기능이 정상적으로 작동하지 않는 것으로 보여,
제가 시간 동기화하는 스크립트를 만들어 스케줄러에 추가하기로 결정.
이번 글에서는 그 방법에 대해 적습니다.
DSM에 관리자 계정으로 로그인하면 제어판 등 관리 메뉴를 볼 수 있습니다.
그리고 제어판의 작업 스케줄러에서 특정 작업을 수행하는 sh 파일이나 스크립트를 주기적으로 실행되게 등록할 수 있습니다.
제 경우는 sh 파일을 만든 뒤 그걸 스케줄러에 등록했는데, 파일 만들기가 번거롭다 하시는 분은 바로 스케줄러에서 스크립트를 등록하셔도 됩니다.
다만 후자의 경우는 제가 테스트를 못해봐서.. 이 글에서는 내용이 빠집니다.
우선 DSM의 관리자 계정으로 로그인한 다음, Synology DSM에 내장된 텍스트 편집기를 실행합니다.
그리고 아래 코드의 내용을 복사해 입력한 뒤, 파일명을 'ntp.sh' 로 저장합니다.
경로 자체는 어차피 나중에 지정해줘야 되니 원하시는 아무 위치나 관계없고, 앞의 'ntp' 는 임의의 이름을 붙히셔도 되는데, 확장자는 'sh' 이어야 합니다.
이때, 이 sh 파일이 올라가는 폴더는 가급적 필요한 사람들만 접근 가능하게 설정하시길 권합니다. 주로 관리자 위주로.
덧붙혀, 윈도우에서 이 텍스트를 복사해 sh 파일을 만들어 업로드 하셨다면 윈도우와 리눅스의 개행문자가 달라 작동이 안될 가능성이 높습니다.
DSM 내 텍스트 편집기를 이용해주시기 바랍니다.
궁금해하는 분이 계실까 싶어 실행 스크립트의 설명도 간단히 해보자면,
>> 좌측은 ntpdate로 시간을 맞추는 과정. 참고로 ntpdate는 Synology NAS에만 존재하는것이 아닌 UNIX/OSX 공통 구성요소입니다.
-u 이외의 옵션은 이 페이지를 참고해주시고, 시간 동기화시 사용하는 time2.kriss.re.kr 는 한국 표준과학연구원에서 제공하는 시간서버.
>> 와 그 우측은 /var/log/ 경로 아래에 cron.log 라는 이름으로 시간 동기화중 생성된 텍스트를 로그로 기록하는 코드입니다.
Synology NAS는 cron(스케줄)의 로그를 따로 남기지 않아, 제가 수동으로 로그를 남기려고 추가한 코드입니다.
추후 SSH로 위 경로의 cron.log를 열면 시간 동기화 기록 로그를 열람할 수 있습니다.
무튼 만드셨다면 작업 스케줄러에 등록할 차례입니다.
'제어판 - 작업 스케줄러' 에서 '사용자 정의 스크립트' 를 선택합니다.
'작업 생성' 창이 뜨면..
..작업명은 구분 가능한 임의의 이름을 입력하시면 되고, 사용자는 root로 설정.
하단에 있는 실행 명령에는 아까 위에서 저장한 sh 파일의 위치를 지정해주시면 됩니다.
/volume1/ 은 Synology NAS 내부의 공유폴더 최상위 폴더명이며, 이 하위에 공유폴더명과 파일명을 입력해주시면 됩니다.
제 경우는 아래와 같이 됩니다.
참고로 폴더, 파일명 모두 대/소문자를 구분합니다.
그리고 위에서 sh 파일을 생성하지 않은 분들께서는 먼저 위의 ntpdate~ 줄 코드를 복사해 추가해주시면 되겠습니다.
직접 스크립트를 등록하실 경우는 '#!/bin/sh' 입력이 필요없습니다.
스케줄 탭에선 실행 주기를 설정할 수 있습니다.
설정을 마쳤으면 확인을 누릅니다. 작업이 등록되었습니다.
혹시나 해서 오후 5시 8분으로 설정해서 테스트해보니, 위와 같이 정상적으로 실행되어 log도 기록되는군요. 성공입니다.
사실 이건 root 계정으로 SSH 접속해 /etc/crontab에 직접 등록해도 됩니다만,
이러면 약간의 리눅스 지식이 있어야 하기에 편하게 관리 가능한 쪽을 택했습니다.
참고 웹페이지
- NTP Failing to sync [Synology Online Community Forum]
- time out of sync [Synology Online Community Forum]
- Create sh file with a simple command [Synology Online Community Forum]
아무튼 이제는 시간이 차이나서 2단계 로그인 실패할일은 거의 사라질것 같아서 좋군요. 개운합니다.