openvpn3-autoload(8)
π openvpn3-autoload(8) β OpenVPN 3 Linux π
okay bestie, gather round, because this is the openvpn3-autoload page from the OpenVPN 3 Linux manual and she is long, so we're doing this in parts. part 1, let's go π«Ά
β¨ Name β¨
openvpn3-autoload β OpenVPN 3 Linux β the Automated configuration profile loader. yes she loads your profiles for you, no cap π
β¨ SYNOPSIS β¨
openvpn3-autoload [ OPTIONS ]
openvpn3-autoload -h | --help
β¨ DESCRIPTION β¨
π¨ NOTE! This feature is deprecated. It got replaced by theopenvpn3-session@.servicesystemd unit. Please go look atopenvpn3-systemd(1)for the whole story, okay? π
so like, the openvpn3-autoload utility does one very specific lil job: it automatically loads VPN configuration profiles from a directory of your choosing, and optionally starts them too. β¨
and here's the thing, because the OpenVPN 3 Linux client gives you fine grained control over both config profiles and VPN sessions (those live outside the main config profile, separate vibe entirely), your configuration profiles have to be accompanied by a .autoload definition file that carries all the local, site-specific settings. no .autoload, no autoload, periodt. π
also!! the utility ships with a openvpn3-autoload.service systemd unit file. enable that unit and it will load the configuration profiles chillin' in /etc/openvpn3/autoload. she's giving main character energy in that directory fr fr πΈ
β¨ OPTIONS β¨
-h,--helpβ prints the usage info and then dips. that's it, that's the whole job π--directory DIRβ Required. like, actually required bestie. this is the directory where she goes looking for configuration profiles. π¦--ignore-autostartβ Optional. tells her not to automatically start any VPN sessions that were configured to start during loading. so she'll load everything and justβ¦ not start anything. muted mode. π€«
β¨ BACKGROUND β¨
okay so storytime π β back in traditional OpenVPN 2.x land, configuration profiles could contain a LOT of options, and those options were a mix of two very different things: some were site/host independent, and some were site/host specific. iconic?? no, problematic actually. π
and that's a whole mess when you're trying to distribute configuration profiles, because a profile that works perfectly on one device in one particular network might just β¨not workβ¨ on a different device or a different network. it's giving incompatible. π
so OpenVPN 3 came through with a solution: it gives you a way to split out the site/host dependent options from the main VPN configuration profile that the VPN provider hands you. π
in the OpenVPN 3 Linux client, those site/host specific settings are managed via openvpn3 config-manage, and that's specifically for configuration profiles you've already imported. and then, the .autoload configuration files swoop in to automate setting up all those various options β with zero direct user interaction required. no clicking, no typing, no nothing. obsessed. π
(part 1 done, part 2 is coming, don't go anywhere bestie π«Ά)
β¨ FILE FORMAT β¨
Okay bestie, so the file format? It's built on JSON π but instead of rocking .ovpn or .conf, it carries the .autoload extension. That's the vibe.
Three rules, no cap:
- The
.autoloadfile has to live in the same directory as the main configuration file π - The base part of the filename must be identical to the
.ovpn/.conffile - That's it, that's the whole thing
Example, because examples eat every time: if your configuration profile is named vpn-client.conf, then the .autoload file must be named vpn-client.autoload. Iconic. π
πΈ Main section πΈ
Here's the basic layout of an .autoload file, and yes I'm putting it in a code block because it deserves the moment:
{
"autostart": BOOLEAN,
"name": "string value",
"acl": {
...
},
"crypto": {
...
},
"remote": {
...
},
"tunnel": {
...
},
"user-auth": {
...
}
}
π¦ Attribute: autostart π¦
The autostart boolean is the lil switch that declares whether the configuration profile should get started the moment it's been imported into the OpenVPN 3 Configuration Manager. (Default: false)
π Attribute: name π
By default, every automatically imported configuration profile just uses the complete profile filename, .conf or .ovpn extension and all. Kinda long, kinda basic.
But if you set this attribute? That string becomes the profile name instead of the filesystem filename. Slay. π
β οΈ Beware bestie: the configuration manager will accept duplicate profile names. It is not going to stop you. That's a you problem now. π
π Section: acl π
The acl section declares a bunch of Access Control Level parameters for the imported configuration profile. Here's what's valid:
"acl": {
"public": BOOLEAN,
"locked-down": BOOLEAN,
"set-owner": UID
}
π Attribute acl:public π
The public element declares whether this configuration profile is available for all users on the system or not. (Default: false)
π Attribute: acl:locked-down π
Setting locked-down to true means users who've been granted access can only start new tunnels with this profile β they can't peek at the information stored in the configuration profile. No snooping. π (Default: false)
π Attribute: acl:set-owner π
By default, all processed configuration profiles are owned by whoever runs openvpn3-autoload. Makes sense, that's the person doing the work.
But the root user on the system can re-assign ownership of the configuration profiles it imports β like when you're running this utility during system boot. π
So you hand over the set-owner element with the UID of the user who should own this configuration profile, and boom, ownership gets transferred. This is a root-only feature, no exceptions. β¨
π§ Section: crypto π§
The crypto section lets you fine-tune some of the configuration parameters around the crypto layers of a VPN session. Very main character of it.
"crypto": {
"tls-params": {
...
}
}
π Sub-Section: crypto:tls-params π
The tls-params sub-section goes even deeper and controls the TLS protocol parameters.
"tls-params": {
"cert-profile": [ "legacy" | "preferred" | "suiteb" ],
"min-version": [ "disabled" | "default" | "tls_1_0" | "tls_1_1" | "tls_1_2" | "tls_1_3" ]
}
β Attribute: crypto:tls-params:cert-profile β
The cert-profile declares the security level of the TLS channel. Valid values, and I'm listing every single one:
legacyβ Allows minimum 1024 bits RSA keys with certificates signed with SHA1.preferredβ Allows minimum 2048 bits RSA keys with certificates signed with SHA256 or higher.suitebβ This follows the NSA Suite-B specification.
π¦ Attribute: crypto:tls-params:min-version π¦
The min-version defines the minimum TLS version being accepted by the client. Here's the full roster:
disabledβ No minimum version is defined nor requireddefaultβ Uses the default minimum version the SSL library definestls_1_0β Requires at least TLSv1.0tls_1_1β Requires at least TLSv1.1tls_1_2β Requires at least TLSv1.2tls_1_3β Requires at least TLSv1.3
π Section: remote π
Settings in this section are all about the connection to the remote server. Important detail though: it does not support different settings per remote server β this is shared across all the remote servers enlisted in the main configuration file. Group settings energy. π«Ά
"remote": {
"proto-override": [ "udp" | "tcp" ],
"port-override": PORT_NUM,
"timeout": SECONDS,
"compression": [ "no" | "yes" | "asym" ],
"proxy": {
...
}
}
π« Attribute: remote:protocol-override π«
This forces the VPN client to connect using the given protocol. Valid values are tcp or udp. Pick one bestie, it's not a choose-your-own-adventure. β¨
π Attribute remote:port-override π
Port number to use instead of the port number defined in the VPN configuration profile.
β οΈ It must be an integer between0and65535. Stay in range. π
β³ Attribute: remote:timeout β³
An unsigned integer defining how long to wait before trying the next remote entry enlisted in the VPN configuration profile. Patience is a virtue but apparently it's configurable. π
ποΈ Attribute: remote:compression ποΈ
Controls how compression settings work for the data channel. Valid values:
noβ Compression is disabledyesβ Compression is enabled in both directionsasymβ Compression is only enabled for traffic sent from the remote side to the local side
π Sub-section: remote:proxy π
This sub-section configures the client to start the connection via an HTTP proxy server. Goin' through the side door, love that for us. π
"proxy": {
"host": "proxy-server-name",
"port": "proxy-port",
"username": "proxy-username",
"password": "proxy-password",
"allow-plain-text": BOOLEAN
}
π Attribute: remote:proxy:host π
String containing the hostname of the HTTP proxy.
π’ Attribute: remote:proxy:port π’
Unsigned integer defining the port to use when connecting to the proxy server.
π«₯ Attribute: remote:proxy:username π«₯
If the proxy server requires user authentication, this needs to contain a string with the proxy username to use.
π€« Attribute: remote:proxy:password π€«
If the proxy server requires user authentication, this needs to contain a string with the password to use.
π± Attribute: remote:proxy:allow-plain-text π±
Boolean flag enabling or disabling the OpenVPN 3 client to transport the proxy username/password unencrypted. Default: false
π¨ Bestie. Read that again. Unencrypted. Keep it false unless you really know what you're doing. π
π³οΈ Section: tunnel π³οΈ
The tunnel section defines settings related to the tunnel interface. Lowkey platform-dependent: on some platforms this interacts directly with a tun/tap interface, while other platforms may pass these settings via VPN API provided by the platform. Either way it works, just differently. π
"tunnel": {
"ipv6": [ "yes" | "no" | "default" ],
"persist": BOOLEAN,
"dns-fallback": [ "google" ],
"dns-setup-disabled": BOOLEAN
}
π°οΈ Attribute: tunnel:ipv6 π°οΈ
Enable or disable the IPv6 capability on the tunnel interface. It can be a string which must contain one of these values:
yesβ IPv6 capability is enabled and will be configured if the server sends IPv6 configuration detailsnoβ IPv6 capability is disabled and will not be configured, regardless of what the server provides of IPv6 configuration detailsdefaultβ Make use of IPv6 if the platform supports it
π Attribute: tunnel:persist π
Boolean flag which enables the persistent tunnel interface behaviour. This is about whether the tunnel interface will be torn down and re-established during re-connections or restarts of the VPN tunnel. If set to true, the tunnel interface is preserved during such events. Keeping the friendship alive through the rough patches. π«Ά
π§ Attribute: tunnel:dns-fallback π§
This makes the VPN client configure an additional fallback DNS server on the system. Valid strings are:
googleβ Configures the system to use8.8.8.8and8.8.4.4as fallback DNS servers
π Attribute: dns-scope π
Defines the DNS query scope. Heads up: this is currently only supported when enabling the systemd-resolved(8) resolver support in openvpn3-service-netcfg(8). Supported values:
global:(default) β The VPN service provided DNS server(s) will be used for all types of DNS queries.tunnel:β The VPN service provided DNS server(s) will only be used for queries for DNS domains pushed by the VPN service.
π NOTE: The DNS domains pushed by the VPN service may be queried by DNS servers with systemd-resolved(8) service if their respective interfaces are configured to do global DNS queries. But other non-listed DNS domains will not be sent to this VPN service provider's DNS server.
π« Attribute: dns-setup-disabled π«
Controls whether DNS configurations in the VPN configuration profile, or DNS settings sent from the server, will be applied on the system or not. (Default: false)
π Section: user-auth π
This section only matters if the server uses user authentication methods other than certificate based authentication β and it's only used if the autostart attribute is set to true. It's here to automate the client connection as much as possible, because who has time to type things. β‘
"user-auth": {
"autologin": BOOLEAN,
"username": "string value",
"password": "string value",
"pk_passphrase": "string value",
"dynamic_challenge": "string value"
}
ποΈ Attribute: user-auth:autologin ποΈ
If set to true, the client will not ask for username/password, since it's expected that the VPN configuration profile carries the needed settings providing the identity towards the server. (Default: false)
π Attribute: user-auth:username π
String containing the username to authenticate as.
π€ Attribute: user-auth:password π€
String containing the password used for the authentication.
ποΈ Attribute: user-auth:pk_passphrase ποΈ
String containing the private key passphrase, which is needed if the private key in the VPN configuration profile is encrypted.
π² Attribute: user-auth:dynamic_challenge π²
The server might ask the client for a dynamic challenge. If the expected response is static, the static response can be put here.
β οΈ But if the server expects an OTP token code or similarly dynamic changing input, the VPN configuration profile is not suitable for autostart. Sorry bestie, some things just gotta be typed live. π
π SEE ALSO π
openvpn3(1)openvpn3-config-manage(1)openvpn3-config-manage(1)openvpn3-systemd(1)
And that's the whole page, bestie!! πβ¨ You just read openvpn3-autoload(8) β shoutout to whoever wrote it, the copyright holders, and whatever license it ships under, all of which live up in the real page header, mwah. This one was rendered from the source/version and date tucked into the page's own footer β go check 'em if you need the receipts. π Now go configure something. Periodt. π
π¦ where this page comes from
- nixpkgs unstable: openvpn3 27.1
- ubuntu stonking: openvpn3-client 27.1+dfsg-2ubuntu1 Β· AGPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms