]> git.ipfire.org Git - thirdparty/openvpn.git/blob - Changes.rst
dco: add documentation for ovpn-dco-linux
[thirdparty/openvpn.git] / Changes.rst
1 Overview of changes in 2.6
2 ==========================
3
4
5 New features
6 ------------
7 Keying Material Exporters (RFC 5705) based key generation
8 As part of the cipher negotiation OpenVPN will automatically prefer
9 the RFC5705 based key material generation to the current custom
10 OpenVPN PRF. This feature requires OpenSSL or mbed TLS 2.18+.
11
12 Compatibility with OpenSSL in FIPS mode
13 OpenVPN will now work with OpenSSL in FIPS mode. Note, no effort
14 has been made to check or implement all the
15 requirements/recommendation of FIPS 140-2. This just allows OpenVPN
16 to be run on a system that be configured OpenSSL in FIPS mode.
17
18 ``mlock`` will now check if enough memlock-able memory has been reserved,
19 and if less than 100MB RAM are available, use setrlimit() to upgrade
20 the limit. See Trac #1390. Not available on OpenSolaris.
21
22 Certificate pinning/verify peer fingerprint
23 The ``--peer-fingerprint`` option has been introduced to give users an
24 easy to use alternative to the ``tls-verify`` for matching the
25 fingerprint of the peer. The option takes use a number of allowed
26 SHA256 certificate fingerprints.
27
28 See the man page section "Small OpenVPN setup with peer-fingerprint"
29 for a tutorial on how to use this feature. This is also available online
30 under https://github.com/openvpn/openvpn/blob/master/doc/man-sections/example-fingerprint.rst
31
32 TLS mode with self-signed certificates
33 When ``--peer-fingerprint`` is used, the ``--ca`` and ``--capath`` option
34 become optional. This allows for small OpenVPN setups without setting up
35 a PKI with Easy-RSA or similar software.
36
37 Deferred auth support for scripts
38 The ``--auth-user-pass-verify`` script supports now deferred authentication.
39
40 Pending auth support for plugins and scripts
41 Both auth plugin and script can now signal pending authentication to
42 the client when using deferred authentication. The new ``client-crresponse``
43 script option and ``OPENVPN_PLUGIN_CLIENT_CRRESPONSE`` plugin function can
44 be used to parse a client response to a ``CR_TEXT`` two factor challenge.
45
46 See ``sample/sample-scripts/totpauth.py`` for an example.
47
48 Compatibility mode (``--compat-mode``)
49 The modernisation of defaults can impact the compatibility of OpenVPN 2.6.0
50 with older peers. The options ``--compat-mode`` allows UIs to provide users
51 with an easy way to still connect to older servers.
52
53 OpenSSL 3.0 support
54 OpenSSL 3.0 has been added. Most of OpenSSL 3.0 changes are not user visible but
55 improve general compatibility with OpenSSL 3.0. ``--tls-cert-profile insecure``
56 has been added to allow selecting the lowest OpenSSL security level (not
57 recommended, use only if you must). OpenSSL 3.0 no longer supports the Blowfish
58 (and other deprecated) algorithm by default and the new option ``--providers``
59 allows loading the legacy provider to renable these algorithms.
60
61 Optional ciphers in ``--data-ciphers``
62 Ciphers in ``--data-ciphers`` can now be prefixed with a ``?`` to mark
63 those as optional and only use them if the SSL library supports them.
64
65
66 Improved ``--mssfix`` and ``--fragment`` calculation
67 The ``--mssfix`` and ``--fragment`` options now allow an optional :code:`mtu`
68 parameter to specify that different overhead for IPv4/IPv6 should taken into
69 account and the resulting size is specified as the total size of the VPN packets
70 including IP and UDP headers.
71
72 Cookie based handshake for UDP server
73 Instead of allocating a connection for each client on the initial packet
74 OpenVPN server will now use an HMAC based cookie as its session id. This
75 way the server can verify it on completing the handshake without keeping
76 state. This eliminates the amplification and resource exhaustion attacks.
77 For tls-crypt-v2 clients, this requires OpenVPN 2.6 clients or later
78 because the client needs to resend its client key on completing the hand
79 shake. The tls-crypt-v2 option allows controlling if older clients are
80 accepted.
81
82 Data channel offloading with ovpn-dco
83 2.6.0+ implements support for data-channel offloading where the data packets
84 are directly processed and forwarded in kernel space thanks to the ovpn-dco
85 kernel module. The userspace openvpn program acts purely as a control plane
86 application. Note that DCO will use DATA_V2 packets in P2P mode, therefore,
87 this implies that peers must be running 2.6.0+ in order to have P2P-NCP
88 which brings DATA_V2 packet support.
89
90
91 Deprecated features
92 -------------------
93 ``inetd`` has been removed
94 This was a very limited and not-well-tested way to run OpenVPN, on TCP
95 and TAP mode only.
96
97 ``verify-hash`` has been deprecated
98 This option has very limited usefulness and should be replaced by either
99 a better ``--ca`` configuration or with a ``--tls-verify`` script.
100
101 ``secret`` has been deprecated
102 static key mode (non-TLS) is no longer considered "good and secure enough"
103 for today's requirements. Use TLS mode instead. If deploying a PKI CA
104 is considered "too complicated", using ``--peer-fingerprint`` makes
105 TLS mode about as easy as using ``--secret``.
106
107 ``ncp-disable`` has been removed
108 This option mainly served a role as debug option when NCP was first
109 introduced. It should now no longer be necessary.
110
111 TLS 1.0 and 1.1 are deprecated
112 ``tls-version-min`` is set to 1.2 by default. OpenVPN 2.6.0 defaults
113 to a minimum TLS version of 1.2 as TLS 1.0 and 1.1 should be generally
114 avoided. Note that OpenVPN versions older than 2.3.7 use TLS 1.0 only.
115
116 ``--cipher`` argument is no longer appended to ``--data-ciphers``
117 by default. Data cipher negotiation has been introduced in 2.4.0
118 and been significantly improved in 2.5.0. The implicit fallback
119 to the cipher specified in ``--cipher`` has been removed.
120 Effectively, ``--cipher`` is a no-op in TLS mode now, and will
121 only have an effect in pre-shared-key mode (``--secret``).
122 From now on ``--cipher`` should not be used in new configurations
123 for TLS mode.
124 Should backwards compatibility with older OpenVPN peers be
125 required, please see the ``--compat-mode`` instead.
126
127 ``--prng`` has beeen removed
128 OpenVPN used to implement its own PRNG based on a hash. However implementing
129 a PRNG is better left to a crypto library. So we use the PRNG
130 mbed TLS or OpenSSL now.
131
132
133 Compression no longer enabled by default
134 Unless an explicit compression option is specified in the configuration,
135 ``--allow-compression`` defaults to ``no`` in OpeNVPN 2.6.0.
136 By default, OpenVPN 2.5 still allowed a server to enable compression by
137 pushing compression related options.
138
139 PF (Packet Filtering) support has been removed
140 The built-in PF functionality has been removed from the code base. This
141 feature wasn't really easy to use and was long unmaintained.
142 This implies that also ``--management-client-pf`` and any other compile
143 time or run time related option do not exist any longer.
144
145
146 User-visible Changes
147 --------------------
148 - CHACHA20-POLY1305 is included in the default of ``--data-ciphers`` when available.
149 - Option ``--prng`` is ignored as we rely on the SSL library random number generator.
150 - Option ``--nobind`` is default when ``--client`` or ``--pull`` is used in the configuration
151 - :code:`link_mtu` parameter is removed from environment or replaced with 0 when scripts are
152 called with parameters. This parameter is unreliable and no longer internally calculated.
153
154 Overview of changes in 2.5
155 ==========================
156
157 New features
158 ------------
159 Client-specific tls-crypt keys (``--tls-crypt-v2``)
160 ``tls-crypt-v2`` adds the ability to supply each client with a unique
161 tls-crypt key. This allows large organisations and VPN providers to profit
162 from the same DoS and TLS stack protection that small deployments can
163 already achieve using ``tls-auth`` or ``tls-crypt``.
164
165 ChaCha20-Poly1305 cipher support
166 Added support for using the ChaCha20-Poly1305 cipher in the OpenVPN data
167 channel.
168
169 Improved Data channel cipher negotiation
170 The option ``ncp-ciphers`` has been renamed to ``data-ciphers``.
171 The old name is still accepted. The change in name signals that
172 ``data-ciphers`` is the preferred way to configure data channel
173 ciphers and the data prefix is chosen to avoid the ambiguity that
174 exists with ``--cipher`` for the data cipher and ``tls-cipher``
175 for the TLS ciphers.
176
177 OpenVPN clients will now signal all supported ciphers from the
178 ``data-ciphers`` option to the server via ``IV_CIPHERS``. OpenVPN
179 servers will select the first common cipher from the ``data-ciphers``
180 list instead of blindly pushing the first cipher of the list. This
181 allows to use a configuration like
182 ``data-ciphers ChaCha20-Poly1305:AES-256-GCM`` on the server that
183 prefers ChaCha20-Poly1305 but uses it only if the client supports it.
184
185 See the data channel negotiation section in the manual for more details.
186
187 Removal of BF-CBC support in default configuration:
188 By default OpenVPN 2.5 will only accept AES-256-GCM and AES-128-GCM as
189 data ciphers. OpenVPN 2.4 allows AES-256-GCM,AES-128-GCM and BF-CBC when
190 no --cipher and --ncp-ciphers options are present. Accepting BF-CBC can be
191 enabled by adding
192
193 data-ciphers AES-256-GCM:AES-128-GCM:BF-CBC
194
195 and when you need to support very old peers also
196
197 data-ciphers-fallback BF-CBC
198
199 To offer backwards compatibility with older configs an *explicit*
200
201 cipher BF-CBC
202
203 in the configuration will be automatically translated into adding BF-CBC
204 to the data-ciphers option and setting data-ciphers-fallback to BF-CBC
205 (as in the example commands above). We strongly recommend to switching
206 away from BF-CBC to a more secure cipher.
207
208 Asynchronous (deferred) authentication support for auth-pam plugin.
209 See src/plugins/auth-pam/README.auth-pam for details.
210
211 Deferred client-connect
212 The ``--client-connect`` option and the connect plugin API allow
213 asynchronous/deferred return of the configuration file in the same way
214 as the auth-plugin.
215
216 Faster connection setup
217 A client will signal in the ``IV_PROTO`` variable that it is in pull
218 mode. This allows the server to push the configuration options to
219 the client without waiting for a ``PULL_REQUEST`` message. The feature
220 is automatically enabled if both client and server support it and
221 significantly reduces the connection setup time by avoiding one
222 extra packet round-trip and 1s of internal event delays.
223
224 Netlink support
225 On Linux, if configured without ``--enable-iproute2``, configuring IP
226 addresses and adding/removing routes is now done via the netlink(3)
227 kernel interface. This is much faster than calling ``ifconfig`` or
228 ``route`` and also enables OpenVPN to run with less privileges.
229
230 If configured with --enable-iproute2, the ``ip`` command is used
231 (as in 2.4). Support for ``ifconfig`` and ``route`` is gone.
232
233 Wintun support
234 On Windows, OpenVPN can now use ``wintun`` devices. They are faster
235 than the traditional ``tap9`` tun/tap devices, but do not provide
236 ``--dev tap`` mode - so the official installers contain both. To use
237 a wintun device, add ``--windows-driver wintun`` to your config
238 (and use of the interactive service is required as wintun needs
239 SYSTEM privileges to enable access).
240
241 IPv6-only operation
242 It is now possible to have only IPv6 addresses inside the VPN tunnel,
243 and IPv6-only address pools (2.4 always required IPv4 config/pools
244 and IPv6 was the "optional extra").
245
246 Improved Windows 10 detection
247 Correctly log OS on Windows 10 now.
248
249 Linux VRF support
250 Using the new ``--bind-dev`` option, the OpenVPN outside socket can
251 now be put into a Linux VRF. See the "Virtual Routing and Forwarding"
252 documentation in the man page.
253
254 TLS 1.3 support
255 TLS 1.3 support has been added to OpenVPN. Currently, this requires
256 OpenSSL 1.1.1+.
257 The options ``--tls-ciphersuites`` and ``--tls-groups`` have been
258 added to fine tune TLS protocol options. Most of the improvements
259 were also backported to OpenVPN 2.4 as part of the maintainance
260 releases.
261
262 Support setting DHCP search domain
263 A new option ``--dhcp-option DOMAIN-SEARCH my.example.com`` has been
264 defined, and Windows support for it is implemented (tun/tap only, no
265 wintun support yet). Other platforms need to support this via ``--up``
266 script (Linux) or GUI (OSX/Tunnelblick).
267
268 per-client changing of ``--data-ciphers`` or ``data-ciphers-fallback``
269 from client-connect script/dir (NOTE: this only changes preference of
270 ciphers for NCP, but can not override what the client announces as
271 "willing to accept")
272
273 Handle setting of tun/tap interface MTU on Windows
274 If IPv6 is in use, MTU must be >= 1280 (Windows enforces IETF requirements)
275
276 Add support for OpenSSL engines to access private key material (like TPM).
277
278 HMAC based auth-token support
279 The ``--auth-gen-token`` support has been improved and now generates HMAC
280 based user token. If the optional ``--auth-gen-token-secret`` option is
281 used clients will be able to seamlessly reconnect to a different server
282 using the same secret file or to the same server after a server restart.
283
284 Improved support for pending authentication
285 The protocol has been enhanced to be able to signal that
286 the authentication should use a secondary authentication
287 via web (like SAML) or a two factor authentication without
288 disconnecting the OpenVPN session with AUTH_FAILED. The
289 session will instead be stay in a authenticated state and
290 wait for the second factor authentication to complete.
291
292 This feature currently requires usage of the managent interface
293 on both client and server side. See the `management-notes.txt`
294 ``client-pending-auth`` and ``cr-response`` commands for more
295 details.
296
297 VLAN support
298 OpenVPN servers in TAP mode can now use 802.1q tagged VLANs
299 on the TAP interface to separate clients into different groups
300 that can then be handled differently (different subnets / DHCP,
301 firewall zones, ...) further down the network. See the new
302 options ``--vlan-tagging``, ``--vlan-accept``, ``--vlan-pvid``.
303
304 802.1q tagging on the client side TAP interface is not handled
305 today (= tags are just forwarded transparently to the server).
306
307 Support building of .msi installers for Windows
308
309 Allow unicode search string in ``--cryptoapicert`` option (Windows)
310
311 Support IPv4 configs with /31 netmasks now
312 (By no longer trying to configure ``broadcast x.x.x.x'' in
313 ifconfig calls, /31 support "just works")
314
315 New option ``--block-ipv6`` to reject all IPv6 packets (ICMPv6)
316 this is useful if the VPN service has no IPv6, but the clients
317 might have (LAN), to avoid client connections to IPv6-enabled
318 servers leaking "around" the IPv4-only VPN.
319
320 ``--ifconfig-ipv6`` and ``--ifconfig-ipv6-push`` will now accept
321 hostnames and do a DNS lookup to get the IPv6 address to use
322
323
324 Deprecated features
325 -------------------
326 For an up-to-date list of all deprecated options, see this wiki page:
327 https://community.openvpn.net/openvpn/wiki/DeprecatedOptions
328
329 - ``ncp-disable`` has been deprecated
330 With the improved and matured data channel cipher negotiation, the use
331 of ``ncp-disable`` should not be necessary anymore.
332
333 - ``inetd`` has been deprecated
334 This is a very limited and not-well-tested way to run OpenVPN, on TCP
335 and TAP mode only, which complicates the code quite a bit for little gain.
336 To be removed in OpenVPN 2.6 (unless users protest).
337
338 - ``no-iv`` has been removed
339 This option was made into a NOOP option with OpenVPN 2.4. This has now
340 been completely removed.
341
342 - ``--client-cert-not-required`` has been removed
343 This option will now cause server configurations to not start. Use
344 ``--verify-client-cert none`` instead.
345
346 - ``--ifconfig-pool-linear`` has been removed
347 This option is removed. Use ``--topology p2p`` or ``--topology subnet``
348 instead.
349
350 - ``--compress xxx`` is considered risky and is warned against, see below.
351
352 - ``--key-method 1`` has been removed
353
354
355 User-visible Changes
356 --------------------
357 - If multiple connect handlers are used (client-connect, ccd, connect
358 plugin) and one of the handler succeeds but a subsequent fails, the
359 client-disconnect-script is now called immediately. Previously it
360 was called, when the VPN session was terminated.
361
362 - Support for building with OpenSSL 1.0.1 has been removed. The minimum
363 supported OpenSSL version is now 1.0.2.
364
365 - The GET_CONFIG management state is omitted if the server pushes
366 the client configuration almost immediately as result of the
367 faster connection setup feature.
368
369 - ``--compress`` is nowadays considered risky, because attacks exist
370 leveraging compression-inside-crypto to reveal plaintext (VORACLE). So
371 by default, ``--compress xxx`` will now accept incoming compressed
372 packets (for compatibility with peers that have not been upgraded yet),
373 but will not use compression outgoing packets. This can be controlled with
374 the new option ``--allow-compression yes|no|asym``.
375
376 - Stop changing ``--txlen`` aways from OS defaults unless explicitly specified
377 in config file. OS defaults nowadays are actually larger then what we used
378 to configure, so our defaults sometimes caused packet drops = bad performance.
379
380 - remove ``--writepid`` pid file on exit now
381
382 - plugin-auth-pam now logs via OpenVPN logging method, no longer to stderr
383 (this means you'll have log messages in syslog or openvpn log file now)
384
385 - use ISO 8601 time format for file based logging now (YYYY-MM-DD hh:mm:dd)
386 (syslog is not affected, nor is ``--machine-readable-output``)
387
388 - ``--clr-verify`` now loads all CRLs if more than one CRL is in the same
389 file (OpenSSL backend only, mbedTLS always did that)
390
391 - when ``--auth-user-pass file`` has no password, and the management interface
392 is active, query management interface (instead of trying console query,
393 which does not work on windows)
394
395 - skip expired certificates in Windows certificate store (``--cryptoapicert``)
396
397 - ``--socks-proxy`` + ``--proto udp*`` will now allways use IPv4, even if
398 IPv6 is requested and available. Our SOCKS code does not handle IPv6+UDP,
399 and before that change it would just fail in non-obvious ways.
400
401 - TCP listen() backlog queue is now set to 32 - this helps TCP servers that
402 receive lots of "invalid" connects by TCP port scanners
403
404 - do no longer print OCC warnings ("option mismatch") about ``key-method``,
405 ``keydir``, ``tls-auth`` and ``cipher`` - these are either gone now, or
406 negotiated, and the warnings do not serve a useful purpose.
407
408 - ``dhcp-option DNS`` and ``dhcp-option DNS6`` are now treated identically
409 (= both accept an IPv4 or IPv6 address for the nameserver)
410
411
412 Maintainer-visible changes
413 --------------------------
414 - the man page is now in maintained in .rst format, so building the openvpn.8
415 manpage from a git checkout now requires python-docutils (if this is missing,
416 the manpage will not be built - which is not considered an error generally,
417 but for package builders or ``make distcheck`` it is). Release tarballs
418 contain the openvpn.8 file, so unless some .rst is changed, doc-utils are
419 not needed for building.
420
421 - OCC support can no longer be disabled
422
423 - AEAD support is now required in the crypto library
424
425 - ``--disable-server`` has been removed from configure (so it is no longer
426 possible to build a client-/p2p-only OpenVPN binary) - the saving in code
427 size no longer outweighs the extra maintenance effort.
428
429 - ``--enable-iproute2`` will disable netlink(3) support, so maybe remove
430 that from package building configs (see above)
431
432 - support building with MSVC 2019
433
434 - cmocka based unit tests are now only run if cmocka is installed externally
435 (2.4 used to ship a local git submodule which was painful to maintain)
436
437 - ``--disable-crypto`` configure option has been removed. OpenVPN is now always
438 built with crypto support, which makes the code much easier to maintain.
439 This does not affect ``--cipher none`` to do a tunnel without encryption.
440
441 - ``--disable-multi`` configure option has been removed
442
443
444
445 Overview of changes in 2.4
446 ==========================
447
448
449 New features
450 ------------
451 Seamless client IP/port floating
452 Added new packet format P_DATA_V2, which includes peer-id. If both the
453 server and client support it, the client sends all data packets in
454 the new format. When a data packet arrives, the server identifies peer
455 by peer-id. If peer's ip/port has changed, server assumes that
456 client has floated, verifies HMAC and updates ip/port in internal structs.
457 This allows the connection to be immediately restored, instead of requiring
458 a TLS handshake before the server accepts packets from the new client
459 ip/port.
460
461 Data channel cipher negotiation
462 Data channel ciphers (``--cipher``) are now by default negotiated. If a
463 client advertises support for Negotiable Crypto Parameters (NCP), the
464 server will choose a cipher (by default AES-256-GCM) for the data channel,
465 and tell the client to use that cipher. Data channel cipher negotiation
466 can be controlled using ``--ncp-ciphers`` and ``--ncp-disable``.
467
468 A more limited version also works in client-to-server and server-to-client
469 scenarios where one of the end points uses a v2.4 client or server and the
470 other side uses an older version. In such scenarios the v2.4 side will
471 change to the ``--cipher`` set by the remote side, if permitted by by
472 ``--ncp-ciphers``. For example, a v2.4 client with ``--cipher BF-CBC``
473 and ``ncp-ciphers AES-256-GCM:AES-256-CBC`` can connect to both a v2.3
474 server with ``cipher BF-CBC`` as well as a server with
475 ``cipher AES-256-CBC`` in its config. The other way around, a v2.3 client
476 with either ``cipher BF-CBC`` or ``cipher AES-256-CBC`` can connect to a
477 v2.4 server with e.g. ``cipher BF-CBC`` and
478 ``ncp-ciphers AES-256-GCM:AES-256-CBC`` in its config. For this to work
479 it requires that OpenVPN was built without disabling OCC support.
480
481 AEAD (GCM) data channel cipher support
482 The data channel now supports AEAD ciphers (currently only GCM). The AEAD
483 packet format has a smaller crypto overhead than the CBC packet format,
484 (e.g. 20 bytes per packet for AES-128-GCM instead of 36 bytes per packet
485 for AES-128-CBC + HMAC-SHA1).
486
487 ECDH key exchange
488 The TLS control channel now supports for elliptic curve diffie-hellmann
489 key exchange (ECDH).
490
491 Improved Certificate Revocation List (CRL) processing
492 CRLs are now handled by the crypto library (OpenSSL or mbed TLS), instead
493 of inside OpenVPN itself. The crypto library implementations are more
494 strict than the OpenVPN implementation was. This might reject peer
495 certificates that would previously be accepted. If this occurs, OpenVPN
496 will log the crypto library's error description.
497
498 Dualstack round-robin DNS client connect
499 Instead of only using the first address of each ``--remote`` OpenVPN
500 will now try all addresses (IPv6 and IPv4) of a ``--remote`` entry.
501
502 Support for providing IPv6 DNS servers
503 A new DHCP sub-option ``DNS6`` is added alongside with the already existing
504 ``DNS`` sub-option. This is used to provide DNS resolvers available over
505 IPv6. This may be pushed to clients where `` --up`` scripts and ``--plugin``
506 can act upon it through the ``foreign_option_<n>`` environment variables.
507
508 Support for the Windows client picking up this new sub-option is added,
509 however IPv6 DNS resolvers need to be configured via ``netsh`` which requires
510 administrator privileges unless the new interactive services on Windows is
511 being used. If the interactive service is used, this service will execute
512 ``netsh`` in the background with the proper privileges.
513
514 New improved Windows Background service
515 The new OpenVPNService is based on openvpnserv2, a complete rewrite of the OpenVPN
516 service wrapper. It is intended for launching OpenVPN instances that should be
517 up at all times, instead of being manually launched by a user. OpenVPNService is
518 able to restart individual OpenVPN processes if they crash, and it also works
519 properly on recent Windows versions. OpenVPNServiceLegacy tends to work poorly,
520 if at all, on newer Windows versions (8+) and its use is not recommended.
521
522 New interactive Windows service
523 The installer starts OpenVPNServiceInteractive automatically and configures
524 it to start at system startup.
525
526 The interactive Windows service allows unprivileged users to start
527 OpenVPN connections in the global config directory (usually
528 C:\\Program Files\\OpenVPN\\config) using OpenVPN GUI without any
529 extra configuration.
530
531 Users who belong to the built-in Administrator group or to the
532 local "OpenVPN Administrator" group can also store configuration
533 files under %USERPROFILE%\\OpenVPN\\config for use with the
534 interactive service.
535
536 redirect-gateway ipv6
537 OpenVPN has now feature parity between IPv4 and IPv6 for redirect
538 gateway including the handling of overlapping IPv6 routes with
539 IPv6 remote VPN server address.
540
541 LZ4 Compression and pushable compression
542 Additionally to LZO compression OpenVPN now also supports LZ4 compression.
543 Compression options are now pushable from the server.
544
545 Filter pulled options client-side: pull-filter
546 New option to explicitly allow or reject options pushed by the server.
547 May be used multiple times and is applied in the order specified.
548
549 Per-client remove push options: push-remove
550 New option to remove options on a per-client basis from the "push" list
551 (more fine-grained than ``--push-reset``).
552
553 Http proxy password inside config file
554 Http proxy passwords can be specified with the inline file option
555 ``<http-proxy-user-pass>`` .. ``</http-proxy-user-pass>``
556
557 Windows version detection
558 Windows version is detected, logged and possibly signalled to server
559 (IV_PLAT_VER=<nn> if ``--push-peer-info`` is set on client).
560
561 Authentication tokens
562 In situations where it is not suitable to save user passwords on the client,
563 OpenVPN has support for pushing a --auth-token since v2.3. This option is
564 pushed from the server to the client with a token value to be used instead
565 of the users password. For this to work, the authentication plug-in would
566 need to implement this support as well. In OpenVPN 2.4 --auth-gen-token
567 is introduced, which will allow the OpenVPN server to generate a random
568 token and push it to the client without any changes to the authentication
569 modules. When the clients need to re-authenticate the OpenVPN server will
570 do the authentication internally, instead of sending the re-authentication
571 request to the authentication module . This feature is especially
572 useful in configurations which use One Time Password (OTP) authentication
573 schemes, as this allows the tunnel keys to be renegotiated regularly without
574 any need to supply new OTP codes.
575
576 keying-material-exporter
577 Keying Material Exporter [RFC-5705] allow additional keying material to be
578 derived from existing TLS channel.
579
580 Android platform support
581 Support for running on Android using Android's VPNService API has been added.
582 See doc/android.txt for more details. This support is primarily used in
583 the OpenVPN for Android app (https://github.com/schwabe/ics-openvpn)
584
585 AIX platform support
586 AIX platform support has been added. The support only includes tap
587 devices since AIX does not provide tun interface.
588
589 Control channel encryption (``--tls-crypt``)
590 Use a pre-shared static key (like the ``--tls-auth`` key) to encrypt control
591 channel packets. Provides more privacy, some obfuscation and poor-man's
592 post-quantum security.
593
594 Asynchronous push reply
595 Plug-ins providing support for deferred authentication can benefit from a more
596 responsive authentication where the server sends PUSH_REPLY immediately once
597 the authentication result is ready, instead of waiting for the the client to
598 to send PUSH_REQUEST once more. This requires OpenVPN to be built with
599 ``./configure --enable-async-push``. This is a compile-time only switch.
600
601
602 Deprecated features
603 -------------------
604 For an up-to-date list of all deprecated options, see this wiki page:
605 https://community.openvpn.net/openvpn/wiki/DeprecatedOptions
606
607 - ``--key-method 1`` is deprecated in OpenVPN 2.4 and will be removed in v2.5.
608 Migrate away from ``--key-method 1`` as soon as possible. The recommended
609 approach is to remove the ``--key-method`` option from the configuration
610 files, OpenVPN will then use ``--key-method 2`` by default. Note that this
611 requires changing the option in both the client and server side configs.
612
613 - ``--tls-remote`` is removed in OpenVPN 2.4, as indicated in the v2.3
614 man-pages. Similar functionality is provided via ``--verify-x509-name``,
615 which does the same job in a better way.
616
617 - ``--compat-names`` and ``--no-name-remapping`` were deprecated in OpenVPN 2.3
618 and will be removed in v2.5. All scripts and plug-ins depending on the old
619 non-standard X.509 subject formatting must be updated to the standardized
620 formatting. See the man page for more information.
621
622 - ``--no-iv`` is deprecated in OpenVPN 2.4 and will be removed in v2.5.
623
624 - ``--keysize`` is deprecated in OpenVPN 2.4 and will be removed in v2.6
625 together with the support of ciphers with cipher block size less than
626 128-bits.
627
628 - ``--comp-lzo`` is deprecated in OpenVPN 2.4. Use ``--compress`` instead.
629
630 - ``--ifconfig-pool-linear`` has been deprecated since OpenVPN 2.1 and will be
631 removed in v2.5. Use ``--topology p2p`` instead.
632
633 - ``--client-cert-not-required`` is deprecated in OpenVPN 2.4 and will be removed
634 in v2.5. Use ``--verify-client-cert none`` for a functional equivalent.
635
636 - ``--ns-cert-type`` is deprecated in OpenVPN 2.3.18 and v2.4. It will be removed
637 in v2.5. Use the far better ``--remote-cert-tls`` option which replaces this
638 feature.
639
640
641 User-visible Changes
642 --------------------
643 - When using ciphers with cipher blocks less than 128-bits,
644 OpenVPN will complain loudly if the configuration uses ciphers considered
645 weak, such as the SWEET32 attack vector. In such scenarios, OpenVPN will by
646 default renegotiate for each 64MB of transported data (``--reneg-bytes``).
647 This renegotiation can be disabled, but is HIGHLY DISCOURAGED.
648
649 - For certificate DNs with duplicate fields, e.g. "OU=one,OU=two", both fields
650 are now exported to the environment, where each second and later occurrence
651 of a field get _$N appended to it's field name, starting at N=1. For the
652 example above, that would result in e.g. X509_0_OU=one, X509_0_OU_1=two.
653 Note that this breaks setups that rely on the fact that OpenVPN would
654 previously (incorrectly) only export the last occurrence of a field.
655
656 - ``proto udp`` and ``proto tcp`` now use both IPv4 and IPv6. The new
657 options ``proto udp4`` and ``proto tcp4`` use IPv4 only.
658
659 - ``--sndbuf`` and ``--recvbuf`` default now to OS defaults instead of 64k
660
661 - OpenVPN exits with an error if an option has extra parameters;
662 previously they were silently ignored
663
664 - ``--tls-auth`` always requires OpenVPN static key files and will no
665 longer work with free form files
666
667 - ``--proto udp6/tcp6`` in server mode will now try to always listen to
668 both IPv4 and IPv6 on platforms that allow it. Use ``--bind ipv6only``
669 to explicitly listen only on IPv6.
670
671 - Removed ``--enable-password-save`` from configure. This option is now
672 always enabled.
673
674 - Stricter default TLS cipher list (override with ``--tls-cipher``), that now
675 also disables:
676
677 * Non-ephemeral key exchange using static (EC)DH keys
678 * DSS private keys
679
680 - mbed TLS builds: changed the tls_digest_N values exported to the script
681 environment to be equal to the ones exported by OpenSSL builds, namely
682 the certificate fingerprint (was the hash of the 'to be signed' data).
683
684 - mbed TLS builds: minimum RSA key size is now 2048 bits. Shorter keys will
685 not be accepted, both local and from the peer.
686
687 - ``--connect-timeout`` now specifies the timeout until the first TLS packet
688 is received (identical to ``--server-poll-timeout``) and this timeout now
689 includes the removed socks proxy timeout and http proxy timeout.
690
691 In ``--static`` mode ``connect-timeout`` specifies the timeout for TCP and
692 proxy connection establishment
693
694 - ``--connect-retry-max`` now specifies the maximum number of unsuccessful
695 attempts of each remote/connection entry before exiting.
696
697 - ``--http-proxy-timeout`` and the static non-changeable socks timeout (5s)
698 have been folded into a "unified" ``--connect-timeout`` which covers all
699 steps needed to connect to the server, up to the start of the TLS exchange.
700 The default value has been raised to 120s, to handle slow http/socks
701 proxies graciously. The old "fail TCP fast" behaviour can be achieved by
702 adding "``--connect-timeout 10``" to the client config.
703
704 - ``--http-proxy-retry`` and ``--sock-proxy-retry`` have been removed. Proxy connections
705 will now behave like regular connection entries and generate a USR1 on failure.
706
707 - ``--connect-retry`` gets an optional second argument that specifies the maximum
708 time in seconds to wait between reconnection attempts when an exponential
709 backoff is triggered due to repeated retries. Default = 300 seconds.
710
711 - Data channel cipher negotiation (see New features section) can override
712 ciphers configured in the config file. Use ``--ncp-disable`` if you do not want
713 this behavior.
714
715 - All tun devices on all platforms are always considered to be IPv6
716 capable. The ``--tun-ipv6`` option is ignored (behaves like it is always
717 on).
718
719 - On the client side recursively routed packets, which have the same destination
720 as the VPN server, are dropped. This can be disabled with
721 --allow-recursive-routing option.
722
723 - On Windows, when the ``--register-dns`` option is set, OpenVPN no longer
724 restarts the ``dnscache`` service - this had unwanted side effects, and
725 seems to be no longer necessary with currently supported Windows versions.
726
727 - If no flags are given, and the interactive Windows service is used, "def1"
728 is implicitly set (because "delete and later reinstall the existing
729 default route" does not work well here). If not using the service,
730 the old behaviour is kept.
731
732 - OpenVPN now reloads a CRL only if the modication time or file size has
733 changed, instead of for each new connection. This reduces the connection
734 setup time, in particular when using large CRLs.
735
736 - OpenVPN now ships with more up-to-date systemd unit files which take advantage
737 of the improved service management as well as some hardening steps. The
738 configuration files are picked up from the /etc/openvpn/server/ and
739 /etc/openvpn/client/ directories (depending on unit file). This also avoids
740 these new unit files and how they work to collide with older pre-existing
741 unit files.
742
743 - Using ``--no-iv`` (which is generally not a recommended setup) will
744 require explicitly disabling NCP with ``--disable-ncp``. This is
745 intentional because NCP will by default use AES-GCM, which requires
746 an IV - so we want users of that option to consciously reconsider.
747
748
749 Maintainer-visible changes
750 --------------------------
751 - OpenVPN no longer supports building with crypto support, but without TLS
752 support. As a consequence, OPENSSL_CRYPTO_{CFLAGS,LIBS} and
753 OPENSSL_SSL_{CFLAGS,LIBS} have been merged into OPENSSL_{CFLAGS,LIBS}. This
754 is particularly relevant for maintainers who build their own OpenSSL library,
755 e.g. when cross-compiling.
756
757 - Linux distributions using systemd is highly encouraged to ship these new unit
758 files instead of older ones, to provide a unified behaviour across systemd
759 based Linux distributions.
760
761 - With OpenVPN 2.4, the project has moved over to depend on and actively use
762 the official C99 standard (-std=c99). This may fail on some older compiler/libc
763 header combinations. In most of these situations it is recommended to
764 use -std=gnu99 in CFLAGS. This is known to be needed when doing
765 i386/i686 builds on RHEL5.
766
767
768 Version 2.4.5
769 =============
770
771 New features
772 ------------
773 - The new option ``--tls-cert-profile`` can be used to restrict the set of
774 allowed crypto algorithms in TLS certificates in mbed TLS builds. The
775 default profile is 'legacy' for now, which allows SHA1+, RSA-1024+ and any
776 elliptic curve certificates. The default will be changed to the 'preferred'
777 profile in the future, which requires SHA2+, RSA-2048+ and any curve.
778
779
780 Version 2.4.3
781 =============
782
783 New features
784 ------------
785 - Support building with OpenSSL 1.1 now (in addition to older versions)
786
787 - On Win10, set low interface metric for TAP adapter when block-outside-dns
788 is in use, to make Windows prefer the TAP adapter for DNS queries
789 (avoiding large delays)
790
791
792 Security
793 --------
794 - CVE-2017-7522: Fix ``--x509-track`` post-authentication remote DoS
795 A client could crash a v2.4+ mbedtls server, if that server uses the
796 ``--x509-track`` option and the client has a correct, signed and unrevoked
797 certificate that contains an embedded NUL in the certificate subject.
798 Discovered and reported to the OpenVPN security team by Guido Vranken.
799
800 - CVE-2017-7521: Fix post-authentication remote-triggerable memory leaks
801 A client could cause a server to leak a few bytes each time it connects to the
802 server. That can eventually cause the server to run out of memory, and thereby
803 causing the server process to terminate. Discovered and reported to the
804 OpenVPN security team by Guido Vranken. (OpenSSL builds only.)
805
806 - CVE-2017-7521: Fix a potential post-authentication remote code execution
807 attack on servers that use the ``--x509-username-field`` option with an X.509
808 extension field (option argument prefixed with ``ext:``). A client that can
809 cause a server to run out-of-memory (see above) might be able to cause the
810 server to double free, which in turn might lead to remote code execution.
811 Discovered and reported to the OpenVPN security team by Guido Vranken.
812 (OpenSSL builds only.)
813
814 - CVE-2017-7520: Pre-authentication remote crash/information disclosure for
815 clients. If clients use a HTTP proxy with NTLM authentication (i.e.
816 ``--http-proxy <server> <port> [<authfile>|'auto'|'auto-nct'] ntlm2``),
817 a man-in-the-middle attacker between the client and the proxy can cause
818 the client to crash or disclose at most 96 bytes of stack memory. The
819 disclosed stack memory is likely to contain the proxy password. If the
820 proxy password is not reused, this is unlikely to compromise the security
821 of the OpenVPN tunnel itself. Clients who do not use the ``--http-proxy``
822 option with ntlm2 authentication are not affected.
823
824 - CVE-2017-7508: Fix remotely-triggerable ASSERT() on malformed IPv6 packet.
825 This can be used to remotely shutdown an openvpn server or client, if
826 IPv6 and ``--mssfix`` are enabled and the IPv6 networks used inside the VPN
827 are known.
828
829 - Fix null-pointer dereference when talking to a malicious http proxy
830 that returns a malformed ``Proxy-Authenticate:`` headers for digest auth.
831
832 - Fix overflow check for long ``--tls-cipher`` option
833
834 - Windows: Pass correct buffer size to ``GetModuleFileNameW()``
835 (OSTIF/Quarkslabs audit, finding 5.6)
836
837
838 User-visible Changes
839 --------------------
840 - ``--verify-hash`` can now take an optional flag which changes the hashing
841 algorithm. It can be either SHA1 or SHA256. The default if not provided is
842 SHA1 to preserve backwards compatibility with existing configurations.
843
844 - Restrict the supported ``--x509-username-field`` extension fields to subjectAltName
845 and issuerAltName. Other extensions probably didn't work anyway, and would
846 cause OpenVPN to crash when a client connects.
847
848
849 Bugfixes
850 --------
851 - Fix fingerprint calculation in mbed TLS builds. This means that mbed TLS users
852 of OpenVPN 2.4.0, v2.4.1 and v2.4.2 that rely on the values of the
853 ``tls_digest_*`` env vars, or that use ``--verify-hash`` will have to change
854 the fingerprint values they check against. The security impact of the
855 incorrect calculation is very minimal; the last few bytes (max 4, typically
856 4) are not verified by the fingerprint. We expect no real-world impact,
857 because users that used this feature before will notice that it has suddenly
858 stopped working, and users that didn't will notice that connection setup
859 fails if they specify correct fingerprints.
860
861 - Fix edge case with NCP when the server sends an empty PUSH_REPLY message
862 back, and the client would not initialize it's data channel crypto layer
863 properly (trac #903)
864
865 - Fix SIGSEGV on unaligned buffer access on OpenBSD/Sparc64
866
867 - Fix TCP_NODELAY on OpenBSD
868
869 - Remove erroneous limitation on max number of args for ``--plugin``
870
871 - Fix NCP behaviour on TLS reconnect (Server would not send a proper
872 "cipher ..." message back to the client, leading to client and server
873 using different ciphers) (trac #887)
874
875
876 Version 2.4.2
877 =============
878
879 Bugfixes
880 --------
881 - Fix memory leak introduced in OpenVPN 2.4.1: if ``--remote-cert-tls`` is
882 used, we leaked some memory on each TLS (re)negotiation.
883
884
885 Security
886 --------
887 - Fix a pre-authentication denial-of-service attack on both clients and
888 servers. By sending a too-large control packet, OpenVPN 2.4.0 or v2.4.1 can
889 be forced to hit an ASSERT() and stop the process. If ``--tls-auth`` or
890 ``--tls-crypt`` is used, only attackers that have the ``--tls-auth`` or
891 ``--tls-crypt`` key can mount an attack.
892 (OSTIF/Quarkslab audit finding 5.1, CVE-2017-7478)
893
894 - Fix an authenticated remote DoS vulnerability that could be triggered by
895 causing a packet id roll over. An attack is rather inefficient; a peer
896 would need to get us to send at least about 196 GB of data.
897 (OSTIF/Quarkslab audit finding 5.2, CVE-2017-7479)
898
899
900 Version 2.4.1
901 =============
902 - ``--remote-cert-ku`` now only requires the certificate to have at least the
903 bits set of one of the values in the supplied list, instead of requiring an
904 exact match to one of the values in the list.
905 - ``--remote-cert-tls`` now only requires that a keyUsage is present in the
906 certificate, and leaves the verification of the value up to the crypto
907 library, which has more information (i.e. the key exchange method in use)
908 to verify that the keyUsage is correct.
909 - ``--ns-cert-type`` is deprecated. Use ``--remote-cert-tls`` instead.
910 The nsCertType x509 extension is very old, and barely used.
911 ``--remote-cert-tls`` uses the far more common keyUsage and extendedKeyUsage
912 extension instead. Make sure your certificates carry these to be able to
913 use ``--remote-cert-tls``.
914