Skip to content
OpenVPN Linux v10 (beta)

The highlights of this release are:

* Feature: systemd-resolved integration

  By default, OpenVPN 3 Linux will modify the /etc/resolv.conf file
  with DNS configurations pushed by the VPN server.  This release
  adds systemd-resolved as an alternative to this approach, where
  the systemd-resolved service will be in charge of querying the
  proper DNS resolvers and there will no longer be any fight over
  configuration files such as /etc/resolv.conf.

  In this release, pushed DNS configurations will be handled quite
  similar to how DNS queries has been handled before.  The DNS settings
  pushed by the VPN server will typically take precedence, but
  systemd-resolved may query other servers on other interfaces as well.
  That said, if the VPN server pushes "dhcp-options DOMAIN ....", hosts
  under that domain will in this case only be queried via the VPN tunnel
  alone.  You may call this a partial DNS-split.

  In coming releases, we will evaluate further possibilities to configure
  how DNS requests would be handled by systemd-resolved.  This could
  include modes such as full split (only query for pushed DOMAIN via the
  DNS server provided by the VPN) or exclusive VPN (DNS queries should
  only go via the VPN tunnel).

  This systemd-resolved integration requires at least CentOS 8,
  Fedora 31, 32 or Rawhide, Red Hat Enterprise 8 or Ubuntu 20.04.  Other
  distributions may work as long as it uses systemd v243 or newer.

  To enable systemd-resolved, fully ensure that systemd-resolved is
  properly configured and activated on your system.  Currently only
  Ubuntu 20.04 does that somewhat out-of-the-box (there might be some
  additional changes to nsswitch.conf is required for optimal
  performance).  Please read the available systemd-resolved
  documentation for your Linux distribution.

  Once systemd-resolved is enabled and activated, run this command
  as root before starting any VPN tunnels:

     # openvpn3-admin netcfg-service --config-set systemd-resolved 1

  and wait until the openvpn3-service-netcfg has restarted.  With
  the log-level set to 5 or higher in netcfg-service, the log file will
  include this log line:

      Network Configuration VERB2: systemd-resolved DNS configuration backend

* Feature: openvpn3 log with --config will now wait for a not-started session

  When starting the end-user session logging, prior versions required the
  VPN session to already be running before a log client could be attached.

  With this release, if the session has not already been started, the
  openvpn3 log command will wait until it sees the appropriate VPN session
  has started and will attach to it instantly.  This allows to grab the
  first log lines of a starting VPN sessions for an end-user without
  other ways of accessing OpenVPN logs.

* Improvement: openvpn3 log sanitizes new line characters better

  The log output of openvpn3 log could contain a lot of additional blank
  lines.  These has been removed and indenting has been added for multi-
  line log events to make the log output more readable.

* Improvement: openvpn3-as indicates tls-crypt-v2 support to AS

  When downloading a VPN configuration profile from an OpenVPN Access
  Server, the openvpn3-as script will now signal to the server it is
  capable of handling configurations with --tls-crypt-v2.

* Bugfix: Improper session clean-up on server triggered disconnect

  If the VPN server forcefully disconnected an already established
  session, the Session Manager would not properly track this which lead
  to lacking session details with openvpn3 sessions-list.

  This has now been resolved by properly catching a server triggered
  disconnect and properly shutting down the openvpn3-service-client
  process responsible for the session, which will properly update
  the session manager about the disconnected session.

* Bugfix: AWS integration failed to propagate routes in some AWS regions

  The openvpn3-service-aws process could in some AWS regions fail to push
  routes to the AWS-VPC, leading to a process crash.  Both the crash and
  the AWS service has been extended with more region CA certificates used
  for the request validations.  In addition it will now pick up more of
  system CA certificate file locations than before.

* Bugfix: openvpn3 command could throw unfriendly error messages

  If a user was not granted access to a running VPN session, attempting
  to access this session via openvpn3 session-manage would lead to a
  openvpn:BusProxyAccessDeniedException exception error.

  This has been improved and will now instead show "Access Denied" in
  a more user-friendly way to the user.

* Bugfix: openvpn3-service-netcfg would crash without --resolve-conf

  If the openvpn3-service-netcfg would be started without the
  --resolv-conf configuration, it would crash if the VPN server pushed a
  DNS configuration.  This has been properly resolved and it is now
  possible to start the service completely without any DNS configuration
  support.

* Bugfix: openvpn3-service-client crash on some hosts with log redirection

  If the openvpn3-service-backendstart was given the
  ' --client-log-file stdout:', this would tell it to start the
  openvpn3-service-client process with '--log-file stdout:'.  This would
  on some hosts cause a program crash instead.  This has been resolved.

* Bugfix: openvpn3-service-sessionmgr would crash on illegal log-levels

  If a user attempted to change the log-level in the D-Bus session object
  the user is granted access to with an invalid value, it would lead to a
  crash of the openvpn3-service-sessionmgr process.  This would make it
  impossible to further manage already running VPN sessions without root
  privileges.

  This has been resolved to properly rejecting invalid values as an error
  back to the calling user instead of treating it as a fatal failure.

The complete overview of all changes:

Arne Schwabe (5):
      Announce tls-crypt-v2 support on AS configuration import
      Compile fix for ILP32 platforms like Raspberry Pi
      contrib/cmake: Remove extra ${OPENVPN3_LINUX_ROOT} from source files
      contrib/cmake: Make CMakeLists.txt work with config.h from configure
      contrib: Improve Jenkinsfile with stage and archiving test-suite.log

David Sommerseth (81):
      vendor: Update ASIO to 1.16.0
      core: Update to latest core git master
      cli/session: Fix incorrect command reference in throws
      sessionmgr/proxy: Add TunInterfaceException
      cli/session: Properly catch DBusException
      log: Remove trailing newlines in LogEvents
      ovpn3cli/log: Indent multiline log lines
      ovpn3cli/log: Add --interface option
      sessionmgr: Fix crash with incorrect log level
      sessionmgr: Add SessionManager::Event class
      sessionmgr: Implement sending SessionManagerEvent signals
      ovpn3cli/log: Improve the complete session log setup logic
      client: Fix failing --log-file feature
      docs: Add missing dependency in Debian/Ubuntu instructions
      netcfg: Avoid segfault when configured without --resolv-conf
      client: New debug option in openvpn3-service-backendstart
      common/build: Rework version information handling
      build: Clean up after version metadata rework
      build: Fix 'make install'
      dbus: Clarify a few StatusMinor states in the comment
      client: Process CLIENT_HALT event
      build: Fix 'make uninstall' for the SELinux policy
      client: Fix incorrect environment array handling
      netcfg: Fix a typo in the AddNameServers exceptions
      netcfgmgr/dns: Add indication when to apply DNS settings
      netcfgmgr/dns: Extend ResolverSettings object store tun device name
      netcfgmgr/dns: Apply resolver settings according to the backend
      dbus/glib: Extend checkParams() to optionally ignore children count
      dbus/proxy: Migrate to better value extraction in GetProperty() and CheckServiceAvail()
      policy: Added polkit policy for systemd-resolved interaction
      netcfg: Add proxy code for systemd-resolved
      netcfg: Add ResolverBackendInterface implementation for systemd-resolved
      netcfg: Complete the systemd-resolved support
      netcfg: systemd-resolved - Make all global queries also go via VPN
      policy: Add support for legacy polkit PKLA files
      man: Minor cleanups and improvements
      common/cmdargparser: Refactor ParsedArgs passing to be a smart pointer
      common/ParsedArgs: New methods to retrieve the last set option values
      common: Extend ParsedArgs with CheckExclusiveOptions() method
      common: Extend command parser with ParsedArgsConfig class
      man: Make template out of a few of the man pages
      netcfg: Extend service with --state-dir
      common: Extend ParsedArgs::Present() with a std::vector variant
      common: Move command line parsing related exception
      common: Implement a simple and generic JSON config parser
      common: Extend ParsedArgs with a simpler config file parser approach
      netcfg: Implement the new config file parser
      common: Remove the no longer used ParsedArgsConfig implementation
      netcfg: Extend manager object with a config_file property
      cli/netcfg-service: Extend with --config-show, --config-set and --config-unset
      netcfg: Fix incorrect default log-level
      cli/netcfg: Add --config-file-override to netcfg-service
      cli/netcfg: Make netcfg-service command more robust
      common: Extend Configuration::File parser with option groups
      cli/netcfg: Extend netcfg-service with CheckExclusiveOptions() check
      common: Extend Configuration::File with GetRelatedExclusiveOptions()
      common: Extend ParsedArgs::ImportConfigFile() with exclusive check
      netcfg: Allow configuration file to override command line arguments
      python: Add support for --tls-cipher
      cli/log: Extend shell auto-completion with --config
      cli/log: Fix typ0 in AttachByConfig() method name
      deps: Update ASIO to 1.17.0
      deps: Update OpenVPN 3 Core library to latest git master
      Update .gitignore - it was missing openvpn3.pp.bz2
      dbus: Add a couple of missing header files
      cli: Handle DBusProxyAccessDeniedException events better
      netcfg/resolved: Better exception handling when communicating with systemd-resolved
      python/shell: Add bash-completion for openvpn2
      build: Enable installing bash-completion scripts
      docs: Update README.md with missing googletest mention
      common: Fix Configuration::File::Save() not writing empty files
      build/aws: Simplify the autotools setup for addons/aws
      build: Fix missing uninstall of bash-completion scripts
      build/aws: Fix failing out-of-tree builds
      build/aws: Fix incorrect distribution of D-Bus policy and systemd unit files
      contrib/CI: Enable the AWS addon in Jenkins builds
      common: Configuration::File::Load() should accept empty files
      netcfg/resolved: Revert tun interface DNS settings on removal
      core: Update to latest OpenVPN 3 Core library
      cli/admin: netcfg-service could exit with an empty error
      docs: Update README.md

Lev Stipakov (5):
      client: properly handle client termination
      contrib: Add missing files in CMakelists.txt
      addons/aws: Improve error handling
      addons/aws: AWS certificates to verify instance identity
      addons/aws: provide AWS certs directory to core library