Tutorial: Verify and Troubleshoot OpenVPN DCO in Access Server
Install and turn on OpenVPN DCO to enhance Access Server's performance. This module offloads the data channel to the Linux kernel.
Overview
OpenVPN Data Channel Offload (DCO) improves VPN performance by moving data-channel packet processing from the user space into the Linux kernel. This reduces CPU overhead and can provide:
Higher throughput.
Lower latency.
Improved scalability under load.
Better performance for high-bandwidth deployments.
In Access Server 3.x, OpenVPN DCO is installed and enabled by default when using the current installation or upgrade script. This tutorial explains how to verify that DCO is running and what to do if it's not.
Prerequisites
To deploy and use OpenVPN DCO on Access Server, you must meet the following requirements.
Supported Access Server version:
Access Server 3.x (DCO installs automatically using the current install/upgrade script)
Supported platforms:
Debian 12
Debian 13
Red Hat Enterprise Linux 8
Red Hat Enterprise Linux 9
Red Hat Enterprise Linux 10
Ubuntu 22.04 LTS (x86_64 and ARM64 architectures)
Ubuntu 24.04 LTS (x86_64 and ARM64 architectures)
Compatible clients:
OpenVPN3-based clients such as OpenVPN Connect v3 and OpenVPN3 Linux client
OpenVPN2-based clients that use OpenVPN 2.4 or newer (OpenVPN 2.3 and older are not supported)
Tip
The client does not need to use DCO to connect to a server that uses DCO. With only one side doing DCO, there is already a performance benefit. However, it is best if both sides use it. The following clients can utilize DCO on the client side, although it must be enabled separately within the client.
Clients with DCO capability:
OpenVPN3 Connect for Windows (as of 3.4.0).
OpenVPN3 Linux client (check with the community documentation for the supported Linux operating systems).
OpenVPN 2.6.0 or newer (check with the community documentation for the supported Linux operating systems).
OpenVPN GUI community client for Windows (refer to community downloads).
Step 1: Verify OpenVPN DCO is in use
From the Admin Web UI:
Sign in to the Admin Web UI.
Click Status.
On the Overview tab, locate Server Details.
Confirm that DCO is shown as enabled.
If DCO is enabled, no further action is required.
Click VPN Server.
The Network Settings tab is displayed.
Click the Data Channel Offload tab.
The DCO status displays with additional details.
From the CLI:
You can also confirm DCO availability and usage from the command line.
Connect to your server's console and obtain root privileges.
Check whether the DCO module is available and recognized by Access Server:
sacli support | grep 'ovpn-dco availability'
Verify that DCO is actively in use by the OpenVPN daemon:
ip -details link show
Look for interfaces that start with
as0.If DCO is active, you'll see
ovpn-dcoreferenced in the output.
Step 2: Check VPN tunnel MTU (optional)
When using DCO, we recommend setting the VPN tunnel MTU to 1420 bytes:
In the Admin Web UI, click VPN Server.
The Network Settings tab is displayed.
Click the Advanced tab.
Set the MTU (Maximum Transmission Unit) value to 1420.
Click Save and Restart.
Note
The minimum allowable MTU is 576. The maximum is 65536.
Troubleshooting
If DCO isn't enabled or not in use, check the common issues below. For more troubleshooting tips, refer to Troubleshooting Tips for OpenVPN DCO.
DCO installation after upgrading Access Server requires a full system reboot.
Run:
reboot
After the system comes back online, verify DCO again from the Admin Web UI Status page.
Ensure your system is running a supported kernel.
Run:
uname -a
Verify that:
You are running a supported Linux distribution.
You're not using a custom-compiled kernel (not supported for DCO).
If Secure Boot is enabled, the DCO kernel module may fail to load unless properly signed.
Run:
mokutil --sb-state
Output when Secure Boot is enabled:
root@openvpnas:~# mokutil --sb-state SecureBoot enabled
If Secure Boot is enabled, you must either:
Sign the DCO module for Secure Boot validation, or
Disable Secure Boot.
Tip
The situation will improve in the future as DCO is under review for inclusion in the Linux kernel itself. Once it's part of the kernel, a separate loadable kernel module won't be required.
OpenVPN DCO uses DKMS (dynamic kernel module support) to build and install the kernel module.
Run:
dkms status
The output shows whether the
ovpn-dcomodule is added, built, or installed for your current kernel.Example output:
ovpn-dco/0.2.20251017-2+noble, 6.8.0-101-generic, x86_64: installed
If the module isn't listed as installed for your running kernel, DCO won't function.
Access Server uses DCO-compatible data ciphers by default. However, if legacy ciphers are configured, DCO will fail.
OpenVPN DCO doesn't support legacy CBC-type ciphers. It only supports modern AEAD ciphers such as:
AES-256-GCMAES-128-GCMCHACHA20-POLY1305
If a legacy cipher is configured, you may see the following warning:
"[Warning] OpenVPN data-channel offloading was requested but failed to activate: OpenVPN data-channel offloading was requested but failed to activate. This typically happens if there is a configuration option that is incompatible with DCO or if the DCO kernel module could not be loaded. (dco_not_active)"
Check both data cipher and legacy cipher settings:
sacli ConfigQuery | egrep "vpn.server.data_ciphers|vpn.server.cipher"
If the output includes CBC-type ciphers (such as
AES-256-CBCor Blowfish), DCO won't be enabled.To use DCO, ensure both server and clients are configured to use AEAD ciphers only. Refer to the following tutorial for instructions on updating encryption settings in Access Server:
Ensure you select DCO-supported AEAD ciphers mentioned here.
Important details
Access Server uses
AES-256-CBCby default, with automatic negotiation toAES-256-GCMwhen supported.OpenVPN 2.4 and newer clients default to
AES-256-CBCwith automatic upgrade toAES-256-GCM.OpenVPN3-based client ssupport AEAD ciphers and are compatible with DCO.
OpenVPN 2.3 and older clients require CBC-type ciphers and are incompatible with DCO.
If you must support OpenVPN 2.3 or older clients, you may need to retain CBC-type cipher support, which prevents DCO from being used.