summaryrefslogtreecommitdiffstats
path: root/distro/common/systemd/kresd.systemd.7
blob: 420b110370d5380435c505a0b59b39e52a8814bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
.TH "kresd.systemd" "7" "2018-06-04" "CZ.NIC" "Knot Resolver Systemd Units"
.\"
.\" kresd.systemd.7 -- man page for systemd units for kresd
.\"
.\" Copyright (c) 2018, CZ.NIC. All rights reserved.
.\"
.\" See COPYING for the license.
.\"
.\"
.SH "NAME"
kresd.systemd
\- managing Knot Resolver through systemd.

.SH "SYNOPSIS"
.nf
kresd@.service
kresd.socket
kresd-tls.socket
kresd-control@.socket
kresd.target
system-kresd.slice
.fi

.SH "DESCRIPTION"
.P
This manual page describes how to manage \fBkresd\fR using \fBsystemd\fR
units. Depending on your distribution, this can be either be done with
socket-based activation or without it. The following assumes socket-based activation.
For differences see \fINOTES\fR below.

\fBkresd\fR daemon can be executed in multiple independent processes, which can be
managed with \fBsystemd\fR via systemd templates (see \fBsystemd.unit\fR(5)).
Each \fBsystemd\fR service instance of \fBkresd\fR (\fIkresd@.service\fR) represents a
single, independent kresd process.

The systemd-managed \fBkresd\fR service set is grouped in the
\fIsystem-kresd.slice\fR slice.  The slice includes one or more
running daemons (instances of \fIkresd@.service\fR), public listening
sockets (the same listening sockets are shared by all daemons) and a
dedicated control socket for each running daemon.

Each instance of \fIkresd@.service\fR has three systemd sockets (see
\fBsystemd.socket(5)\fR) associated with it:

.nf
.RS
\fIkresd.socket\fR - UDP/TCP network socket (default: localhost:53), shared with other instances
\fIkresd-tls.socket\fR - network socket for DNS-over-TLS (default: localhost:853), shared with other instances
\fIkresd-control@.socket\fR - UNIX socket with control terminal, dedicated
.RE
.fi

.B Configuring network interfaces

When using socket-based activation, the daemon requires neither root privileges
nor any special capabilities, because the sockets are created by \fBsystemd\fR and
passed to \fBkresd\fR. This means \fBkresd\fR can't bind to ports below 1024 when
configured in \fI/etc/knot-resolver/kresd.conf\fR.

To configure \fBkresd\fR to listen on public interfaces, drop-in files (see
\fBsystemd.unit\fR(5)) should be used. These can be created with:

.nf
.RS 4n
.B systemctl edit kresd.socket
.B systemctl edit kresd-tls.socket
.RE
.fi

For example, to configure \fBkresd\fR to listen on 192.0.2.115 on ports 53 and
853, the drop-in files would look like:

.nf
.RS 4n
# /etc/systemd/system/kresd.socket.d/override.conf
[Socket]
ListenDatagram=192.0.2.115:53
ListenStream=192.0.2.115:53

# /etc/systemd/system/kresd-tls.socket.d/override.conf
[Socket]
ListenStream=192.0.2.115:853
.RE
.fi

For more detailed socket configuration, see \fBsystemd.socket\fR(5).

.B Concurrent daemons

If you have more than one CPU core available, a single running
\fBkresd\fR daemon will only be able to make use of one core at a
time, leaving the other cores idle.  If you want \fBkresd\fR to take
advantage of all available cores, while sharing both cache and public
listening ports, you should enable and start as many instances of the
\fBkresd@.service\fR as you have cores.  Typically, each instance is
just named \fIkresd@\fBN\fI.service\fR, where \fIN\fR is a decimal
number.  To enable 3 concurrent daemons:

.nf
.RS 4n
.B systemctl enable --now kresd@1.service kresd@2.service kresd@3.service
.RE
.fi

.B Using system-kresd.slice and kresd.target

The following commands may not work with older systemd (e.g. on CentOS 7).
See notes for more info.

The easiest way to view the status of systemd-supervised \fBkresd\fR
instances is to use the \fIsystem-kresd.slice\fR:

.nf
.RS 4n
.B systemctl status system-kresd.slice
.RE
.fi

You can also use the slice to restart all sockets as well as daemons:

.nf
.RS 4n
.B systemctl restart system-kresd.slice
.RE
.fi

Or you can use it to stop kresd altogether (e.g. during package removal):

.nf
.RS 4n
.B systemctl stop system-kresd.slice
.RE
.fi

To start all enabled kresd daemons, use the provided \fIkresd.target\fR:

.nf
.RS 4n
.B systemctl start kresd.target
.RE
.fi

.SH "NOTES"

.IP * 2
When an instance of \fIkresd@.service\fR is started, stopped or
restarted, its associated control socket is also automatically
started, stopped or restarted, but the public listening sockets remain
open.  As long as either of the public sockets are listening, at least
\fIkresd@1.service\fR will be automatically activated when a request arrives.

.IP * 2
If your distribution doesn't use socket-based activation, you can configure the
network interfaces for \fBkresd\fR in \fI/etc/knot-resolver/kresd.conf\fR.  The
service can be started or enabled in the same way as in the examples below, but
it doesn't have any sockets associated with it.

.IP * 2
Controlling the service with \fIsystem-kresd.slice\fR requires newer systemd.
It may not work in some distributions, notably CentOS 7. To control multiple
kresd instances, use \fIkresd@*.service\fR or \fIBrace Expansion\fR mentioned
below.

.SH "EXAMPLES"

.B Single instance
.RS 4n

To start the service:
.nf
.RS 4n
.B systemctl start kresd@1.service
.RE
.fi

To start the service at boot:
.nf
.RS 4n
.B systemctl enable kresd@1.service
.RE
.fi

To delay the service startup until some traffic arrives, start (or enable) just
the sockets:
.nf
.RS 4n
.B systemctl start kresd.socket
.B systemctl start kresd-tls.socket
.RE
.fi

To disable the TLS socket, you can mask it:

.RS 4n
.B systemctl mask kresd-tls.socket
.RE

.RE

.B Multiple instances
.RS 4n

Multiple instances can be handled with the use of \fIBrace Expansion\fR (see
\fBbash\fR(1)).

To enable multiple concurrent daemons, for example 16:
.nf
.RS
.B systemctl enable kresd@{1..16}.service
.RE
.fi

To start all enabled daemons:
.nf
.RS
.B systemctl start kresd.target
.RE
.fi

.RE

.SH "SEE ALSO"
\fIkresd(8)\fR,
\fIsystemd.unit(5)\fR,
\fIsystemd.socket(5)\fR,
\fIhttps://knot-resolver.readthedocs.io\fR

.SH "AUTHORS"
.B kresd
developers are mentioned in the AUTHORS file in the distribution.