2017年4月27日 星期四

[Ubuntu] NTP網路校時

原文:https://gavaee.wordpress.com/2010/10/27/ubuntuntp%E7%B6%B2%E8%B7%AF%E6%A0%A1%E6%99%82/
  • 整理一下NTP Client,NTP Server建置及Linux有關時間的一些資料。

Linux與時間有關的指令

  • /bin/date
    顯示Linux系統日期及時間
    # date MMDDhhmmYYYY
  • /sbin/hwclock
    這是一個 root 才能執行的指令,因為 Linux 系統上面 BIOS 時間與 Linux 系統時間是分開的,所以使用 date 這個指令調整了時間之後,還需要使用 hwclock 才能將修改過後的時間寫入 BIOS 當中!
    # hwclock -r  顯示BIOS內的時間
    # hwclock -w  將系統時間寫入BIOS
  • /usr/share/zoneinfo
    Linux系統提供的世界主要時區的時間設定檔,如:/usr/share/zoneinfo/Asia/Taipei即為台灣時時區檔
  • /etc/localtime
    Linux系統實際使用的時區檔,從/usr/share/zoneinfo內複製過來,所以若要變更時區,只要到…../zoneinfo內把需要的時區檔複到這裡並改名成localtime即可

NTP Client操作

  • # sudo ntpdate time.stdtime.gov.tw
    立即與time.stdtime.gov.tw校時,使用前須先停用ntpd
    同步結果:
    27 Oct 21:55:46 ntpdate[2683]: adjust time server 192.168.255.130 offset -0.023068 sec
  • 校時後,建議執行hwclock -w

NTP Server操作

  • 時間基本概念:
    • GMT:格林威治時間為標準時間(Greenwich Mean Time, GMT 時間)
    • UTC:協和標準時間(Coordinated Universal Time, UTC時間),用原子鐘(Atomic Clock)為基準所定義出來的正確時間
    • UTC 標準時間是以 GMT 這個時區為主,所以本地時間與 UTC 時間的時差就是本地時間與 GMT 時間的時差
    • 電腦的 BIOS 內部就含有一個原子鐘在紀錄與計算時間的進行!不過由於原子鐘主要是利用計算晶片 (crystal) 的原子震盪週期去計時的,且每種晶片都有自己的獨特的震盪週期,因為不同的晶片震盪週期多多少少都會有點差異性, 甚至同一批晶片也可能會或多或少有些許的差異(就連溫度也可能造成這樣的誤差呢!),因此也就造成了 BIOS 的時間會三不五時的給他快了幾秒或者慢了幾秒
  • NTP Server基本概念:
    • NTP Server使用Port 123 UDP封包,可用# netstat -tlunp觀察
    • 台灣常見的 Time Server 有:
      • tock.stdtime.gov.tw
      • time.stdtime.gov.tw
      • clock.stdtime.gov.tw
      • freq_f.stdtime.gov.tw
      • tick.stdtime.gov.tw
    • NTP與DNS一樣有階層概念,第一層NTP Server叫stratum-1,第二層叫stratum-2依此類推,共可建立15層!
    • 台灣stratum-2:
      • tock.stdtime.gov.tw (prefer)
      • tick.stdtime.gov.tw
      • time.stdtime.gov.tw
    • NTP Server套件
      • ntp
        NTP Server主要套件
      • tzdata
        時區套件
  • NTP 檔案:
    • /etc/ntp.conf
      NTP Server的設定檔
    • /usr/sbin/ntpd
      NTP Server主要daemon
    • /etc/init.d/ntp star/stop/restart
      啟動NTP Service的Script
    • /usr/sbin/ntptrace
      追蹤某部時間伺服器的時間對應關係

ntp.conf設定檔

  • 主要內容
    driftfile /var/lib/ntp/ntp.driftserver tock.stdtime.gov.tw prefer
    server tick.stdtime.gov.tw
    server time.stdtime.gov.tw
    restrict default nomodify notrap noquery
    restrict 192.168.100.11            <==底下這三行在開放主機進入的權限
    restrict 192.168.200.11
    restrict 192.168.210.11
    restrict 127.0.0.1       mask 255.0.0.0          <==內部與 LAN 的使用權限
    restrict 192.168.1.0  mask 255.255.255.0   nomodify    <==192.168.1.0網段可校時,但不能修改
  • driftfile /var/lib/ntp/ntp.drift
    • 紀錄本機時間與上層NTP Server的時間差異(本機時間預設依據BIOS計算而來)
    • driftfile 後面接的檔案需要使用完整路徑檔名
    • 該檔案不能是連結檔
    • 該檔案需要設定成 ntpd 這個 daemon 可以寫入的權限
    • 該檔案所記錄的數值單位為:百萬分之一秒 (ppm)
  • server [IP or hostname] [prefer]
    • 設定上層 NTP 伺服器
    • perfer 表示『優先使用』的主機
  • restrict [你的IP] mask [netmask_IP] [parameter]
    • 用restrict控制存取權限
    • 參數:
      • ignore
        拒絕所有類型的 NTP 連線
      • nomodify
        用戶端不能更改 NTP 伺服器的時間參數,這即表示用戶端不能使用 ntpc 與 ntpq 這兩支程式來修改伺服器囉。 但用戶端仍可透過這部主機來進行網路校時的
      • noquery
        用戶端不能夠使用 ntpq, ntpc 等指令來查詢時間伺服器,等於不提供 NTP 的網路校時囉
      • notrap
        不提供 trap 這個遠端事件登錄 (remote event logging) 的功能
      • notrust
        拒絕沒有認證的用戶端
      • 若沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思喔
      • 通常會先關閉 NTP 的使用權限,然後在一個一個的啟用允許登入的網段
      • restrict更多說明:ntpd access restrictions

啟動/重開/停止NTP Server

  • 啟動:# sudo /etc/init.d/ntp start
  • 重開:# sudo /etc/init.d/ntp restart
  • 停止:# sudo /etc/init.d/ntp stop

NTP指令

  • # netstat -tlunp
    主要看UDP 123的port
  • # netstat
    synchronised to NTP server (10.252.0.200) at stratum 3
       time correct to within 84 ms
       polling server every 1024 s
    表示本機對10.252.0.200校時,校正了84 ms時間,每1024秒校正一次
  • # ntptrace
    localhost: stratum 3, offset -0.002099, synch distance 0.171925
    tock.stdtime.gov.tw: stratum 2, offset 0.002473, synch distance 0.136901
    192.5.41.41: stratum 1, offset 0.000005, synch distance 0.000000, refid ‘USNO’
    列出目前我們的 NTP 伺服器與上層 NTP 伺服器彼此之間的關係
    由於我們已經和第二層連接上,但第二層與第一層就不是我們能管理的,所以若出現第一層time out也是正常的
  • # ntpq -p
    remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    *tock.stdtime.go 192.5.41.41      2 u   16   64  377   30.108    1.177   6.881
    +tick.stdtime.go 129.6.15.29      2 u   14   64  377   31.045   -6.446   6.410
    +time.stdtime.go 192.5.41.41      2 u    6   64  347   29.788   -1.144   8.233 列出目前我們的 NTP 與相關的上層 NTP 的狀態
  • ntpq -p欄位定義
    • remote:亦即是 NTP 主機的 IP 或主機名稱囉~注意最左邊的符號, 如果有『+』代表目前正在作用當中的上層 NTP ,如果是『*』代表也有連上線,不過是作為次要連線的 NTP 主機。
    • refid:參考的上一層 NTP 主機的位址
    • st:就是 stratum 階層囉!
    • when:幾秒鐘前曾經做過時間同步化更新的動作;
    • poll:下一次更新在幾秒鐘之後;
    • reach:已經向上層 NTP 伺服器要求更新的次數
    • delay:網路傳輸過程當中延遲的時間,單位為 10^(-6) 秒
    • offset:時間補償的結果,單位與 10^(-3) 秒
    • jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-6) 秒。

沒有留言: