Skip to content
OpenVPN 3 Linux v11 (beta)

The highlights of this release includes:

* Feature: OpenVPN Data Channel Off-load (DCO)

  This features is currently a tech-preview feature.  It is not
  targeted for production usage in its current shape.  As this is
  still under heavy development, we currently only support the latest
  Fedora releases (Fedora 32 and newer) and Ubuntu 20.04.  This
  currently requires Linux kernel 5.4 and newer.

  This facilitates a brand new kernel module, ovpn-dco, where all the
  crypto operations related to the OpenVPN data channel happens directly
  inside the kernel.  The data channel operations are related to the
  tunnelled network traffic.  This has the advantage of being able to
  reduce the network packet processing overhead compared to the
  traditional tun devices.

  When using the tun interfaces with OpenVPN, the remote side sends
  encrypted network traffic to a UDP or TCP socket.  The Linux kernel
  forwards these packets from kernel space to the OpenVPN user space
  process, which decrypts the packet and extracts the unencrypted
  network traffic.  This unencrypted data is then passed to a tun
  interface, which sends the traffic back to the kernel space for
  further processing.

  The ovpn-dco module changes this packet route.  When the remote
  side sends data channel packets, the ovpn-dco kernel module will
  receive the packet and will have the encryption keys needed to
  decrypt the packet directly in the kernel space and then pass it
  directly to the virtual interface ovpn-dco manages.  If the OpenVPN
  packet from the remote side is a control channel packet, the ovpn-dco
  kernel module will pass this traffic up to the OpenVPN user space
  process.  Control channel packets are used to pass authentication
  credentials, configuration setup, data channel key exchanges, etc.

  To make use of this feature, the kmod-ovpn-dco kernel module must be
  installed on the system.  The OpenVPN 3 Linux project provides
  kmod-ovpn-dco packages for Fedora 32, 33 and Rawhide in addition
  to Ubuntu 20.04.

  On Fedora, with the openvpn3 Copr repository enabled:

      # yum install kmod-ovpn-dco

  On Ubuntu, with the openvpn3 apt repository configured:

      # apt install kmod-ovpn-dco

  With the kernel module installed, the configuration file must be
  be imported:

      $ openvpn3 config-import --config CONFIG_FILENAME --name CFGNAME

  Then the imported configuration profile must get the DCO feature
  enabled:

      $ openvpn3 config-manage --show --name CFGNAME --dco true

  To preserve this setting through reboots, consider adding --persistent
  when importing the configuration file via 'openvpn3 config-import'.

  Now everything is ready and a VPN session can be started:

      $ openvpn3 session-start --config CFGNAME

  The ovpn-dco kernel module from the openvpn3 repositories has some
  limitations:

  - No TCP support
    ovpn-dco will require a UDP connection to the server.

  - No IPv6 support
    ovpn-dco does only support IPv4 for the connection
    to the remote server.

  - Limited data channel cipher support
    ovpn-dco only supports the AES-GCM ciphers.  Support for
    more ciphers will arrive later.

  - No interface statistics available
    The ovpn-dco module has not yet implemented traffic statistics.

  All of these limitations will be resolved in future releases.  A more
  comprehensive list of what ovpn-dco is working on and will support can
  be found in the ovpn-dco project.

  WARNING:
      The ovpn-dco kernel module is under heavy development.
      This means that the API used between the kernel space
      and OpenVPN user space processes may change.  Therefore
      the kernel module version must be the same which
      OpenVPN 3 Linux has been compiled against.  Once
      the API is has become stable, this restriction will no
      longer be needed.

* Bugfix: OpenVPN 3 Linux configuration manager could crash
  If the an imported persistent configuration file would contain syntax
  errors, the openvpn3-service-configmgr process could crash (SEGV).
  This has been improved and the configuration manager will now ignore
  incorrect or corrupted persistent configuration files.

* Bugfix: openvpn3 and openvpn3-admin could sometimes crash
  Occasionally on certain hosts, the 'openvpn3' and 'openvpn3-admin'
  tools could crash unexpectedly.  This was an error related to the
  argument alias processing and has been fixed to avoid this issue.

* Enhancements: The openvpn2 bash-completion support is extended
  In prior versions, the openvpn2 command did not provide any shell
  completion help to the --config option.  This has been resolved.

* OpenVPN Access Server configuration import improvements
  The 'openvpn3-as' utility now signals to the Access Server the
  downloaded configuration profile is intended to be imported into
  a local storage.

Arne Schwabe (1):
      Indicate that the openvpn-as imports a config

David Sommerseth (13):
      configmgr: Better handling of incorrect configuration profiles
      docs: Fix incorrect attribute header - user-auth:password
      core: Update client and aws service to use new Core process init
      common/cmdargparser: Fix lacking alias initialization
      netcfg: Rename the tun device properly on non-DCO builds
      configmgr: Add DCO device naming hack
      Update to latest OpenVPN 3 Core library
      dco: Update ovpn-dco submodule to get the latest header files
      docs: Update README with related to the new DCO feature
      docs/man: Add missing options in openvpn3-config-manage man page
      build: Fix out-of-tree builds when --enable-bash-completion is enabled
      shell: Improve openvpn2 --config bash completion
      core/ovpn-dco: Sync up DCO API changes

Lev Stipakov (16):
      openvpn3-service-client: add debug option to specify client path
      build: Define OPENVPN_USE_SITNL in configure.ac
      core: Update to latest openvpn3 Core library
      common: adapt to Core library changes in core JSON extensions
      tests: add missing include in netcfg cli
      Add ovpn-dco submodule
      build: Add ovpn-dco build options
      configmgr: Add support for "dco" config property
      client/netcfg: Initial support for ovpn-dco
      netcfg: Implement crypto key passing for ovpn-dco
      netcfg: Implement ovpn-dco tun establish()
      client/netcfg: Handle ovpn-dco device creation error
      netcfg: Implement ovpn-dco crypto key swapping
      netcfg: Implement setting peer properties for ovpn-dco
      Jenkinsfile: add ovpn-dco support
      ovpn-dco: explicitly subscribe for genl packets