Ntp

NTP (Network Time Protocol) is used to synchronize the system time with other devices over the network. This usually happens in a client-server model.

Emerge
Install the suite of NTP programs:

Alternatively OpenNTPD can be use instead of.

Ntp-Client
To adjust ntp-client's command and upstream servers, edit the configuration file:

Server
In the servers that will be used to synchronize the local time for ntpd can be specified. The default configuration is populated with:

Per default the Gentoo servers are listed and enabled. A list of available servers can be found here: ntp.org. A home or company server here can used, given that ntpd is running and the machine is allowed to.

On systems, where network connection is not always available at boot (laptops etc.) it might be helpful to add the following lines to server configuration:

This sets localhost as a server with low priority, so that the daemon starts properly even without network connection and switches to using network servers when connection is established.

Permissions
Permission are used to control who is allowed to synchronize or change permissions.

Access to NTP service allowed only from localhost. can be added to help prevent the server from being abused to conduct DDOS attacks:

Access to NTP service allowed only from the 192.168.0.0/24 network:

Denying access to NTP's monlist functionality, used for querying traffic stats but also exploited in a denial-of-service attack.

Usage
Basic tools and common usage.

ntp-client
To start the ntp-client:

To view the status of the client:

To have the client start at boot:

ntpdate
This used to be the client, but its functionality is now moved into ntpd and ntp-client itself. It is purely to set the local time when started and then exits (not a service):

Server
The server is both a client, and server. If the setup can not access net early in init, use server only instead.

ntpd service
If ntpd is run as a service, the time will automatically synchronize as long as the difference between the local time and the time on the server is less than 1000s (~17min). So it is pretty common to adjust the time initially to whatever the server time is as a trusted source:

Add ntpd to the default runlevel to have the time synchronized automatically. There is no need to run a client when the service is running. In this case verify that ntp-client or ntpdate are not in any runlevels.

When it is confirmed the configuration is clear from ntp-client</tt> or ntpdate</tt>, add the ntpd</tt> service:

To monitor status of the server:

Hardware clock
To write the NTP sync time to the hardware at shutdown, and read hardware clock upon system boot:

Or on a sufficiently modern kernel (3.9 or newer), Linux can be configured to handle setting the system time automatically:

The hwclock init script is not when using the kernel's real time clock. Opting for this method will speed up the system's boot and shutdown processes slightly.

External resources

 * http://www.ntp.org/
 * https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon
 * https://wiki.archlinux.org/index.php/systemd-timesyncd
 * https://blog.hboeck.de/archives/863-Dont-update-NTP-stop-using-it.html
 * http://phk.freebsd.dk/time/20140926.html