Keep oss-fuzz happy
[ntpsec.git] / docs / quick.adoc
blobfcbe7d6d00a26c5502827d9ef87a9867c4906808
1 = Client Quick Start Guide
2 include::include-html.ad[]
4 [cols="10%,90%",frame="none",grid="none",style="verse"]
5 |==============================
6 |image:pic/orchestra.gif[]|
7 {millshome}pictures.html[from 'Pogo', by Walt Kelly]
9 Take it away, boys!
11 |==============================
14 == Related Links
16 include::includes/hand.adoc[]
18 == Table of Contents
20 * link:#introduction[Introduction]
21 * link:#basics[Configuration Basics]
22 * link:#pool[Using the NTP Pool]
23 * link:#howmany[How Many Servers?]
24 * link:#gps[Configuring A Local GPS]
25 * link:#dhcp[Special considerations when using DHCP]
26 * link:#sanity[Sanity-Checking Your Time Service]
27 * link:#security[Network Time Security]
29 '''''
31 [[introduction]]
32 == Introduction
34 This page is a quick start for the 99% of NTP configurations that are
35 not intended to serve time to others, but just run in client mode and
36 optionally have a local GPS reference clock. It describes how to
37 write a basic +{ntpconf}+ configuration file for this common case,
38 and introduces some concepts that will be useful later on in the
39 Handbook.
41 If you installed NTPsec using a distro package, the package's stock
42 configuration may not need any changes.  You can use this guide to
43 understand the default configuration.  If you installed NTPsec from
44 source, this guide will help you build your configuration.
46 It is very likely that your NTP configuration file, +{ntpconf}+ ,
47 resides in +/etc+ .  On Debian (and derivatives), it is
48 in +/etc/ntpsec+ if you installed from the package.
50 If you are using a typical residential setup, in which your machine
51 performs DHCP to your ISP's servers and receives a dynamic address,
52 your +{ntpconf}+ may be altered or generated by DHCP at
53 address-allocation time to use the NTP servers provided by DHCP.
55 NTPsec, unlike legacy versions, can also be configured using an
56 Apache-style directory +/etc/ntp.d/+ of configuration-file segments.
57 This is intended to make life easier for software configurators, which
58 can write independent segments rather than having to do the kind of
59 edit-in-place on a flat +{ntpconf}+ that comes naturally to a human.
61 [[basics]]
62 == Configuration basics
64 An NTP configuration file normally consists of three sections: logging
65 controls, security/access controls, and +server+/+refclock+ declarations.  In
66 most configurations, the first two sections will be a boilerplate set
67 of defaults.
69 Under +/etc/ntp.d/+, the text in these segments can be split up into file
70 parts (with names ending in .conf) in any way that is convenient.
71 Parts are evaluated in the text sort order of their names.
73 The simplest, minimal logging configuration consists of a line like this:
75 ------------------------------------------------------------------
76 driftfile /var/lib/ntp/ntp.drift
77 ------------------------------------------------------------------
79 This sets up a drift file, which is used to store a measurement of
80 the drift frequency of your computer's clock crystal between runs
81 of +ntpd+. The drift is used to converge on correct time more quickly
82 after startup.
84 You might see something more like this:
86 ------------------------------------------------------------------
87 driftfile /var/lib/ntp/ntp.drift
89 statsdir /var/log/ntpstats/
91 statistics loopstats peerstats clockstats
92 filegen loopstats file loopstats type day enable
93 filegen peerstats file peerstats type day enable
94 filegen clockstats file clockstats type day enable
96 logfile /var/log/ntpd.log
97 logconfig =syncall +clockall +peerall +sysall
98 ------------------------------------------------------------------
100 This is a logging section intended to enable extensive statistics and
101 diagnostics useful for tuning your time service.
103 Note that the directories in which the log files are being created
104 need to exist, and be writable by the user under which +ntpd+ runs.
106 Your security/access section will almost always look a lot like this:
108 ------------------------------------------------------------------
109 restrict default kod limited nomodify noquery
110 restrict 127.0.0.1
111 restrict ::1
112 ------------------------------------------------------------------
114 This disallows configuration or +ntpq+ queries from anywhere off the
115 local system.  Older configurations may duplicate the +restrict default+
116 line into a +restrict -6 default+ and/or use +-6+ on the IPv6 localhost
117 exception. These are no longer necessary, but not harmful.
119 The server/refclock declarations are the most variable part of the
120 configuration.  They tell +ntpd+ what its sources for time are.
122 [[pool]]
123 == Using the NTP Pool
125 The NTP Pool is a dynamic collection of publicly available servers
126 that freely provide highly accurate time via the Network Time Protocol to
127 clients worldwide. The machines that are "in the pool" are part of the
128 pool.ntp.org domain as well as many subdomains divided by geographical region
129 or software vendor, and are distributed to NTP clients via round robin DNS.
131 Your +{ntpconf}+ can use one or several of these DNS names.  The
132 https://www.ntppool.org/en/use.html[NTP Pool documentation] gives this
133 example (but see below for a better version):
135 ------------------------------------------------------------------
136 server 0.pool.ntp.org
137 server 1.pool.ntp.org
138 server 2.pool.ntp.org
139 server 3.pool.ntp.org
140 ------------------------------------------------------------------
142 In a pre-configured NTP installation set up by an OS vendor or distribution
143 packager, you are likely to see a set of time-server declarations pointing
144 at a vendor subdomain of the NTP Pool (+0.vendor.pool.ntp.org+, etc.).
146 Multiple declarations of individual pool servers is not the best
147 method; they're a workaround for a historical bug in NTP Classic.  It's
148 better to use the +pool+ directive:
150 ------------------------------------------------------------------
151 pool 0.pool.ntp.org
152 pool 1.pool.ntp.org
153 pool 2.pool.ntp.org
154 pool 3.pool.ntp.org
155 ------------------------------------------------------------------
157 Use of the +server+ command does a one-time DNS lookup, and uses the IP
158 address returned thereafter.  If the server becomes unavailable, the DNS name
159 will not be re-resolved.  The +pool+ command will use multiple servers that
160 the DNS name resolves to, refreshing as required.  For details on the
161 refreshing algorithm, see link:discover.html#assoc[Association Management].
162 The number of associations is controlled by the +maxclock+ option of the
163 link:miscopt.html#tos[+tos+] command, which should typically be changed from
164 the default.
166 Using only a single pool entry has some limitations:
168 ------------------------------------------------------------------
169 # This works, but is IPv4 only and spins up associations slower:
170 pool pool.ntp.org
172 # Likewise for 0, 1, or 3:
173 pool 0.pool.ntp.org
175 # Only the "2" hostname has IPv6 currently, so this works with both IPv4
176 # IPv6, but still spins up associations slower than using all four names:
177 pool 2.pool.ntp.org
179 # Vendor domains do not work with only the top-level name:
180 pool vendor.pool.ntp.org
182 # The numbers work with vendor subdomains, with the same caveats:
183 pool 0.vendor.pool.ntp.org
184 ------------------------------------------------------------------
186 Note: while you could in theory request time service from any specific
187 time server in the world, it is considered bad form to use a non-pool
188 server unless you know you have permission.  This applies, in
189 particular, to various public timeservers maintained by corporations
190 or academic institutions and intended to be used by their members.
192 For high-quality time service, it is advantageous if your upstream
193 servers are located where packet-transit times to you are short and
194 there is little random variation in them.  Unfortunately, "near you on the
195 network" is often difficult to map and changes unpredictably over time.
196 However, there is a very rough correlation with national boundaries--more
197 so when the country in question is geographically small and relatively
198 advanced.
200 The NTP Pool DNS servers try to give you servers in the same country
201 or continent, but this is not guaranteed.  Accordingly, the NTP
202 Pool has subdomains for many countries, named by ISO country code.
203 If you are in the United Kingdom, for example, you might want to use the UK
204 subdomain:
206 ------------------------------------------------------------------
207 pool 0.uk.pool.ntp.org
208 pool 1.uk.pool.ntp.org
209 pool 2.uk.pool.ntp.org
210 pool 3.uk.pool.ntp.org
211 ------------------------------------------------------------------
213 If you know your ISO country code, it is often possible to find an
214 analogous group of servers by pinging them.
216 Ideally, one would like one's servers to use multiple different kinds
217 of timesources (as opposed to, say, all being GPS-based) and be split
218 across different autonomous networks as a hedge against outages and
219 routing problems.  Unfortunately, the random nature of pool allocation
220 makes this impossible to guarantee. It is, however, worth keeping in mind if
221 you can set up a custom configuration with non-pool servers that you
222 have permission to use.
224 [[howmany]]
225 == How Many Servers?
227 If you have only one server, things are simple.  Your system will
228 follow that server even if it doesn't have the correct time.  (Your
229 server might bail if the local clock is too far off - see
230 link:clock.html#panic[panic threshold].)
232 Two servers might seem like a simple redundant setup, but what happens
233 if they don't agree?  NTP has no way to determine which one is
234 correct.
236 If you have three servers, two can outvote a
237 link:ntpspeak.html[falseticker].  But that reduces to two if one of
238 them is not responding.
240 If you are using 4 servers, you still have 3 if one of them stops
241 responding.  Unless you are serving time to other systems,
242 this is a reasonable setup. It is normal for client-only systems.
244 You can add more servers.  With 5 servers, you still have 3 if 2 are
245 down and 3 can outvote 2 falsetickers.  That may be appropriate if you
246 need high reliability, say because you are serving hundreds of
247 clients.
249 One +pool+ declaration will normally get you four or more servers.
251 [[gps]]
252 == Configuring A Local GPS
254 Connecting a local GPS to your machine will provide extremely
255 accurate time, provided it has link:ntpspeak.html[PPS] capability.
256 However, unless your GPS has a perfect continuous skyview, you will still
257 want to use servers from the link:#pool[the NTP Pool] or elsewhere.
259 The easiest way to arrange this is by installing
260 https://gpsd.io[GPSD] to watch the GPS, and configuring your
261 +ntpd+ to accept time from it.  It is also possible to do this with
262 native +ntpd+ drivers (nmea, trimble, oncore), though these are less
263 flexible and a bit more difficult to configure.
265 The following configuration lines tell your +ntpd+ to accept time
266 from GPSD:
268 ------------------------------------------------------------------
269 refclock shm unit 1 prefer refid PPS
270 refclock shm unit 0 refid GPS
271 ------------------------------------------------------------------
273 Note the order above; +ntpd+ prefers earlier defined refclocks
274 to later.  PPS is significantly more accurate than the in-band stream.
276 For details on setting up the GPSD end, see the
277 https://gpsd.io/gpsd-time-service-howto.html[GPSD Time Service
278 HOWTO].
280 If you are looking to set up a Stratum 1 timeserver, you may find
281 https://www.ntpsec.org/white-papers/stratum-1-microserver-howto/[Stratum-1-Microserver HOWTO]
282 helpful.
284 [[dhcp]]
285 == Special considerations when using DHCP
287 If your machine uses DHCP to get a dynamic IP address from your ISP,
288 that handshake may provide you with a list of NTP servers.
289 Suspect this if, when you look at your +{ntpconf}+, you
290 see server domain names obviously belonging to your ISP or
291 your ntpq -p printout doesn't match what you expect.
293 The way this works is that your DHCP client requests the list,
294 then it restarts your +ntpd+ with a custom configuration file
295 generated from that list.
297 A good thing about this is that your ISP is likely to hand you servers
298 that are close to you on its network and will thus have fairly steady
299 ping times.  A bad thing is that you may have difficulty making
300 configuration of a local reference clock stick.
302 If you look in your +/etc/init.d/ntp+ file, systemd unit, or other scripts
303 involved in starting +ntpd+, you may see something like this:
305 ------------------------------------------------------------------
306 if [ -e /var/lib/ntp/ntp.conf.dhcp ]; then
307         NTPD_OPTS="$NTPD_OPTS -c /var/lib/ntp/ntp.conf.dhcp"
309 ------------------------------------------------------------------
311 The -c option tells +ntpd+ that the path to a generated configuration
312 file follows.  The generation process might pick up your local changes
313 to +{ntpconf}+ or it might not; this depends on your OS supplier. (Debian
314 derivatives normally 'do' base on your local +{ntpconf}+.)  If it does,
315 all is well.  If it does not, you may have to modify the hook scripts
316 that generate that file, or disable the generation process.
318 You may also wish to ignore the DHCP-provided servers for other reasons.
319 For example, you may wish to use specific servers which support
320 link:#security[Network Time Security].  On Debian derivatives, if you
321 installed from the package, you can set +IGNORE_DHCP="yes"+ in
322 +/etc/default/ntpsec+ to ignore DHCP-provided NTP servers.
324 [[sanity]]
325 == Sanity-Checking Your Time Service
327 Here's how to tell if and/or how well your time service is working.
328 Wait a few minutes for it to sync with upstream servers, then fire
329 up ntpq with the -p (peers) option.  You should see a display looking
330 something like this:
332 ------------------------------------------------------------------
333      remote           refid      st t when poll reach   delay   offset  jitter
334 ==============================================================================
335 *b1-66er.matrix. 18.26.4.105      2 u  871 1024  377    6.655    1.042   0.659
336 +tools.ninjaneer 216.218.254.202  2 u  268 1024  377   69.917    0.275   0.858
337 -96.226.123.230  129.7.1.66       2 u  689 1024  377   43.322   -2.322   0.982
338 -a1.pcloud.com   18.26.4.105      2 u  861 1024  377   41.805   -2.283   0.453
339 +juniperberry.ca 17.253.34.253    2 u  682 1024  377   82.361    0.927   1.370
340 ------------------------------------------------------------------
342 If you have a local GPS you should see something like this:
344 ------------------------------------------------------------------
345      remote           refid      st t when poll reach   delay   offset  jitter
346 ==============================================================================
347 xSHM(0)          .GPS.            0 l   39   64  377    0.000  -591.41  70.967
348 *SHM(1)          .PPS.            0 l   43   64  377    0.000    0.003   0.004
349 +time-a.timefreq .ACTS.           1 u    5   64  377   48.438    0.487   3.163
350 -time-a.nist.gov .ACTS.           1 u   23   64  377   73.233   32.901   0.587
351 -fwwds-1-pt.tunn 173.162.192.156  2 u   11   64  377   48.311   -2.082   2.649
352 +clocka.ntpjs.or 192.5.41.40      2 u   22   64  377   13.146    0.743   0.644
353 ------------------------------------------------------------------
355 In the latter table, the first two lines represent the refclock.
357 In both cases, the column to look at first is the "reach". A value of
358 377 indicates that your client has been getting samples continuously
359 for eight poll intervals.  A value of 0 is bad - it means you're not
360 communicating with the upstream server or clock at all.  To interpret other
361 values, you need to interpret the reach column in octal, expand
362 it to binary, and read each bit as a yes/no for its poll interval
363 Thus, for example, 017 means samples from the last four polls but
364 none before that.
366 Next, you want to look at the line for "preferred" server (marked with
367 *).  This is the one that is closest to the approximation of UTC that
368 NTP's algorithms have computed from its inputs. What you want to see here
369 is low jitter. The PPS feed in the second example is pretty good. The
370 figures from +b1-66er.matrix.+ in the first display are not great, but
371 they're not out of line for operation over a WAN.
373 Large offsets are most likely due to asymmetric packet delays; large
374 jitter is more likely due to bufferbloat and other sources of variable
375 latency under load.  Note that the units for delay, offset, and jitter
376 are milliseconds.
378 [[security]]
379 == Network Time Security
381 The NTP protocol will work with unauthenticated servers, this is what
382 makes the NTP Pool Project feasible.  However, to close off some lines of
383 attack on NTP, especially spoofing and Man-In-The-Middle, NTPsec supports
384 Network Time Security (NTS).  Further information on how to enable NTS is
385 available in the link:NTS-QuickStart.html[NTS Quick Start Guide].
387 '''''
389 include::includes/footer.adoc[]