| Frequently Asked Questions |
| |
| Table of Contents |
| |
| o 1. chrony compared to other programs |
| ? 1.1. How does chrony compare to ntpd? |
| o 2. Configuration issues |
| ? 2.1. What is the minimum recommended configuration for an NTP client? |
| ? 2.2. How do I make an NTP server from an NTP client? |
| ? 2.3. I have several computers on a LAN. Should be all clients of an |
| external server? |
| ? 2.4. Must I specify servers by IP address if DNS is not available on |
| chronyd start? |
| ? 2.5. How can I make chronyd more secure? |
| ? 2.6. How can I improve the accuracy of the system clock with NTP |
| sources? |
| ? 2.7. Does chronyd have an ntpdate mode? |
| ? 2.8. What happened to the commandkey and generatecommandkey directives? |
| o 3. Computer is not synchronising |
| ? 3.1. Behind a firewall? |
| ? 3.2. Are NTP servers specified with the offline option? |
| ? 3.3. Is chronyd allowed to step the system clock? |
| o 4. Issues with chronyc |
| ? 4.1. I keep getting the error 506 Cannot talk to daemon |
| ? 4.2. I keep getting the error 501 Not authorised |
| ? 4.3. Why does chronyc tracking always print an IPv4 address as |
| reference ID? |
| ? 4.4. Is the chronyc / chronyd protocol documented anywhere? |
| o 5. Real-time clock issues |
| ? 5.1. What is the real-time clock (RTC)? |
| ? 5.2. I want to use chronyd's RTC support. Must I disable hwclock? |
| ? 5.3. I just keep getting the 513 RTC driver not running message |
| ? 5.4. I get Could not open /dev/rtc, Device or resource busy in my |
| syslog file |
| ? 5.5. What if my computer does not have an RTC or backup battery? |
| o 6. NTP-specific issues |
| ? 6.1. Can chronyd be driven from broadcast/multicast NTP servers? |
| ? 6.2. Can chronyd transmit broadcast NTP packets? |
| ? 6.3. Can chronyd keep the system clock a fixed offset away from real |
| time? |
| ? 6.4. What happens if the network connection is dropped without using |
| chronyc's offline command first? |
| o 7. Operating systems |
| ? 7.1. Does chrony support Windows? |
| ? 7.2. Are there any plans to support Windows? |
| |
| 1. chrony compared to other programs |
| |
| 1.1. How does chrony compare to ntpd? |
| |
| chronyd was designed to work well in a wide range of conditions and it can |
| usually synchronise the system clock faster and with better time accuracy. It |
| doesn't implement some of the less useful NTP modes like broadcast client or |
| multicast server/client. |
| |
| If your computer is connected to the Internet only for few minutes at a time, |
| the network connection is often congested, you turn your computer off or |
| suspend it frequently, the clock is not very stable (e.g. there are rapid |
| changes in the temperature or it's a virtual machine), or you want to use NTP |
| on an isolated network with no hardware reference clocks in sight, chrony will |
| probably work much better for you. |
| |
| For a more detailed comparison of features and performance, see the comparison |
| page on the chrony website. |
| |
| 2. Configuration issues |
| |
| 2.1. What is the minimum recommended configuration for an NTP client? |
| |
| First, the client needs to know which NTP servers it should ask for the current |
| time. They are specified by the server or pool directive. The pool directive |
| can be used for names that resolve to multiple addresses. For good reliability |
| the client should have at least three servers. The iburst option speeds up the |
| initial synchronisation. |
| |
| To stabilise the initial synchronisation on the next start, the estimated drift |
| of the system clock is saved to a file specified by the driftfile directive. |
| |
| If the system clock can be far from the true time after boot for any reason, |
| chronyd should be allowed to correct it quickly by stepping instead of slewing, |
| which would take a very long time. The makestep directive does that. |
| |
| In order to keep the real-time clock (RTC) close to the true time, so the |
| system time is reasonably close to the true time when it's initialised on the |
| next boot from the RTC, the rtcsync directive enables a mode in which the |
| system time is periodically copied to the RTC. It is supported on Linux and |
| macOS. |
| |
| If you want to use public NTP servers from the pool.ntp.org project, the |
| minimal chrony.conf file could be: |
| |
| pool pool.ntp.org iburst |
| driftfile /var/lib/chrony/drift |
| makestep 1 3 |
| rtcsync |
| |
| 2.2. How do I make an NTP server from an NTP client? |
| |
| You need to add an allow directive to the chrony.conf file in order to open the |
| NTP port and allow chronyd to reply to client requests. allow with no specified |
| subnet allows access from all IPv4 and IPv6 addresses. |
| |
| 2.3. I have several computers on a LAN. Should be all clients of an external |
| server? |
| |
| The best configuration is usually to make one computer the server, with the |
| others as clients of it. Add a local directive to the server's chrony.conf |
| file. This configuration will be better because |
| |
| o the load on the external connection is less |
| |
| o the load on the external NTP server(s) is less |
| |
| o if your external connection goes down, the computers on the LAN will |
| maintain a common time with each other. |
| |
| 2.4. Must I specify servers by IP address if DNS is not available on chronyd |
| start? |
| |
| No. Starting from version 1.25, chronyd will keep trying to resolve the names |
| specified by the server, pool, and peer directives in an increasing interval |
| until it succeeds. The online command can be issued from chronyc to force |
| chronyd to try to resolve the names immediately. |
| |
| 2.5. How can I make chronyd more secure? |
| |
| If you don't need to serve time to NTP clients or peers, you can add port 0 to |
| the chrony.conf file to completely disable the NTP server functionality and |
| prevent NTP requests from reaching chronyd. Starting from version 2.0, the NTP |
| server port is open only when client access is allowed by the allow directive |
| or command, an NTP peer is configured, or the broadcast directive is used. |
| |
| If you don't need to use chronyc remotely, you can add the following directives |
| to the configuration file to bind the command sockets to the loopback |
| interface. This is done by default since version 2.0. |
| |
| bindcmdaddress 127.0.0.1 |
| bindcmdaddress ::1 |
| |
| If you don't need to use chronyc at all or you need to run chronyc only under |
| the root or chrony user (which can access chronyd through a Unix domain socket |
| since version 2.2), you can disable the internet command sockets completely by |
| adding cmdport 0 to the configuration file. |
| |
| You can specify an unprivileged user with the -u option, or the user directive |
| in the chrony.conf file, to which chronyd will switch after start in order to |
| drop root privileges. The configure script has a --with-user option, which sets |
| the default user. On Linux, chronyd needs to be compiled with support for the |
| libcap library. On other systems, chronyd forks into two processes. The child |
| process retains root privileges, but can only perform a very limited range of |
| privileged system calls on behalf of the parent. |
| |
| Also, if chronyd is compiled with support for the Linux secure computing |
| (seccomp) facility, you can enable a system call filter with the -F option. It |
| will significantly reduce the kernel attack surface and possibly prevent kernel |
| exploits from the chronyd process if it's compromised. It's recommended to |
| enable the filter only when it's known to work on the version of the system |
| where chrony is installed as the filter needs to allow also system calls made |
| from libraries that chronyd is using (e.g. libc) and different versions or |
| implementations of the libraries may make different system calls. If the filter |
| is missing some system call, chronyd could be killed even in normal operation. |
| |
| 2.6. How can I improve the accuracy of the system clock with NTP sources? |
| |
| Select NTP servers that are well synchronised, stable and close to your |
| network. It's better to use more than one server, three or four is usually |
| recommended as the minimum, so chronyd can detect servers that serve false time |
| and combine measurements from multiple sources. |
| |
| If you have a network card with hardware timestamping supported on Linux, it |
| can be enabled by the hwtimestamp directive in the chrony.conf file. It should |
| make local receive and transmit timestamps of NTP packets much more accurate. |
| |
| There are also useful options which can be set in the server directive, they |
| are minpoll, maxpoll, polltarget, maxdelay, maxdelayratio, maxdelaydevratio, |
| and xleave. |
| |
| The first three options set the minimum and maximum allowed polling interval, |
| and how should be the actual interval adjusted in the specified range. Their |
| default values are 6 (64 seconds) for minpoll, 10 (1024 seconds) for maxpoll |
| and 8 (samples) for polltarget. The default values should be used for general |
| servers on the Internet. With your own NTP servers, or if you have permission |
| to poll some servers more frequently, setting these options for shorter polling |
| intervals may significantly improve the accuracy of the system clock. |
| |
| The optimal polling interval depends mainly on two factors, stability of the |
| network latency and stability of the system clock (which mainly depends on the |
| temperature sensitivity of the crystal oscillator and the maximum rate of the |
| temperature change). |
| |
| An example of the directive for an NTP server on the Internet that you are |
| allowed to poll frequently could be |
| |
| server foo.example.net minpoll 4 maxpoll 6 polltarget 16 |
| |
| An example using very short polling intervals for a server located in the same |
| LAN could be |
| |
| server ntp.local minpoll 2 maxpoll 4 polltarget 30 |
| |
| The maxdelay options are useful to ignore measurements with larger delay (e.g. |
| due to congestion in the network) and improve the stability of the |
| synchronisation. The maxdelaydevratio option could be added to the example with |
| local NTP server |
| |
| server ntp.local minpoll 2 maxpoll 4 polltarget 30 maxdelaydevratio 2 |
| |
| If your server supports the interleaved mode, the xleave option should be added |
| to the server directive in order to allow the server to send the client more |
| accurate hardware or kernel transmit timestamps. When combined with local |
| hardware timestamping, sub-microsecond accuracy may be possible. An example |
| could be |
| |
| server ntp.local minpoll 2 maxpoll 2 xleave |
| hwtimestamp eth0 |
| |
| 2.7. Does chronyd have an ntpdate mode? |
| |
| Yes. With the -q option chronyd will set the system clock once and exit. With |
| the -Q option it will print the measured offset without setting the clock. If |
| you don't want to use a configuration file, NTP servers can be specified on the |
| command line. For example: |
| |
| # chronyd -q 'pool pool.ntp.org iburst' |
| |
| 2.8. What happened to the commandkey and generatecommandkey directives? |
| |
| They were removed in version 2.2. Authentication is no longer supported in the |
| command protocol. Commands that required authentication are now allowed only |
| through a Unix domain socket, which is accessible only by the root and chrony |
| users. If you need to configure chronyd remotely or locally without the root |
| password, please consider using ssh and/or sudo to run chronyc under the root |
| or chrony user on the host where chronyd is running. |
| |
| 3. Computer is not synchronising |
| |
| This is the most common problem. There are a number of reasons, see the |
| following questions. |
| |
| 3.1. Behind a firewall? |
| |
| Check the Reach value printed by the chronyc's sources command. If it's zero, |
| it means chronyd did not get any valid responses from the NTP server you are |
| trying to use. If there is a firewall between you and the server, the packets |
| may be blocked. Try using a tool like wireshark or tcpdump to see if you're |
| getting any responses from the server. |
| |
| When chronyd is receiving responses from the servers, the output of the sources |
| command issued few minutes after chronyd start might look like this: |
| |
| 210 Number of sources = 3 |
| MS Name/IP address Stratum Poll Reach LastRx Last sample |
| =============================================================================== |
| ^* foo.example.net 2 6 377 34 +484us[ -157us] +/- 30ms |
| ^- bar.example.net 2 6 377 34 +33ms[ +32ms] +/- 47ms |
| ^+ baz.example.net 3 6 377 35 -1397us[-2033us] +/- 60ms |
| |
| 3.2. Are NTP servers specified with the offline option? |
| |
| Check that you're using chronyc's online and offline commands appropriately. |
| The activity command prints the number of sources that are currently online and |
| offline. For example: |
| |
| 200 OK |
| 3 sources online |
| 0 sources offline |
| 0 sources doing burst (return to online) |
| 0 sources doing burst (return to offline) |
| 0 sources with unknown address |
| |
| 3.3. Is chronyd allowed to step the system clock? |
| |
| By default, chronyd adjusts the clock gradually by slowing it down or speeding |
| it up. If the clock is too far from the true time, it will take a long time to |
| correct the error. The System time value printed by the chronyc's tracking |
| command is the remaining correction that needs to be applied to the system |
| clock. |
| |
| The makestep directive can be used to allow chronyd to step the clock. For |
| example, if chrony.conf had |
| |
| makestep 1 3 |
| |
| the clock would be stepped in the first three updates if its offset was larger |
| than one second. Normally, it's recommended to allow the step only in the first |
| few updates, but in some cases (e.g. a computer without an RTC or virtual |
| machine which can be suspended and resumed with an incorrect time) it may be |
| necessary to allow the step on any clock update. The example above would change |
| to |
| |
| makestep 1 -1 |
| |
| 4. Issues with chronyc |
| |
| 4.1. I keep getting the error 506 Cannot talk to daemon |
| |
| When accessing chronyd remotely, make sure that the chrony.conf file (on the |
| computer where chronyd is running) has a cmdallow entry for the computer you |
| are running chronyc on and an appropriate bindcmdaddress directive. This isn't |
| necessary for localhost. |
| |
| Perhaps chronyd is not running. Try using the ps command (e.g. on Linux, ps |
| -auxw) to see if it's running. Or try netstat -a and see if the ports 123/udp |
| and 323/udp are listening. If chronyd is not running, you may have a problem |
| with the way you are trying to start it (e.g. at boot time). |
| |
| Perhaps you have a firewall set up in a way that blocks packets on port 323/ |
| udp. You need to amend the firewall configuration in this case. |
| |
| 4.2. I keep getting the error 501 Not authorised |
| |
| Since version 2.2, the password command doesn't do anything and chronyc needs |
| to run locally under the root or chrony user, which are allowed to access the |
| chronyd's Unix domain command socket. |
| |
| With older versions, you need to authenticate with the password command first |
| or use the -a option to authenticate automatically on start. The configuration |
| file needs to specify a file which contains keys (keyfile directive) and which |
| key in the key file should be used for chronyc authentication (commandkey |
| directive). |
| |
| 4.3. Why does chronyc tracking always print an IPv4 address as reference ID? |
| |
| The reference ID is a 32-bit value and in versions before 3.0 it was printed in |
| quad-dotted notation, even if the reference source did not actually have an |
| IPv4 address. For IPv4 addresses, the reference ID is equal to the address, but |
| for IPv6 addresses it is the first 32 bits of the MD5 sum of the address. For |
| reference clocks, the reference ID is the value specified with the refid option |
| in the refclock directive. |
| |
| Since version 3.0, the reference ID is printed as a hexadecimal number to avoid |
| confusion with IPv4 addresses. |
| |
| If you need to get the IP address of the current reference source, use the -n |
| option to disable resolving of IP addresses and read the second field (printed |
| in parentheses) on the Reference ID line. |
| |
| 4.4. Is the chronyc / chronyd protocol documented anywhere? |
| |
| Only by the source code. See cmdmon.c (chronyd side) and client.c (chronyc |
| side). |
| |
| 5. Real-time clock issues |
| |
| 5.1. What is the real-time clock (RTC)? |
| |
| This is the clock which keeps the time even when your computer is turned off. |
| It is used to initialise the system clock on boot. It normally doesn't drift |
| more than few seconds per day. |
| |
| There are two approaches how chronyd can work with it. One is to use the |
| rtcsync directive, which tells chronyd to enable a kernel mode which sets the |
| RTC from the system clock every 11 minutes. chronyd itself won't touch the RTC. |
| If the computer is not turned off for a long time, the RTC should still be |
| close to the true time when the system clock will be initialised from it on the |
| next boot. |
| |
| The other option is to use the rtcfile directive, which tells chronyd to |
| monitor the rate at which the RTC gains or loses time. When chronyd is started |
| with the -s option on the next boot, it will set the system time from the RTC |
| and also compensate for the drift it has measured previously. The rtcautotrim |
| directive can be used to keep the RTC close to the true time, but it's not |
| strictly necessary if its only purpose is to set the system clock when chronyd |
| is started on boot. See the documentation for details. |
| |
| 5.2. I want to use chronyd's RTC support. Must I disable hwclock? |
| |
| The hwclock program is often set-up by default in the boot and shutdown scripts |
| with many Linux installations. With the kernel RTC synchronisation (rtcsync |
| directive), the RTC will be set also every 11 minutes as long as the system |
| clock is synchronised. If you want to use chronyd's RTC monitoring (rtcfile |
| directive), it's important to disable hwclock in the shutdown procedure. If you |
| don't, it will over-write the RTC with a new value, unknown to chronyd. At the |
| next reboot, chronyd started with the -s option will compensate this (wrong) |
| time with its estimate of how far the RTC has drifted whilst the power was off, |
| giving a meaningless initial system time. |
| |
| There is no need to remove hwclock from the boot process, as long as chronyd is |
| started after it has run. |
| |
| 5.3. I just keep getting the 513 RTC driver not running message |
| |
| For the real-time clock support to work, you need the following three things |
| |
| o an RTC in your computer |
| |
| o a Linux kernel with enabled RTC support |
| |
| o an rtcfile directive in your chrony.conf file |
| |
| 5.4. I get Could not open /dev/rtc, Device or resource busy in my syslog file |
| |
| Some other program running on the system may be using the device. |
| |
| 5.5. What if my computer does not have an RTC or backup battery? |
| |
| In this case you can still use the -s option to set the system clock to the |
| last modification time of the drift file, which should correspond to the system |
| time when chronyd was previously stopped. The initial system time will be |
| increasing across reboots and applications started after chronyd will not |
| observe backward steps. |
| |
| 6. NTP-specific issues |
| |
| 6.1. Can chronyd be driven from broadcast/multicast NTP servers? |
| |
| No, the broadcast/multicast client mode is not supported and there is currently |
| no plan to implement it. While the mode may be useful to simplify configuration |
| of clients in large networks, it is inherently less accurate and less secure |
| (even with authentication) than the ordinary client/server mode. |
| |
| When configuring a large number of clients in a network, it is recommended to |
| use the pool directive with a DNS name which resolves to addresses of multiple |
| NTP servers. The clients will automatically replace the servers when they |
| become unreachable, or otherwise unsuitable for synchronisation, with new |
| servers from the pool. |
| |
| Even with very modest hardware, an NTP server can serve time to hundreds of |
| thousands of clients using the ordinary client/server mode. |
| |
| 6.2. Can chronyd transmit broadcast NTP packets? |
| |
| Yes, the broadcast directive can be used to enable the broadcast server mode to |
| serve time to clients in the network which support the broadcast client mode |
| (it's not supported in chronyd, see the previous question). |
| |
| 6.3. Can chronyd keep the system clock a fixed offset away from real time? |
| |
| Yes. Starting from version 3.0, an offset can be specified by the offset option |
| for all time sources in the chrony.conf file. |
| |
| 6.4. What happens if the network connection is dropped without using chronyc's |
| offline command first? |
| |
| chronyd will keep trying to access the sources that it thinks are online, and |
| it will take longer before new measurements are actually made and the clock is |
| corrected when the network is connected again. If the sources were set to |
| offline, chronyd would make new measurements immediately after issuing the |
| online command. |
| |
| Unless the network connection lasts only few minutes (less than the maximum |
| polling interval), the delay is usually not a problem, and it may be acceptable |
| to keep all sources online all the time. |
| |
| 7. Operating systems |
| |
| 7.1. Does chrony support Windows? |
| |
| No. The chronyc program (the command-line client used for configuring chronyd |
| while it is running) has been successfully built and run under Cygwin in the |
| past. chronyd is not portable, because part of it is very system-dependent. It |
| needs adapting to work with Windows' equivalent of the adjtimex() call, and it |
| needs to be made to work as a service. |
| |
| 7.2. Are there any plans to support Windows? |
| |
| We have no plans to do this. Anyone is welcome to pick this work up and |
| contribute it back to the project. |
| |
| Last updated 2018-04-04 09:18:44 CEST |