我在 Ubuntu Server 10.04 上安装了 NTP 服务器,使用方法如下:
sudo apt-get install ntp
NTP 守护进程似乎正在运行并监听 123 端口。
但是,我无法从另一台机器获取时间:
sudo ntpdate -u my_ntp_server
23 Nov 18:48:41 ntpdate[2990]: no server suitable for synchronization found
是否需要进行任何必要的配置?
答案1
这是来自 Ubuntu 论坛的一个很好的操作方法:http://ubuntuforums.org/showthread.php?t=862620
公然复制粘贴:
如何设置 NTP 服务器
本教程介绍如何将您的机器设置为本地网络时间协议 (NTP) 服务器和/或如何使用 NTP 守护程序定期维护准确的系统时间。
什么是 NTP?
网络时间协议 (NTP) 是一种用于精确同步本地时钟和联网时间服务器的协议。NTP 时间服务器网络采用分层方式设置,因此任何用户都可以作为某个级别的服务器进入系统(有关更多详细信息,请参阅 Wikipedia 页面)。
NTP 层次结构分为不同的级别,称为时钟层。最精确的级别 Stratum 0 是为原子钟等保留的。下一个级别 Stratum 1 通常由本地连接到 Stratum 0 时钟的联网机器使用。Stratum 2...15 是 NTP 机器,它们依次连接到较低级别的时钟并相互连接。
本指南介绍如何与 Stratum 1 和 2 机器准确同步,并全天保持尽可能准确的系统时钟。其中还包括有关如何让您的机器作为本地网络上其他机器的 Stratum 2/3 服务器运行的部分。
我必须建立一个 NTP 服务器吗?
不……绝对不是!如果您对网络上的时钟与标准时间(以及彼此之间)存在一些未知差异感到满意,那么您不必设置 NTP 服务器。我在笔记本电脑上设置了一个 NTP 服务器,以便在 < 1 毫秒内同步本地网络上的多台机器,以进行生物工程实验。此外,还有其他各种优势,如下所述。
动机:
未经修改的 Ubuntu 机器通常使用 ntpdate ( /usr/sbin/ntpdate
) 定期与某个外部时间服务器同步时钟。此方法以粗略的精度同步时钟(通常每天一次)。
计算机时钟并不完美,在一天中会偏离(正确的)时间服务器。此外,不同计算机时钟的漂移率也不同,因此到了一天结束时,不同的本地联网机器之间可能会存在显著差异,这可能会干扰某些操作(例如,在不同机器之间移动源代码时,makefile 会发出抱怨吗?)。
可以在网络上的计算机上本地运行 NTP 守护程序。这有多个优点:首先,NTP 守护程序会逐渐“了解”本地计算机的漂移率,并可以在一天内进行校正。与上级时间服务器的同步每天进行多次,并且可以同时使用许多不同的时间服务器来使同步更准确。通过这种方式,NTP 守护程序充当准确的时间客户端,使您的系统时钟尽可能接近标准时间。
除了保持准确的系统时钟之外,NTP 守护程序还允许您网络上的计算机(如果您愿意)作为 NTP 时间服务器运行。这样做将允许您本地网络上的其他计算机以非常快速和准确的方式与您的 LAN 时间服务器同步,因为网络延迟被最小化。通过这种方式,您网络上的机器之间的时钟差异被保持在尽可能小的水平。如果您设置了一个 NTP 服务器,Mac 甚至 Windows 机器也能够与它同步。
将机器设置为 NTP 服务器还有其他一些非个人动机。首先,这样做可能会减少更高级别 NTP 服务器的压力,因为 LAN 上的其他机器可能会与本地建立的时间服务器同步。此外,ntpdate 已被弃用,取而代之的是使用 ntpd 的 -q 标志(模仿其功能)。因此,即使您不想在后台不断运行 ntpd,ntpdate 最终也会被 ntpd 取代,因此您可能希望现在就熟悉它
如何使用 ntpd 维护准确的系统时钟
- 安装 NTP 守护程序
首先,安装 NTP 守护进程(ntpd):
sudo aptitude install ntpd
如前所述,ntpd 既可以作为客户端(同步您的系统时间),也可以作为服务器(为其他机器提供准确的时间)。
或者,您可能还想删除以前的(已弃用的)时间同步程序 ntpdate。在 ntpd 正常工作后再这样做可能更明智
sudo aptitude remove ntpdate
- 正确配置守护进程
ntpd 的配置文件位于/etc/ntp.conf
。默认的 Ubuntu 文件可能需要进行一些修改才能获得最佳性能。
您可能要修改的第一个部分是要同步的服务器列表。默认部分可能如下所示:
# You do need to talk to an NTP server or two (or three).
server ntp.ubuntu.com
为了获得尽可能准确的时间,最好与多个不同的 NTP 服务器通信,并尽可能让它们靠近您的物理位置。网上有各种不同的服务器列表,可能最好的列表位于此处。对于使用多少台服务器合适存在一些争议。一台比两台好,三台或更多台可能是一个好主意,只要您不要太多。以下是我使用的几个时间服务器的示例:
server nist1-dc.WiTime.net iburst
server ntp0.mcs.anl.gov
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org
一旦找到几个好的服务器,就把它们添加到列表中,放在'iburst'
最有希望的服务器后面。例如:
server nist1-dc.WiTime.net iburst
这将导致 ntpd 在启动后非常快速地与此服务器同步。否则,ntpd 将慢慢趋向于与服务器列表一致(这是它的本质),并且可能需要 15-20 分钟才能同步到足以充当网络其余部分的时间服务器。
此外,在您暂时失去互联网连接时,请在服务器列表底部添加几行额外的行,以提供您当前的本地时间作为默认值:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
如果您在笔记本电脑或其他机器上运行 ntpd,并且间歇性地与互联网断开连接,这将防止任何不良情况的发生。
总而言之,服务器列表应类似于以下内容(这是我的,您的服务器可能会有所不同):
# You do need to talk to an NTP server or two (or three).
server nist1-dc.WiTime.net iburst
server ntp0.mcs.anl.gov
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org
server 127.127.1.0
fudge 127.127.1.0 stratum 10
- 确保配置有效
现在您的文件中已经有了正确的服务器列表/etc/ntp.conf
,是时候运行守护程序并查看是否正确同步了!确保您有活动的 Internet 连接,然后运行:
sudo /etc/init.d/ntp restart
接下来,监视系统日志以查看是否与时间服务器同步:
tail -f /var/log/syslog
大约 10-15 秒后(如果您忘记在您最喜欢的服务器后面加上“iburst”,则最多 15-20 分钟),您应该在系统日志中看到类似以下内容:
Jul 17 16:50:22 hostname ntpd[22402]: synchronized to 140.221.9.20, stratum 2
如果此消息始终未出现,则表示您尚未正确与 NTP 服务器网络同步。使用以下命令检查您正在通信的 NTP 对等体列表:
ntpq -c lpeer
如果“延迟”、“偏移”和“抖动”字段不为零,并且您尚未同步,则可能意味着您只需要等待一段时间。再次检查您是否已将“iburst”参数插入到服务器列表中!作为参考,我的同行看起来如下所示:
remote refid st t when poll reach delay offset jitter
==============================================================================
*milo.mcs.anl.go 192.5.41.40 2 u 4 64 77 46.213 67.753 2.207
-europium.canoni 193.79.237.14 2 u 63 64 37 97.375 71.020 1.875
-dtype.org 69.25.96.13 2 u 2 64 77 86.956 69.178 1.804
+smtp130.junkema 216.218.254.202 2 u 2 64 77 87.266 67.677 0.916
+kechara.flame.o 216.218.254.202 2 u - 64 77 89.183 68.717 1.713
-host2.kingrst.c 99.150.184.201 2 u - 64 77 24.306 62.121 2.608
LOCAL(0) .LOCL. 10 l 59 64 37 0.000 0.000 0.002
- 分享!(可选)
一旦 ntpd 运行并与您选择的时间服务器同步,您就可以将其设置为其他机器的时间服务器。为此,请将如下部分添加到/etc/ntp.conf
:
# Allow LAN machines to synchronize with this ntp server
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
# You may add as many (or few) CIDR address blocks to allow to synchronize with your machine as you'd like. I included those commonly used with Linksys (192.168.1.*) and SMC (192.168.2.*) routers.
- 同步!(可选)
使用步骤 1-4 设置 NTP 服务器后,您可以通过各种方式将网络上的其他计算机与您的服务器同步。我在下面概述了其中几种:
ntpd:
如果你在另一台机器上安装了 ntpd,那么你可以使用 ntp.conf 文件的服务器列表中的第一个服务器,或者可以使用 -q 选项同步一次,如下所示:
ntpd -q [IP address of your server]
ntpdate:
如果您在另一台机器上仍安装了 ntpdate,则可以使用它与您的服务器同步,如下所示:
ntpdate [IP address of your server]
注意:如果您在机器上运行 ntpd,并且由于某种原因仍然想使用 ntpdate 来设置时间,则必须使用 -u 选项。
视窗:
Windows 计算机使用 NTP 的简化版本,称为简单网络时间协议 (SNTP),并且可以与 NTP 服务器同步。为了与新服务器同步,请双击时间并转到“Internet 时间”选项卡。将服务器的 IP 地址输入“服务器”字段。如果有人感兴趣,我附上了 Windows XP 与 LAN 时间服务器同步的屏幕截图。
就是这样!整个过程并不难,但对于以前没有接触过 NTP 网络的人来说可能会感到困惑。希望这能有所帮助!如果您在设置服务器时遇到任何问题,请告诉我。
麦克风
链接
我发现以下链接很有帮助...您可能也会喜欢!
答案2
关于这一点有很多链接,在我看来,它们使过程变得复杂。在我的例子中,我有一台机器充当代理服务器和防火墙,而我所有的其他机器都通过它连接到互联网。我不想在防火墙上打开端口。因此,代理服务器必须是时间(ntp)服务器和其他机器(客户)从中获取时间。
您必须在所有机器上安装 ntp,并且您还应该在所有机器上安装 ntpq。
首先,看看 ntp 是否正常工作。默认情况下,ntpd(ntp 守护程序)在安装后会立即运行,默认设置应该可以正常工作。但是,ntp 不会立即工作,因此请等待一段时间。然后,命令:
ntpq -c lpeer
应该会给你类似这样的输出:
remote refid st t when poll reach delay offset jitter
==============================================================================
+golem.canonical 193.79.237.14 2 u 170 1024 377 140.458 -0.655 3.234
*gatekeeper.tss. 204.123.2.72 2 u 608 1024 377 84.650 2.168 0.471
或者:
ntpq --numeric --peers
remote refid st t when poll reach delay offset jitter
==============================================================================
+91.189.89.199 193.79.237.14 2 u 652 1024 377 140.151 -0.242 2.821
*66.7.96.1 204.123.2.72 2 u 64 1024 377 85.074 2.409 0.963
如果是,则表示您已连接并且您的时间服务器正在获取时间。如果没有,请使用
ps -e | grep "ntp"
确保 ntp 正在运行,然后重试。还可以尝试重新启动 ntp:
sudo /etc/init.d/ntp restart
建立连接可能需要一些“时间”(抱歉!)。守护进程并不经常轮询服务器。上面输出中的“when”列显示了自轮询服务器以来的时间(以秒为单位)。
现在,您必须让时间服务器将时间发送到您的其他机器。
在服务器上编辑文件/etc/ntp.conf
。您必须为您的网络添加一行。就我而言,我有一个 10.0.0.0 网络。在 ntp.conf 文件中,我添加了以下行:
broadcast 10.255.255.255
您必须为网络的每个段添加一条广播线路。如果您的网络像我的一样简单,则只需要一条像上面这样的线路。现在,使用上面的命令重新启动 ntp,然后再次使用 ntpq 检查,您应该会看到:
remote refid st t when poll reach delay offset jitter
==============================================================================
+golem.canonical 193.79.237.14 2 u 70 1024 377 140.151 -0.242 2.821
*gatekeeper.tss. 204.123.2.72 2 u 506 1024 377 84.650 2.168 0.241
10.255.255.255 .BCST. 16 u - 64 0 0.000 0.000 0.002
瞧瞧,广播开始了。
现在,你必须让每台客户端计算机从广播服务器获取时间。在每台客户端计算机上,编辑该文件:
/etc/ntp.conf
您将会看到一些指定服务器的行。
添加一行
server 10.10.10.1
或者您的服务器地址。然后使用上述命令在客户端计算机上重新启动 ntp。或者,您可以获取进程 ID 并终止它,然后再次运行它。随便。
然后,经过足够的时间后,使用 ntpq 检查:
ntpq --numeric --peers
remote refid st t when poll reach delay offset jitter
==============================================================================
*10.10.10.1 66.7.96.1 3 u 123 1024 377 0.430 1.022 1.831
您可以看到客户端正在使用时间服务器。
这需要一些时间。
答案3
接受的答案(截至 2018 年 7 月)对我不起作用。另一种方法在Ubuntu 16.04 LTS2018 年 7 月:
安装 NTP,如果未安装:
sudo apt-get update
sudo apt-get install ntp
编辑配置文件以允许 NTP 服务接收请求:
sudo nano /etc/ntp.conf --syntax=sh
取消注释此行:
# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
# broadcast 192.168.111.255
到:
# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
broadcast 192.168.111.255
重启 NTP服务:
sudo /etc/init.d/ntp restart
现在你的NTP 服务器必须正常运行并允许另一台计算机与您的计算机同步。上述任何测试(例如)都ntpdate -u YourComputer
应该可以正常工作。
检查 NTP 服务是否正在运行:要确认你的 ntp 服务至少正在运行,它正在从上游服务器获取时间,请运行
$ sudo ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
time.cloudflare .POOL. 16 p - 64 0 0.000 0.000 0.001
1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
....#further output omitted