NTP 網絡時間協議用來同步網絡上不同主機的系統時間。你管理的所有主機都可以和一個指定的被稱為 NTP 服務器的時間服務器同步它們的時間。而另一方面,一個 NTP 服務器會將它的時間和任意公共 NTP 服務器,或者你選定的服務器同步。由 NTP 管理的所有系統時鍾都會同步精確到毫秒級。
在公司環境中,如果他們不想為 NTP 傳輸打開防火牆,就有必要設置一個內部 NTP 服務器,然后讓員工使用內部服務器而不是公共 NTP 服務器。在這個指南中,我們會介紹如何將一個 CentOS 系統配置為 NTP 服務器。在介紹詳細內容之前,讓我們先來簡單了解一下 NTP 的概念。
為什么我們需要 NTP?
由於制造工藝多種多樣,所有的(非原子)時鍾並不按照完全一致的速度行走。有一些時鍾走的比較快而有一些走的比較慢。因此經過很長一段時間以后,一個時鍾的時間慢慢的和其它的發生偏移,這就是常說的 “時鍾漂移” 或 “時間漂移”。為了將時鍾漂移的影響最小化,使用 NTP 的主機應該周期性地和指定的 NTP 服務器交互以保持它們的時鍾同步。
在不同的主機之間進行時間同步對於計划備份、入侵檢測記錄、分布式任務調度或者事務訂單管理來說是很重要的事情。它甚至應該作為日常任務的一部分。
NTP 的層次結構
NTP 時鍾以層次模型組織。層級中的每層被稱為一個 stratum(階層)。stratum 的概念說明了一台機器到授權的時間源有多少 NTP 跳。
Stratum 0 由沒有時間漂移的時鍾組成,例如原子時鍾。這種時鍾不能在網絡上直接使用。Stratum N (N > 1) 層服務器從 Stratum N-1 層服務器同步時間。Stratum N 時鍾能通過網絡和彼此互聯。
NTP 支持多達 15 個 stratum 的層級。Stratum 16 被認為是未同步的,不能使用的。
CentOS上安裝NTP
NTP在linux下有兩種時鍾同步方式,分別為直接同步和平滑同步:
直接同步
使用ntpdate命令進行同步,直接進行時間變更。如果服務器上存在一個12點運行的任務,當前服務器時間是13點,但標准時間時11點,使用此命令可能會造成任務重復執行。因此使用ntpdate同步可能會引發風險,因此該命令也多用於配置時鍾同步服務時第一次同步時間時使用。
平滑同步
使用ntpd進行時鍾同步,可以保證一個時間不經歷兩次,它每次同步時間的偏移量不會太陡,是慢慢來的,這正因為這樣,ntpd平滑同步可能耗費的時間比較長。
標准時鍾同步服務
http://www.pool.ntp.org/zone/cn網站包含全球的標准時間同步服務,也包括對中國時間的同步,對應的URL為cn.pool.ntp.org
,在其中也描述了ntp配置文件中的建議寫法:
server 1.cn.pool.ntp.org
server 3.asia.pool.ntp.org
server 2.asia.pool.ntp.org
1.NTP服務器端配置首先確定服務器的時區正確
timedatectl 查看具體時間時區
timedatectl list-timezones 查看具所有時區
timedatectl set-timezone Asia/Shanghai 設置時區
2 ntp服務器端安裝ntp
yum -y install ntp
編輯配置文件
vi /etc/ntp.conf
其中restrict 用於對訪問ntp的客戶端的限制
restrict參數
kod 使用kod技術防范“kiss of death”攻擊
ignore 拒絕任何NTP連接
nomodify 用戶端不能使用ntpc,ntpq修改時間服務器參數,可以進行網絡校時
noquery 用戶端不能使用ntpc,ntpq查詢時間服務器參數,可以進行網絡校時
notrap 不提供遠程日志功能
notrust 拒絕沒有認證的客戶端
restrict ip 或者 restrict IP地址 + mask + 子網掩碼 + 參數 例如:
restrict default nomodify notrap nopeer noquery #默認拒絕所有訪問 只可以同步時間
restrict 211.71.14.254 mask 255.255.255.0 #添加允許211.71.14.254/24網段訪問
restrict 10.111.1.1 mask 255.0.0.0 nomodify #添加10.0.0.0/8網段訪問,不可以修改服務器時間參數
server 參數 server用於設定ntp同步時間的外網時間服務器
server + ip 或者 server + hostname
使用prefer參數可以設置優先上級服務器 例如:
server 202.112.128.33 prefer #默認上級時間服務器為202.112.128.33
server 202.112.10.60 #備用上級時間服務器為202.112.10.60
設置本地時間級別是10,如果上級時間服務器均失效,對外發布本地時間。
server 127.0.0.1 # local clock
fudge 127.0.0.1 stratum 10
burst :當一個運程NTP服務器可用時,向它發送一系列的並發包進行檢測。
iburst :當一個運程NTP服務器不可用時,向它發送一系列的並發包進行檢測
默認情況小15分鍾后才會與上層NTP服務器進行時間校對。
通過minpoll和maxpoll來縮短同步時間,minpoll/maxpoll規定查詢的間隔,以2的幕的形式,取值范圍在4-17.
logfile
默認情況下,NTP 服務器的日志保存在 /var/log/messages。如果你希望使用自定義的日志文件,也可以指定。
logfile /var/log/ntpd.log
chown ntp:ntp /var/log/ntpd.log
key認證文件
driftfile /var/lib/ntp/drift #本地與上層服務器BIOS晶片振盪頻率差值保存目錄,不需要修改!
keys /etc/ntp/keys #可以借此來給客戶端設置認證信息,不需要修改!
硬件時間同步
ntp服務默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,
添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。
#允許BIOS與系統時間同步,也可以通過hwclock -w 命令
SYNC_HWCLOCK=yes
因此服務器端配置只需修改restrict和server參數即可,修改如下
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap
server 2.cn.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
最后啟動服務器
systemctl enable ntpd
systemctl start ntpd
3.客戶機需要同步時間可以有兩種方式
方式1: 直接在防火牆上放行此客戶機同外部時間服務器同步,此時直接安裝
yum -y install ntp
配置即同配置局域網ntp服務器一樣。
systemctl enable ntpd
systemctl start ntpd
此時ntp會以守護進程的方式去運行,且會自動同配置文件中的外網NTP服務器同步時間,不需人工干預。
方式2:和內網NTP服務器去同步 此時只需安裝utpdate軟件
yum -y install ntpdate
但需添加計划任務 讓服務器周期性去同內網NTP同步
vi /var/spool/cron/root(或crontab -e)
在每天的0點10分、8點10分、16點10分與時間同步服務器進行同步並寫入BIOS
10 0,8,16 * * * /usr/sbin/ntpdate 10.3.5.5; /sbin/hwclock -w
如果同步不正常,可以加輸出日志1.txt或看系統日志者看/var/mail/root系統郵件
0 */8 * * * /usr/sbin/ntpdate 10.3.5.5 >>/tmp/1.txt; /sbin/hwclock -w
也可以編輯cat /etc/sysconfig/ntpdate 中的SYNC_HWCLOCK=yes 自動同步到硬件時間。