allow-pull-fqdn | Allow client to pull DNS names from server (rather than being limited to IP address) for –ifconfig, –route, and –route-gateway. |
comp-lzo [mode] | Use fast LZO compression – may add up to 1 byte per packet for incompressible data. mode may be “yes”, “no”, or “adaptive” (default). |
In a server mode setup, it is possible to selectively turn compression on or off for individual clients. |
First, make sure the client-side config file enables selective compression by having at least one –comp-lzo directive, such as –comp-lzo no. This will turn off compression by default, but allow a future directive push from the server to dynamically change the on/off/adaptive setting. |
Next in a –client-config-dir file, specify the compression setting for the client, for example: |
comp-lzo yes |
push “comp-lzo yes” |
The first line sets the comp-lzo setting for the server side of the link, the second sets the client side. |
fast-io | (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to poll/epoll/select prior to the write operation. |
The purpose of such a call would normally be to block until the device or socket is ready to accept the write. Such blocking is unnecessary on some platforms which don't support write blocking on UDP sockets or TUN/TAP devices. In such cases, one can optimize the event loop by avoiding the poll/epoll/select call, improving CPU efficiency by 5% to 10%. |
This option can only be used on non-Windows systems, when –proto udp is specified, and when –shaper is NOT specified. |
fragment max | Enable internal datagram fragmentation so that no UDP datagrams are sent which are larger than max bytes. |
The max parameter is interpreted in the same way as the –link-mtu parameter, i.e. the UDP packet size after encapsulation overhead has been added in, but not including the UDP header itself. |
The –fragment option only makes sense when you are using the UDP protocol ( –proto udp ). |
–fragment adds 4 bytes of overhead per datagram. |
See the –mssfix option below for an important related option to –fragment. |
It should also be noted that this option is not meant to replace UDP fragmentation at the IP stack level. It is only meant as a last resort when path MTU discovery is broken. Using this option is less efficient than fixing path MTU discovery for your IP link and using native IP fragmentation instead. |
mssfix max | Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed max bytes. The default value is 1450. |
The max parameter is interpreted in the same way as the –link-mtu parameter, i.e. the UDP packet size after encapsulation overhead has been added in, but not including the UDP header itself. |
Resulting packet would be at most 28 bytes larger for IPv4 and 48 bytes for IPv6 (20/40 bytes for IP header and 8 bytes for UDP header). Default value of 1450 allows IPv4 packets to be transmitted over a link with MTU 1473 or higher without IP level fragmentation. |
The –mssfix option only makes sense when you are using the UDP protocol for OpenVPN peer-to-peer communication, i.e. –proto udp. |
–mssfix and –fragment can be ideally used together, where –mssfix will try to keep TCP from needing packet fragmentation in the first place, and if big packets come through anyhow (from protocols other than TCP), –fragment will internally fragment them. |
Both –fragment and –mssfix are designed to work around cases where Path MTU discovery is broken on the network path between OpenVPN peers. |
The usual symptom of such a breakdown is an OpenVPN connection which successfully starts, but then stalls during active usage. |
If –fragment and –mssfix are used together, –mssfix will take its default max parameter from the –fragment max option. |
Therefore, one could lower the maximum UDP packet size to 1300 (a good first try for solving MTU-related connection problems) with the following options: –tun-mtu 1500 –fragment 1300 –mssfix |
persist-key | Don't re-read key files across SIGUSR1 or –ping-restart. |
This option can be combined with –user nobody to allow restarts triggered by the SIGUSR1 signal. Normally if you drop root privileges in OpenVPN, the daemon cannot be restarted since it will now be unable to re-read protected key files. |
This option solves the problem by persisting keys across SIGUSR1 resets, so they don't need to be re-read. |
persist-tun | Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1 or –ping-restart restarts. |
SIGUSR1 is a restart signal similar to SIGHUP, but which offers finer-grained control over reset options. |
rcvbuf size | Set the TCP/UDP socket receive buffer size. Defaults to operation system default. |
redirect-gateway flags… | Automatically execute routing commands to cause all outgoing IP traffic to be redirected over the VPN. This is a client-side option. |
This option performs three steps: |
(1) Create a static route for the –remote address which forwards to the pre-existing default gateway. This is done so that (3) will not create a routing loop. |
(2) Delete the default gateway route. |
(3) Set the new default gateway to be the VPN endpoint address (derived either from –route-gateway or the second parameter to –ifconfig when –dev tun is specified). |
When the tunnel is torn down, all of the above steps are reversed so that the original default route is restored. |
Option flags: |
local – Add the local flag if both OpenVPN servers are directly connected via a common subnet, such as with wireless. The local flag will cause step 1 above to be omitted. |
autolocal – Try to automatically determine whether to enable local flag above. |
def1 – Use this flag to override the default gateway by using 0.0.0.0/1 and 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of overriding but not wiping out the original default gateway. |
bypass-dhcp – Add a direct route to the DHCP server (if it is non-local) which bypasses the tunnel (Available on Windows clients, may not be available on non-Windows clients). |
bypass-dns – Add a direct route to the DNS server(s) (if they are non-local) which bypasses the tunnel (Available on Windows clients, may not be available on non-Windows clients). |
block-local – Block access to local LAN when the tunnel is active, except for the LAN gateway itself. This is accomplished by routing the local LAN (except for the LAN gateway address) into the tunnel. |
remote-random | Used to initially “scramble” the connection list. |
When multiple –remote address/ports are specified, or if connection profiles are being used, initially randomize the order of the list as a kind of basic load-balancing measure. |
route-delay [n] [w] | Delay n seconds (default=0) after connection establishment, before adding routes. |
If n is 0, routes will be added immediately upon connection establishment. If –route-delay is omitted, routes will be added immediately after TUN/TAP device open and –up script execution, before any –user or –group privilege downgrade (or –chroot execution.) |
This option is designed to be useful in scenarios where DHCP is used to set tap adapter addresses. The delay will give the DHCP handshake time to complete before routes are added. |
On Windows, –route-delay tries to be more intelligent by waiting w seconds (w=30 by default) for the TAP-Win32 adapter to come up before adding routes. |
route-gateway gw|'dhcp' | Specify a default gateway gw for use with –route. |
If dhcp is specified as the parameter, the gateway address will be extracted from a DHCP negotiation with the OpenVPN server-side LAN. |
route network/IP [netmask] [gateway] [metric] | Add route to routing table after connection is established. Multiple routes can be specified. Routes will be automatically torn down in reverse order prior to TUN/TAP device close. |
netmask default – 255.255.255.255 |
gateway default – taken from –route-gateway or the second parameter to –ifconfig when –dev tun is specified. |
metric default – taken from –route-metric otherwise 0. |
The default can be specified by leaving an option blank or setting it to “default”. |
The network and gateway parameters can also be specified as a DNS or /etc/hosts file resolvable name, or as one of three special keywords: |
vpn_gateway – The remote VPN endpoint address (derived either from –route-gateway or the second parameter to –ifconfig when –dev tun is specified). |
net_gateway – The pre-existing IP default gateway, read from the routing table (not supported on all OSes). |
remote_host – The –remote address if OpenVPN is being run in client mode, and is undefined in server mode. |
route-nopull | When used with –client or –pull, accept options pushed by server EXCEPT for routes, block-outside-dns and dhcp options like DNS servers. |
When used on the client, this option effectively bars the server from adding routes to the client's routing table, however note that this option still allows the server to set the TCP/IP properties of the client's TUN/TAP interface. |
sndbuf size | Set the TCP/UDP socket send buffer size. Defaults to operation system default. |
tun-mtu n | Take the TUN device MTU to be n and derive the link MTU from it (default=1500). In most cases, you will probably want to leave this parameter set to its default value. |
The MTU (Maximum Transmission Units) is the maximum datagram size in bytes that can be sent unfragmented over a particular network path. OpenVPN requires that packets on the control or data channels be sent unfragmented. |
MTU problems often manifest themselves as connections which hang during periods of active usage. |
It's best to use the –fragment and/or –mssfix options to deal with MTU sizing issues. |
verb n | Set output verbosity to n (default=1). Each level shows all info from the previous levels. Level 3 is recommended if you want a good summary of what's happening without being swamped by output. |
0 – No output except fatal errors. |
1 to 4 – Normal usage range. |
5 – Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets. |
6 to 11 – Debug info range (see errlevel.h for additional information on debug levels). |