Setting up time synchronization

I wanted to setup time synchronization on my Linux router. I then wanted to have my Windows machine synchronize time with the router.

Here is the article about how I accomplished that.

Contents

Setting up a Linux NTP server

Had to install the NTP server software and configure it to the configuration that would work for me.

yum Package

The applicable yum package is ntp:

yum install ntp

Configuration file

The applicable configuration file is /etc/ntp.conf. The sections I had to modify pertained to the restrict and server options.

restrict options

The first restrict options allow the local machine to access the ntp daemon:

restrict 127.0.0.1
restrict -6 ::1

Now, I added a section to allow LAN machines to be able to query the server but not to be able to modify configuration or provide trap service (quoting from the man page: which is intended for use by remote event logging programs):

restrict 192.168.3.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.4.0 mask 255.255.255.0 nomodify notrap

Finally, we need to allow access to the servers we will be using to synchronize time. I got these servers from the pool.ntp.org Project. Same restrictions as the LAN with the added restriction that these servers are not allowed to perform query on our servers:

restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery

For more information on the restrict options:

man ntp_acc

server options

Finally, we setup which servers we want to synchronize with. As mentioned above, I got these servers from the pool.ntp.org Project:

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org

Starting NTP service

To start the ntpd service, you would do something like this:

/sbin/service ntpd start

To configure it to start automatically:

/sbin/chkconfig ntpd on

Testing and troubleshooting

First thing, we should make sure it starts correctly. After starting the server, grep /var/log/messages for ntpd just to make sure things started up fine:

[belminf@home ~]# sudo grep ntpd /var/log/messages

home ntpd[15000]: ntpd 4.2.4p2@1.1495-o Mon Sep 24 14:40:07 UTC 2007 (1)
home ntpd[15001]: precision = 1.000 usec
home ntpd[15001]: Listening on interface #0 wildcard, 0.0.0.0#123 Disabled
home ntpd[15001]: Listening on interface #1 lo, 127.0.0.1#123 Enabled
home ntpd[15001]: Listening on interface #2 eth2, 68.161.230.103#123 Enabled
home ntpd[15001]: Listening on interface #3 eth0, 192.168.3.1#123 Enabled
home ntpd[15001]: Listening on interface #4 eth1, 192.168.4.1#123 Enabled
home ntpd[15001]: kernel time sync status 0040
home ntpd[15001]: frequency initialized 307.091 PPM from /var/lib/ntp/drift

We could then use the ntpq command to view the current status of the server and what other srevers it's interacting with by using the -p option.

When you first start up the server, you should see something like this:

[belminf@home ~]# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 mail2.safire.bz 18.103.0.198     2 u    3   64    7   58.155   -3.329   0.856
 phoenix.netserv 64.113.44.54     2 u   63   64    3   59.387    1.998   0.697
 kiri.nonexiste. 66.36.239.104    3 u   65   64    3   57.072    4.045   0.504
 LOCAL(0)        .LOCL.          10 l   62   64    3    0.000    0.000   0.001

But as the sever synchronizes with other servers, you should see something like this:

[belminf@home root]$ /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*mail2.safire.bz 18.103.0.198     2 u   10   64   77   57.713   -2.274   0.890
+phoenix.netserv 64.113.44.54     2 u    4   64   77   59.038    1.368   1.327
+kiri.nonexiste. 66.36.239.104    3 u    8   64   77   56.552    3.564   0.505
 LOCAL(0)        .LOCL.          10 l    6   64   77    0.000    0.000   0.001

For info on the significance of this output, man ntpq.

Getting a Windows PC to synchronize

Setting the NTP server

The following command will set your server and then, just to make sure the change was successful, perform a query:

C:\>net time /setsntp:192.168.3.1&& net time /querysntp
The command completed successfully.

The current SNTP value is: 192.168.3.1

The command completed successfully.

Restarting the service

And probably good to restart the w32time service:

C:\>net stop w32time&& net start
The Windows Time service is stopping.
The Windows Time service was stopped successfully.

The Windows Time service is starting.
The Windows Time service was started successfully.

Manual time synchronization

If force the time to synchronize, use this command:

w32tm /resync