서버 / IT [공개] 타임서버 공개합니다.
2018.03.16 13:06
Raspberry Pi 3 Model B를 이용 타임서버를 만들어 약 두달간 테스트해 본 후 안정적이라 판단되어 퍼블릭 타임서버 공개합니다. 처음 1주일동안 사용해 보니 온도가 50도 이상으로 올라가는 경우가 발생해 라즈베리 파이용 구리 방열판을 CPU와 Ethernet Controller에 부착하니 하루 24시간 내내 켜 놓은 상태로 팬 없이 케이스 뚜껑 닫은 상태로도 50도는 넘지 않습니다.
사실 개인이 이런 보잘것 없는 장비로 만든 퍼블릭 타임서버 공개할게 아니라 엄청난 장비와 회선을 보유한 네이버나 다음같은 포털등, SKT, uplus등 이동통신사등이 대국민 서비스 차원에서 퍼블릭 타임서버 만들어 제공하는게 합당한데 이들은 돈도 별로 들지 않는 이런 하찮은 것에는 관심이 없습니다. KT는 하위 타임서버들을 위한 타임서버를 운영하고 있습니다. 다만 비공개를 원합니다. 구글은 하는데...
현재는 Stratum 2에서 Stratum 3를 오고갑니다. 거의 대부분은 Stratum 2 상태입니다.
내 PC가 타임서버와 싱크되어 표준시각 정보 잘 받아오고 있습니다.
향후 Raspberry Pi 3 Model B를 Adafruit Ultimate GPS HAT for Raspberry Pi 모듈과 연결해 GPS 위성 신호를 직접 수신해 Stratum 1 서버 구축 예정입니만 창틀에 구멍을 내 외부 GPS 안테나 선을 실내로 끌어 들이는게 여의치 않아 망설이고 있습니다.
타임서버 ip가 유동 ip라 DNSZi.com (http://www.dnszi.com)에서 Dynamic DNS 서비스 받고 있는 중입니다. 따라서 사전 예고없이 ip가 바뀔 수 있으므로 반드시 Domain name 사용바랍니다.
pool 타임서버(kr.pool.ntp.org)에는 가입 안했습니다. 가입할 지 생각중입니다.
간단한 서버 소개입니다.
Domain name; ntp.gpstime.kr
Hardware; Raspberry Pi 3 Model B (1.2 GHz Broadcom BCM2837 64bit ARMv8 프로세서 / 1 GB 램) + 방열판(CPU & Ethernet Controller)
Power; DC 5V, 3A 스위칭 파워서플라이
microSDHC; 32 GB Class 10 SanDisk microSDHC
OS; Raspbian Stretch 9.3
NTP; ntp-4.2.8p10@1.3728-o
NetWork; SKBroadband 1 Gbps (그러나 Pi는 최대 100 Mbps...)
!! 당부의 말씀 !!
1. 대한민국 표준시 보급을 위해 만들었습니다.
2. 회선에 라즈베리 파이만 연결되어 있고 이 파이는 오로지 타임서버용으로만 사용중입니다. 해킹해 봤자 내부에 아무것도 없습니다. 그러니 해킹은 하지 마시기 바랍니다.
3. 많은 분들이 사용하기에, 불필요한 접속은 삼가해 주시기 바랍니다.
4. 이 타임서버 사용하시면 댓글로 알려주시기 바랍니다.
댓글 [22]
-
DarknessAngel 2018.03.16 17:46
-
왕초보 2018.03.17 08:10
자세히 설명을 하여 주셔서 감사합니다
덕분에...이런것도 있구나..이런것도 가능하구나..하고 새로운 사실들을 알게 되었습니다.
즐거운 토요일 되세요...
-
DarknessAngel 2018.03.17 09:05
다른 OS는 괜찮은데, 윈도경우는 기본값이 마소 서버로 되어있는데, 이 서버가 상당히 심각하게 접속 지연내지 실패해서 동기화 잘 안 되거나 합니다
그런데 로컬에서 서버 돌리면 동기화 2~3초만에 끝납니다 (실패율도 10%미만)
참고로 제경우 흔히 쓰이는 서버 대부분을 구축해서 서버군 구축후 네트워크 장비와 도메인을 구매해서 쓰고 있는데, 여러모로 편합니다
-
kungms 2018.03.16 21:06
이런 서버를 만드실 수 있다니! 멋집니다.
-
눈이 2018.03.16 22:40
한국 표준시라 멋집니다 제 윈도 표준시를 님의 도메인으로 맞췄네요 ^^
-
ehdwk 2018.03.17 07:09
수고하셨습니다. -
왕초보 2018.03.17 08:09
와! 이런것을 직접 만드셔서..사용을 하시다니...그저 놀랍고 신기하기만 합니다...
윈포에...다양한 분야로 숨을 고수님들이 계신것을 알았지만...이런것이 가능할줄을 생각도 못했습니다
놀라운 작품을 보여주셔서 감사합니다..
신세계를 경험하는 기분입니다..
그리고..너무 깔끔하고이쁘게 만드셨네요..
어떻게 만드셨는지..놀랐뿐입니다..
즐겨운 토요일 되세요..
-
concentric 2018.03.17 08:56
이런건 처음 보네요~~ 금손인정 엄지척 입니다~~
-
사차원 2018.03.17 09:09
수고하셨습니다.
한번 사용해보고 싶네요.^^
-
DarknessAngel 2018.03.17 09:27
저도 NTP서버 새로 구축(독립 서버&회선&도메인)해서 공개해봅니다
그다지 안 중요하다보니 도메인은 그냥 ddns로 때웁니다
회선 : 100Mb
서버 : 아톰NUC (N3050 1.6Ghz + RAM 8G + SSD 64G)
이쪽이 서버 사항이 높다보니 라즈베리보다는 많은 클라이언트 감당가능할듯합니다
직접 서버 구축을 해볼분들을 위해 간단하게 방법 적어봅니다 (어차피 구글링하면 썩어넘치긴합니다)
1. 적당한 리눅스 유포판을 설치후 NTP패키지를 설치합니다 (NTP패키지정돈 모든 유포판에서 제공되므로 아무꺼나 골라주시고, 기존 서버 있으신분들은 거기 깔아주세요) (하다못해 WRT등을 돌리는 공유기라도 충분합니다)
2. /etc/ntp.conf (유포판에 따라 다를 수 도 있습니다)를 수정해서 server와 pool을 수정합니다
추천은 가까운 서버인
kr.pool.ntp.org
jp.pool.ntp.org
asia.pool.ntp.org
정도를 추천하고, 보험으로 time.google.com정도를 추가로 등록해두시면 됩니다
3. 마무리로 UDP 123포트를 방화벽에서 열어주고, 서비스 재시작하면 끝입니다
-
asklee 2018.03.17 11:30
NTP 서버 구축은 대단한게 아닙니다. 그냥 노는 PC나 서버에 NTP 프로그램 설치 후 설정만 해주면 됩니다.
NTP 설정시 헷갈리는 부분만 정리해 봤습니다.
NTP 설정은 ntp.conf 라는 파일 하나입니다. 그냥 편집기로 열어 입력해 주면 됩니다. 편집 끝나면 ntp 데몬 재실행해 주세요.
ntp.conf 파일을 편집기로 열어보면 굉장히 복잡한 느낌이 들지만 다 필요없고 꼭 필요한 부분만 편집하면 됩니다. 일단 예를 들어봅니다. 아래 예는 저의 타임서버 중 하나인 우분투 서버에 설치되어 있는 ntp.conf 파일입니다.
=======================================================================================
root@ntpserver:~# cat /etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for helpdriftfile /var/lib/ntp/ntp.drift
# Specify one or more NTP servers.
server xxx.xxx.com iburst
server yyy.yyy.net iburst
server zzz.zzz.org 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
restrict ip 주소
restrict ip 주소===============================================================
driftfile /var/lib/ntp/ntp.drift 는 타임서버의 정확도를 /var/lib/ntp/ 디렉토리에 ntp.drift라는 파일 이름으로 기록하라는 뜻입니다. 없어도 됩니다만, 자신의 타임서버 성능을 알아 보는데 필요합니다.
server xxx.xxx.com iburst 는 외부의 타임서버에서 시각 정보를 받아오도록 외부 타임서버를 설정해 주는 명령어로 한개의 서버당 한줄씩입니다. 물론 도메인 네임으로 해도 되고 ip 주소를 입력해도 됩니다. 몇개의 외부 서버를 설정해야 하는가에 대해 갑론을박이 있지만 10개 정도면 충분합니다. 자신보다 상위 레벨 서버를 반정도, 같은 레벨의 서버를 나머지 반정도 하면 됩니다.
iburst 옵션은 ntp 데몬이 실행 될때 바로 시각 정보를 받아오라는 옵션입니다. 그외 여러개의 옵션이 존재하나 이 정도면 충분합니다.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited위의 두줄 명령어는 ntp.conf 파일에 디폴트로 설정되어 있으며 아주 중요합니다. 변경하지 마세요. 이 설정을 한 이유는 다음과 같습니다. 몇년전에 ntp 프로그램을 이용한 DDOS 공격이 전세계적으로 있었습니다. 타임서버 사용자들이 자신이 사용하는 서버가 제대로 작동하는가를 알기 위해 'ntpq -p 타임서버의 주소'를 입력하면 상대방 타임서버 상태를 알려줬는데 이를 악용한 DDOS 공격이었습니다. 따라서 이 편리한 기능을 막았습니다. 바로 두줄이 그 명령어입니다. 반드시 설정해야만 하는 명령어입니다. 동시에 보안을 위해 가장 최신의 NTP 프로그램을 사용해야 합니다.
구글의 타임서버로 ntpq -p time4.google.com 해 봤습니다.
타임 아웃이고 아무것도 받지 못했다고 나오는데 바로 위의 두줄 명령어를 설정했기 때문입니다.
이렇게 해 놓으면 타임서버 관리자도 해당 서버에 직접 접속하지 않는 이상 해당 서버의 상태를 알 수 없습니다. 아주 불편합니다. 그래서 어느 특정 서버나 컴퓨터에서는 가능하도록 하는 방법이 그 아래입니다.
즉
restrict 127.0.0.1
restrict ::1
restrict ip 주소
restrict ip 주소위에서 restrict 다음에 ip 주소를 입력해 두면 해당 ip를 갖는 pc에서는 ntpq -p 명령을 사용할 수 있습니다. 주의할 점은 여러개의 ip를 입력할 때 쉼표가 아닌 별도의 줄에 입력해야 합니다.
NTP 운영에 필요한 명령어 모음 첨부합니다. 일명 NTP 치트 쉬트
-
DarknessAngel 2018.03.17 15:53
서버 10개도 필요없습니다
요즘은 어차피 pool주소로 설정하고, pool하나에 서버가 몇대(심하면 수십대)는 포함되어있으므로 단 1줄이 사실상 서버 몇개랑 동일한 효과가 있습니다
덕분에 pool 3~4개만 설정하면 서버 수십대의 ip가 입력된거나 동일합니다
그리고 어차피 개수 많아봤자 받아오는 데이터값중 1개가 최종적으로 서버에 반영되고, 그걸 외부로 유포하게 되므로 몇개나 동시에 받아올 필요도 없으므로 많이 등록할 필요 더더욱 없습니다 (개수 여러개 입력하는것자체가 접속 불가등에 대비한 비상용도이외의 의미 거의 없음)
참고로 NTP요즘 버전 기본적으로 깔면 기본값으로 모든게 다 입력되어져 있으므로 그대로 써도 되지만, 그나마 가까이 있는 한국이나 일본등의 서버를 입력하는게 나으므로 서버 주소만 수정하고, 나머지는 제대로 되어있는지 눈으로 훌어보는 정도로 충분합니다
추신 : 윈도에서 서버 돌려도 잘 돌긴하는데, 장시간 켜두면 어느순간 안 되거나하는등의 문제가 있으므로 추천은 안 합니다
-
asklee 2018.03.17 16:47
DarknessAngel님 말씀 다 맞는 말씀입니다. 그러나 나는 kr.pool.ntp.org 풀 서버는 별로입니다. 현재 한국 풀에 4개의 타임서버가 작동중입니다. 그중 두개는 cdnetworks에서 운영하는 서버이고 하나는 인천 남동구에 있는 회사 서버입니다. 다른 하나는 어디 있는 어떤 서번지 모릅니다.
문제는 cdnetworks 서버를 빼곤(가끔 이들 서버도 좀 이상합니다) 별로 신뢰가 가지 않습니다. 신뢰가 안간다는 말은 서버 시각이 많이 틀리다는 얘깁니다.
그래서 ntp.org에서도 추천하는 서버는 자기보다 상위 즉 내가 스트라텀 2면 스트라텀 1 서버 몇개와 peer 즉 자신과 동등한 위치의 서버 몇개를 선택하라고 합니다.
서버들은 정상작동하다가 죽기도 합니다. 코리아 풀에 있는 서버가 많으면 별 문제 없지만 달랑 4개라 불안합니다. 그래서 저의 경우 국내 공개 스트라텀 1 서버(대표적으로 포항공대 타임서버)와 비공개 스트라텀 1서버, 미국과 일본의 서버 몇개를 이용합니다.
표준과학연구원 서버는 사용하지 않습니다. 요즘 부모가 시간 정해놓고 PC 사용 못하게 하는 프로그램도 표준과학연구원 서버를 사용하도록 해놔 트래픽 장난 아닙니다. 뿐만 아니라 사설 경비업체의 장비들도 표준과학연구원 타임서버와 동기시켜놨습니다. 뭐 대단한 거라고 국내 최고의 서버를 이렇게 혹사시키는지...
-
DarknessAngel 2018.03.17 19:57
저도 kr pool은 그다지 신뢰 안 합니다
저런 이상한 프로그램을 포함해서 별의 별넘들이 다 지들 서버 구축 안 하고 의존해되서 그런지 수시로 먹통되고, 오타 생기거나하더군요
그래도 그나마 젤 가까운데 있는 서버다보니 일단 목록에 추가는 해둔 상태입니다
-
gkgk77 2018.03.17 12:01
아두이노 프로그램인듯.....
-
Neutron 2018.03.18 18:44
이것으로 아두이노 (MCU) 기능을 대신하기는 매우 어렵습니다.
예로 전압/전류 기반으로 온도등 계측제어 시스템의 구축을 위해서는 역시 MCU 보드가 필요하고
위의 RPi는 이런 다수의 장치를 RS-485로 중앙 수집하는 정도에 그칠겁니다.
-
Playing 2018.03.17 21:20
크~ 부족하여 뭐가 뭔지 이해를 못하였지만
본문과 댓글을 흥미롭게 봅니다
여러분들 고맙습니다~!
-
asklee 2018.03.18 20:33
구글 타임서버와 풀 타임서버 못믿겠네요.
먼저 구글 타임서버입니다.
맨 왼쪽에 * 표시된 서버가 제 타임서버의 기준이 되는 서버입니다. 현재 기준 타임서버와 -0.118 ms 즉 제 타임서버가 기준 타임서버 대비 0.118/1000 초 빠릅니다. 그런데 구글 타임서버는 제 타임서버 대비 19.023/1000 초 느립니다. 다른 서버와 비교해 보면 오차가 상당히 크네요.
offset의 부호가 (-)면 싱크된 타임서버 대비 내 컴퓨터 시계가 빠르다는 뜻이고 (+)면 느리다는 뜻이며 단위는 ms(밀리 세컨드) 즉 1/1000초 입니다
이번에는 DarknessAngel님의 서버와 kr, jp, asis 풀 서버를 함께 보겠습니다.
1번이 제 서버이고 2번이 DarknessAngel님 서버, 3이 kr, 4는 jp, 5는 asia 풀 서버입니다. DarknessAngel님 서버와 kr 풀 서버의 오차가 있는 것은 바로 구글 타임서버에서 시각을 가져오기 때문이라 봅니다. kr 풀 서버도 역시 8.031 ms 느립니다. jp와 asis 풀 서버는 딜레이가 엄청납니다. 특히 asia 서버는 offset도 -74.568 ms로 엄청납니다. 거리가 훨씬 먼 미주쪽 서버보다도 딜레이가 크고 시각도 틀립니다.
구글이 왜 갑자기 불안정한지 모르겠습니다.
참고로 위의 그래픽에서 색상이 의미하는 것은 아래와 같습니다.
앞에 *표가 있는 초록색; 해당 타임서버가 본 컴퓨터의 싱크 상대로 선택됨
+ 노란색; 상호 시각 정보를 교환하기 적합하다고 선택된 서버
- 빨강색; 시각 정보를 얻는데 적합하지 않은 서버
-
DarknessAngel 2018.03.19 01:55
정확도에 그다지 관심이 없어서 신경 안 썼는데 지금 제 서버 ntpq -p해보니 구글 서버에서 가져오고 있군요
이번 기회에 굴러다니는걸 좀 더 활용해서 뜯어고쳤습니다
실내라 그런지 정확도가 엉망이군요
GPS를 물려서 신호를 받아오게 한다음 gpsd에서 PPS로 직접 시각을 받아서 그걸 prefer로 잡고, GPS로도 받아오게 2중으로 설정후 보험으로 인터넷에서 1군데만 받아오게 해놨습니다
작업중 막히는 구석 있어서 삽질(알고보니 별거 아니었음)했는데, 결국 원인은 커널 옵션에서 PPS를 Y가 아닌 M으로 해놓고는 /etc/modules에 pps_gpio를 안 추가해서 모듈이 없어서 GPS정보를 처리 못하는거였습니다 (그것도 모르고 이상한 구석 다 뒤지고 삽질함)
제 서버쪽 표시 결과입니다 (메인 서버) (이정도하면 ST3급정도는 충분히 확보 가능합니다) (제 로컬 머신들은 죄다 이걸로 동기화받고 있습니다)
현제 공개중인 서버는 이 서버(스샷의 메인 서버)를 prefer 설정해서 하게 해놨습니다
이전보다는 나을꺼라 생각됩니다
-
DarknessAngel 2018.03.19 02:37
참고로
이게 메인이고
이게 현제 공개해둔 도메인용 서버 (위의 메인에서 정보 받아옴)
이게 구글 서버입니다
웃기는점은 메인서버에 동기화시키고나서 실행해도 저렇게 차이가 나오는점입니다
추신 : 저 google서버가 오차가 크다고 하셨지만 Windows 기본으로 쓰이는
이넘에 비하면 새발의 피입니다 (특히 여긴 접속 실패도 매우 잦음)
-
asklee 2018.03.19 21:11
DarknessAngel님이 드디어 GPS와 동기된 stratum 1 서버를 구축하셨군요.
가능하시다면 최고의 타임서버를 공개 타임서버로 해 주실 수는 없는지요?
과거 데이콤의 gps.bora.net, KT의 ntp.kornet.net, 부산대학교의 ntp1.cs.pusan.ac.kr / ntp2.cs.pusan.ac.kr, 그리고 개인이 운영하셨던 ntp.xbsd.kr 등 GPS와 동기된 stratum 1 서버가 꽤 있었는데 현재는 다 없어지고 오로지 포항공대만 ntp.postech.ac.kr 공개 타임서버를 운영중입니다. 포항공대 서버를 제외하고 아주 없애지는 않았을테고 아마도 비공개 서버로 돌렸다고 봅니다.
이중 부산대학교 서버는 모두 수입제품이던 GPS 연동 stratum 1 타임서버를 우리나라 최초로 개발해 보급하려고 했는데, 해당 교수님께서 교통사고로 돌아가시는 바람에 프로젝트 자체가 없어졌다고 알고 있습니다.
선진국에서는 수십 수백대의 stratum 1 타임서버들이 드글드글한데 우리나라는 현재 표준과학연구원과 포항공대 타임서버가 공개 타임서버로는 유일합니다. DarknessAngel님께 조심스럽게 부탁드립니다. DarknessAngel님의 GPS 연동 타임서버를 공개하실 수는 없는지요?
-
DarknessAngel 2018.03.20 05:50
죄송하지만 직접 공개는 보안상 피하고자합니다
현제 NTP만이 아니라 다수의 서비스를 해당 서버에 설치해놨는지라 보안상 미묘한 NTP를 공개하는게 꺼려져서 저렇게 별도의 서버를 하나 더 장만해서 그걸 공개한 상태입니다
참고로 GPS기반 서버 리눅스 기준으로 구축 어렵지 않습니다 (윈도 기반도 가능하지만, 한번도 안 해봄) (돈도 그리 많이 안 듭니다) (3만원정도 하는 굴러다니는 USB타입 동글을 사용해서 GPS신호 수신중입니다)
현제 구축하신 서버에 동글 하나 연결만 하셔도 충분히 가능합니다
먼저 gpsd를 추가로 설치하였고, 커널 옵션에서 pps_gpio를 활성화후 재부팅하였습니다 (제경우는 커널 컴파일 옵션에서 y가 아닌 m으로 해놨기때문에 /etc/modules에 해당 파일을 추가함)
다음 gpsd.conf에서 구동 옵션에 '-b -n'을 추가후 DEVICES파라메터를 수동으로 지정(안 하니 USBAUTO를 True로 해놔도 못 알아먹음)하였습니다 (해당 값은 ls -l /dev/serial/by-id로 확인 가능합니다)
마무리로 gpsd 서비스 재기동후 cgps명령으로 gps신호 수신여하를 확인후 ntp.conf에서 하단에 주석처리된걸 참조해서
server 127.127.28.2 minpoll 4 maxpoll 4
fudge 127.127.28.2 time1 0.0 refid GPS
server 127.127.28.1 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.1 refid PPS
이하의 4라인을 추가하였습니다 (구글링하면 나오는걸 참조함)
그리고 쓸떄없이 오차가 큰 kr pool과 google서버등을 포함한 모든 서버를 주석처리후 1개만 비상용(GPS신호 수신 불가 대비)으로 남겨놨습니다
라즈베리로 구축하는경우 라즈베리 + SD(OS저장용이므로 USB등도 가능) + USB타입 GPS동글 3개로 구축 가능하므로 다 합쳐서 2~30만원정도면 충분할꺼라 생각됩니다 (완제품으로 파는 GPS기반 NTP장비(보통 500달러정도) 왜 그리 비싼지 이해불능 (시리얼타입 GPS모듈 저렴한건 몇달러면 구매 가능하고, 저사항 embedded보드 1개 가격이 대량 양산시 2~30달러란점 고려하면 이해불능)입니다)
추신 : 저런식으로 기존 서버에 저렴하게 GPS신호를 소스로 추가가능합니다
추신2 : 기성품 비싸다고해도 장비 가격이 500달러정도인점을 고려하면 맘 먹으면 구매 못할 가격은 아닙니다 (공유기회사등은 대체 돈 벌어서 어디 쓰는지 자체 NTP서버도 안 구축하고 KR Pool을 갈구어서 저꼴로 만들어놨는지....)
저도 NTP 직접 구축해서 쓰고 있긴한데, 다른 잡다한 서버를 겸해서 돌리고 있어서 보안상 공개적으로 올릴 엄두가 안 나네요
참고로 저런 Embedded를 써도 되지만, 안 쓰는 구형 안드로이드폰에 root권한 획득해도 라즈베리보다 고사항이므로 저정도는 너뜬히 돌립니다 (무선랜으로 인터넷 연결후 폰 충전기라도 하나 꽃아두면 끝)
아니면 안 쓰고 방치중인 타블렛이나 노트북등은 좀 더 쉽게 저런 용도로 활용 가능합니다
추신 : 저정도 사항의 서버라도 NTP만 돌리는거라면 동기화 주기 12시간 기준으로 몇천대는 너뜬히 버팁니다 (그리고 데이터 분량 고려시 회선 속도는 그다지 안 중요)
추신2 : NTP, DNS같은 그다지 사항 안 좋아도 돌릴 수 있는 서버정돈 직접 구축해서 켜두면 로컬 머신 동기화용으로 편하게 이용 가능합니다 (일단 서버 구축만 하면 이후에 서비스 추가하는건 그리 안 어려우므로 이런저런 용도로 활용가능)