Today I Learned(8/16) - NTP

이종욱·2023년 8월 16일

"NTP"는 네트웍으로 연결되어 있는 컴퓨터들끼리 클록 시각을 동기화시키는데 사용되는 프로토콜이다.

시간 동기화가 필요한 거지 보다 더 정확한 시간이 필요한게 아니다. 물론 정확하면 좋지
그럼 시간 동기화가 필요한 이유? 나 MCU 너 모터 나한테 3시랑 너한테 3시가 같아야지 명령에 오류 없음, 고장 안 남

시간동기화 프로토콜 종류

  1. Time server: UDP/port 37 -> 대표적으로 rdate
    근데 시간오차(+윤초대응)시 step방식(빠르게 보정)으로만 보정하기 때문에 쓰면 안됨(NTP도 급할 땐 step방식 씀)
    slew 방식(천천히 보정)
    그래서 시간이 빠른 장비의 시간 보정을 rdate로 하면 (장비 관점에서)시간이 과거로 돌아가는 문제가 있음 -> DB의 경우 과거 시간으로 데이터가 쌓이면 DB 테이블이 깨질 수 있음.

  2. NTP: UDP/port 123 -> 표준 프로토콜, ntpd와 chrony(ntp에서 개선, 보안?)

  3. SNTP(simple): UDP/port 123 -> systemd-timesyncd에서 구현(약간 다름)
    시간정확도 떨어짐

  4. PTP: 더 정밀한 프로토콜(과학, 금융 등에서 사용)

  5. NTS(security for the ntp) -> chrony 4.0부터 지원

! ntpd는 데몬
! ntpdate는 ntp 이용하는 시간동기화 패키지 및 명령어

!! 실행권한 주는 거 생각 chmod -x
!! 데몬(__d)은 백그라운드에서 실행되는 프로그램 또는 서비스

NTP(UDP기반)

시간 동기화 chrony package 이용(-q quiet출력 간결)
systemd-timesyncd 기본적으로 깔린 요 sntp는 클라이언트 역할만 수행 가능
해당 서버(PC)와 클라이언트(pi4) 모두 설치 필요

설치 방법(ubuntu 20.04 기준, pi4와 PC간의 연결)

  1. sudo apt-get install -y chrony

  2. sudo nano /etc/chrony/chrony.conf(서버는 타임서버 설정, 클라이언트는 서버 ip)
    ------conf 파일 수정(서버용)------
    server [Time server ip] iburst(서버용)
    (기존 서버 주석 처리 server 대신 pool 써도 됨, iburst는 동기화 시간 단축 옵션, 다양한 옵션 있음 polling 등등)

    allow [Client ip]
    (server mode 추가 = client 연결 허용)

    local stratum 3
    (나 계층 3이야 선언)

    leapsecmode slew
    (slew 모드 추가, 다른 명령어로 분할 보정 가능, site 참고)

    ------conf 파일 수정(클라이언트용)------
    server [server ip] iburst(클라이언트용)
    (마찬가지로 기존 서버 주석 처리)

    leapsecmode slew
    (slew 모드 추가)

  3. sudo systemctl restart chrony(conf파일 바꿀 시 계속 해주기)

  4. sudo systemctl enable chrony(부팅 시 자동 실행)

  5. timedatectl status(동기화 확인)

  6. chronyc sources(서버는 타임서버와 싱크로 확인, 클라이언트는 싱크로 확인)

  7. systemctl status [ntp 쓰고있는거](동작 확인 가능)

foward time jump detected...?
=> 서버 구성 보고 타임서버 늘리기?
방화벽 오류시
=> 방화벽 설정 site 참고
chrony공식 문서 등등 더 깊게 공부해봐야 할 지도

출처
https://joungkyun.gitbook.io/annyung-3-user-guide/chapter6/chapter6-chrony
https://mini.jellypo.pe.kr/wp/?p=11212

기존에 깔린 systemd-timesyncd

sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd
할 필요 없이 chrony를 깔면 자동으로 비켜준다

기타(똥꼬쇼 하면서 알게 된 것들)

mask unmask => 방화벽으로 권한 껐다 키기
sudo ufw allow 123/udp => udp port에 대한 방화벽 해제(우분투용)

chrony 데몬 위치 /usr/sbin/chronyd => 심볼릭 링크 만들기 /etc/systemd/system 에 ln -s /usr/sbin/chronyd chronyd.service
(/usr/sbin 필수적이지 않은 시스템 바이너리, sbin과 bin은 sudo차이 root권한 차이)
/usr/bin/chronyc

enable disable 하는게 심볼릭 링크 지웠다가 만들었다가 하는 건가?(데몬으로 연결) 맞네 시발
enable 데몬, start는 상관없이 돌아감

sudo timedatectl set-ntp on =>껐다 키기

sudo systemctl mask systemd-timesyncd
Unit systemd-timesyncd.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/systemd-timesyncd.service → /dev/null.
=> 심볼릭 링크 야매로 만들기

apt-get update 오류
source.list에 [arch=amd64,i386] 링크 앞에 다운로드 받을 수 있는 아키텍처(64비트,32비트 다) 넣어주니까 apt-get update 잘됨;;(왠지 모르겠음)

profile
안녕하세요!

0개의 댓글