Provided by: ocserv_0.10.11-1build1_amd64 bug

NAME

       ocserv - OpenConnect VPN server

SYNOPSIS

       Openconnect  VPN  server  (ocserv)  is  a  VPN  server compatible with the openconnect VPN
       client. It follows the AnyConnect VPN protocol which is used by several CISCO routers.

DESCRIPTION

       This a standalone server that reads a configuration file (see below for more details), and
       waits for client connections. Log messages are redirected to daemon facility.

       The  server  maintains  two  connections/channels with the client. The main VPN channel is
       established over TCP, HTTP and TLS. This is the control channel as well as the backup data
       channel. After its establishment a UDP channel using DTLS is initiated which serves as the
       main data channel. If the UDP channel fails to establish or is temporarily unavailable the
       backup channel over TCP/TLS is being used.

       This  server  supports  multiple  authentication  methods,  including  PAM and certificate
       authentication. Authenticated users are assigned an unprivileged worker process and obtain
       a networking (tun) device and an IP from a configurable pool of addresses.

       Once authenticated, the server provides the client with an IP address and a list of routes
       that it may access. In order to allow high-speed transfers the server does not process  or
       filter  packets.  It is expected that the server has or will set up any required routes or
       firewall rules.

       It is possible  to  separate  users  into  groups,  which  are  either  present  on  their
       certificate,  or  presented  on  login  for  the  user to choose. That way a user may take
       advantage of the different settings that may apply per group.  See  the  comments  on  the
       configuration file for more information.

OPTIONS

       -f, --foreground
              Do not fork into background.

       -d number, --debug=number
              Enable  verbose network debugging information.  This option takes an integer number
              as its argument.  The value of number is constrained to being:
                  in the range  0 through 9999

       -c file, --config=file
              Configuration file for the server.

       -p file, --pid-file=file
              Specify pid file for the server.

       -h, --help
              Display usage information and exit.

       -!, --more-help
              Pass the extended usage information through a pager.

       -v [{v|c|n --version [{v|c|n}]}]
              Output version of program and exit.  The default mode is `v', a simple version.
              The `c' mode will print copyright information and `n' will print the full copyright
              notice.

AUTHENTICATION

       Users can be authenticated in multiple ways, which are explained in the following
       paragraphs. Connected users can be managed using the 'occtl' tool.

       Password authentication
       If your system supports Pluggable Authentication Modules (PAM), then ocserv will take
       advantage of it to password authenticate its users.  Otherwise a plain password file
       similar to the UNIX password file is also supported.  In that case the 'ocpasswd' tool can
       be used for its management.  Note that password authentication can be used in conjunction
       with certificate authentication.

       GSSAPI authentication
       ocserv will take advantage of the MIT Kerberos project GSSAPI libraries, and allow
       authentication using any method GSSAPI supports. That is, mainly, Kerberos authentication.
       That is often more useful to be combined with PAM or other password authentication methods
       so that a fallback mechanism can be used when GSSAPI fails (e.g., when the user doesn't
       already have a Kerberos ticket). The GSSAPI authentication is implemented using SPNEGO
       over HTTP (RFC4559).

       Public key (certificate) authentication
       Public key authentication allows the user to be authenticated by the possession of the
       private key that corresponds to a known to the server public key. That allows the usage of
       common smart cards for user authentication.

       In ocserv, a certificate authority (CA) is used to sign the client certificates. That
       certificate authority can be local, used only by the server to sign its user's known
       public keys which are then given to users in a form of certificates. That authority need
       also provide a CRL to allow the server to reject the revoked clients (see ca-cert, crl).

       In certificate authentication each client presents a certificate and signs data provided
       by the server, as part of TLS authentication, to prove his possession of the corresponding
       private key.  The certificate need also contain user identifying information, for example,
       the user ID of the client must be embedded in the certificate's Distinguished Name (DN),
       i.e., in the Common Name, or UID fields. For the server to read the name, the
       cert-user-oid configuration option must be set.

       The following examples demonstrate how to use certtool from GnuTLS to generate such CA.

       Generating the CA
           $ certtool --generate-privkey --outfile ca-key.pem
           $ cat << _EOF_ >ca.tmpl
           cn = "VPN CA"
           organization = "Big Corp"
           serial = 1
           expiration_days = -1
           ca
           signing_key
           cert_signing_key
           crl_signing_key
           _EOF_
           $ certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

       Generating a local server certificate
       The following example generates the server key and certificate pair. The key generated is
       an RSA one, but different types can be used by specifying the 'ecdsa' or 'dsa' options to
       certtool.
           $ certtool --generate-privkey --outfile server-key.pem
           $ cat << _EOF_ >server.tmpl
           cn = "VPN server"
           dns_name = "www.example.com"
           dns_name = "vpn1.example.com"
           organization = "MyCompany"
           expiration_days = -1
           signing_key
           encryption_key #only if the generated key is an RSA one
           tls_www_server
           _EOF_
           $ certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem

       From this point the clients need ca-cert.pem to be able to securely connect to the server.

       Note that it is a better practice to use two separate RSA keys, one with the signing_key
       option and another with the encryption_key.

       Generating an external CA-signed server certificate
           $ certtool --generate-privkey --outfile server-key.pem
           $ cat << _EOF_ >server.tmpl
           cn = "My server"
           dns_name = "www.example.com"
           organization = "MyCompany"
           expiration_days = -1
           signing_key
           encryption_key #only if the generated key is an RSA one
           tls_www_server
           _EOF_
           $ certtool --generate-request --load-privkey server-key.pem --template server.tmpl --outfile server-cert.csr

       At this point you need to provide the server-cert.csr to your CA, and they will send you
       the server certificate.

       Generating the client certificates
       Note that it is recommended to leave detailed personal information out of the certificate
       as it is sent in clear during TLS authentication. The following process generates a
       certificate and converts it to PKCS #12 that is protected by a PIN and most clients are
       able to import (the cipher arcfour is used in the example because although weak, it is
       supported by far more devices than AES).

           $ certtool --generate-privkey --outfile user-key.pem
           $ cat << _EOF_ >user.tmpl
           cn = "user"
           unit = "admins"
           expiration_days = 9999
           signing_key
           tls_www_client
           _EOF_
           $ certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem

           $ certtool --to-p12 --load-privkey user-key.pem --pkcs-cipher 3des-pkcs12 --load-certificate user-cert.pem --outfile user.p12 --outder

       Revoking a client certificate
       To revoke the previous client certificate use:
           $ cat << _EOF_ >crl.tmpl
           crl_next_update = 9999
           crl_number = 1
           _EOF_
           $ cat user-cert.pem >>revoked.pem
           $ certtool --generate-crl --load-ca-privkey ca-key.pem --load-ca-certificate ca.pem --load-certificate revoked.pem --template crl.tmpl --outfile crl.pem
       After that you may want to notify ocserv of the new CRL by using the HUP signal, or wait
       for it to reload it.

       When there are no revoked certificates an empty revocation list should be generated as
       follows.
           $ certtool --generate-crl --load-ca-privkey ca-key.pem --load-ca-certificate ca.pem --template crl.tmpl --outfile crl.pem

NETWORKING CONSIDERATIONS

       In certain setups, where a firewall may be blocking ICMP responses, setting the MSS of TCP
       connections to MTU will eliminate the "black hole" connection issues.  See
       http://lartc.org/howto/lartc.cookbook.mtu-mss.html for instructions to enable it on a
       Linux system.

IMPLEMENTATION NOTES

       Note that while this server utilizes privilege separation and all authentication occurs on
       the security module, this does not apply for TLS client certificate authentication. That
       is due to TLS protocol limitation.

FILES

       ocserv's configuration file format
       By default, if no other file is specified, ocserv looks for its configuration file at
       /etc/ocserv/ocserv.conf.  An example configuration file follows.

           # User authentication method. Could be set multiple times and in
           # that case all should succeed. To enable multiple methods use
           # multiple auth directives. Available options: certificate,
           # plain, pam, radius, gssapi.
           #
           # Note that authentication methods cannot be changed with reload.

           # certificate:
           #  This indicates that all connecting users must present a certificate.
           #
           # pam[gid-min=1000]:
           #  This enabled PAM authentication of the user. The gid-min option is used
           # by auto-select-group option, in order to select the minimum valid group ID.
           #
           # plain[passwd=/etc/ocserv/ocpasswd,otp=/etc/ocserv/users.otp]
           #  The plain option requires specifying a password file which contains
           # entries of the following format.
           # "username:groupname1,groupname2:encoded-password"
           # One entry must be listed per line, and 'ocpasswd' should be used
           # to generate password entries. The 'otp' suboption allows to specify
           # an oath password file to be used for one time passwords; the format of
           # the file is described in https://code.google.com/p/mod-authn-otp/wiki/UsersFile
           #
           # radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true,nas-identifier=name]:
           #  The radius option requires specifying freeradius-client configuration
           # file. If the groupconfig option is set, then config-per-user will be overriden,
           # and all configuration will be read from radius. That also includes the
           # Acct-Interim-Interval, and Session-Timeout values.
           #
           # The supported atributes for radius configuration are:
           # Group-Name, Framed-IPv6-Address, Framed-IPv6-Prefix, DNS-Server-IPv6-Address,
           # Framed-IP-Address, Framed-IP-Netmask, MS-Primary-DNS-Server, MS-Secondary-DNS-Server,
           # Acct-Interim-Interval.
           #
           # gssapi[keytab=/etc/key.tab,require-local-user-map=false,tgt-freshness-time=900,gid-min=1000]
           #  The gssapi option allows to use authentication methods supported by GSSAPI,
           # such as Kerberos tickets with ocserv. It should be best used as an alternative
           # to PAM (i.e., have pam in auth and gssapi in enable-auth), to allow users with
           # tickets and without tickets to login. The default value for require-local-user-map
           # is true. The 'tgt-freshness-time' if set, it would require the TGT tickets presented
           # to have been issued within the provided number of seconds. That option is used to
           # restrict logins even if the KDC provides long time TGT tickets.
           # The gid-min option is used by auto-select-group option, in order to select the minimum
           # valid group ID.

           #auth = "certificate"
           #auth = "pam"
           #auth = "pam[gid-min=1000]"
           #auth = "plain[passwd=/etc/ocserv/ocpasswd]"
           #auth = "radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"

           # Specify alternative authentication methods that are sufficient
           # for authentication. That is, if set, any of the methods enabled
           # will be sufficient to login.
           #enable-auth = "certificate"
           #enable-auth = "gssapi"
           #enable-auth = "gssapi[keytab=/etc/key.tab,require-local-user-map=true,tgt-freshness-time=900]"

           # Accounting methods available:
           # radius: can be combined with any authentication method, it provides
           #      radius accounting to available users (see also stats-report-time).
           #
           # pam: can be combined with any authentication method, it provides
           #      a validation of the connecting user's name using PAM. It is
           #      superfluous to use this method when authentication is already
           #      PAM.
           #
           # Only one accounting method can be specified.
           #acct = "radius[config=/etc/radiusclient/radiusclient.conf]"

           # Use listen-host to limit to specific IPs or to the IPs of a provided
           # hostname.
           #listen-host = [IP|HOSTNAME]

           # TCP and UDP port number
           tcp-port = 4443
           udp-port = 4443

           # Accept connections using a socket file. It accepts HTTP
           # connections (i.e., without SSL/TLS unlike its TCP counterpart),
           # and uses it as the primary channel. That option cannot be
           # combined with certificate authentication.
           #listen-clear-file = /var/run/ocserv-conn.socket

           # The user the worker processes will be run as. It should be
           # unique (no other services run as this user).
           run-as-user = nobody
           run-as-group = nogroup

           # The default server directory. Does not require any devices present.
           #chroot-dir = /path/to/chroot

           # socket file used for IPC with occtl. You only need to set that,
           # if you use more than a single servers.
           #occtl-socket-file = /var/run/occtl.socket

           # socket file used for server IPC (worker - sec-mod), will be appended with .PID
           # It must be accessible within the chroot environment (if any), so it is best
           # specified relatively to the chroot directory.
           socket-file = /var/run/ocserv-socket

           # The key and the certificates of the server
           # The key may be a file, or any URL supported by GnuTLS (e.g.,
           # tpmkey:uuid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx;storage=user
           # or pkcs11:object=my-vpn-key;object-type=private)
           #
           # The server-cert file may contain a single certificate, or
           # a sorted certificate chain.
           #
           # There may be multiple server-cert and server-key directives,
           # but each key should correspond to the preceding certificate.
           server-cert = /path/to/cert.pem
           server-key = /path/to/key.pem

           # Diffie-Hellman parameters. Only needed if you require support
           # for the DHE ciphersuites (by default this server supports ECDHE).
           # Can be generated using:
           # certtool --generate-dh-params --outfile /path/to/dh.pem
           #dh-params = /path/to/dh.pem

           # In case PKCS #11, TPM or encrypted keys are used the PINs should be available
           # in files. The srk-pin-file is applicable to TPM keys only, and is the
           # storage root key.
           #pin-file = /path/to/pin.txt
           #srk-pin-file = /path/to/srkpin.txt

           # The password or PIN needed to unlock the key in server-key file.
           # Only needed if the file is encrypted or a PKCS #11 object. This
           # is an alternative method to pin-file.
           #key-pin = 1234

           # The SRK PIN for TPM.
           # This is an alternative method to srk-pin-file.
           #srk-pin = 1234

           # The Certificate Authority that will be used to verify
           # client certificates (public keys) if certificate authentication
           # is set.
           #ca-cert = /path/to/ca.pem

           ### All configuration options below this line are reloaded on a SIGHUP.
           ### The options above, will remain unchanged.

           # Whether to enable seccomp/Linux namespaces worker isolation. That restricts the number of
           # system calls allowed to a worker process, in order to reduce damage from a
           # bug in the worker process. It is available on Linux systems at a performance cost.
           # The performance cost is roughly 2% overhead at transfer time (tested on a Linux 3.17.8).
           isolate-workers = true

           # A banner to be displayed on clients
           #banner = "Welcome"

           # Limit the number of clients. Unset or set to zero for unlimited.
           #max-clients = 1024
           max-clients = 16

           # Limit the number of identical clients (i.e., users connecting
           # multiple times). Unset or set to zero for unlimited.
           max-same-clients = 2

           # When the server has a dynamic DNS address (that may change),
           # should set that to true to ask the client to resolve again on
           # reconnects.
           #listen-host-is-dyndns = true

           # When the server receives connections from a proxy, like haproxy
           # which supports the proxy protocol, set this to obtain the correct
           # client addresses. The proxy protocol (v2) would then be expected in
           # the TCP or UNIX socket (not the UDP one).
           #listen-proxy-proto = true

           # Limit the number of client connections to one every X milliseconds
           # (X is the provided value). Set to zero for no limit.
           #rate-limit-ms = 100

           # Stats report time. The number of seconds after which each
           # worker process will report its usage statistics (number of
           # bytes transferred etc). This is useful when accounting like
           # radius is in use.
           #stats-report-time = 360

           # Keepalive in seconds
           keepalive = 32400

           # Dead peer detection in seconds.
           # Note that when the client is behind a NAT this value
           # needs to be short enough to prevent the NAT disassociating
           # his UDP session from the port number. Otherwise the client
           # could have his UDP connection stalled, for several minutes.
           dpd = 90

           # Dead peer detection for mobile clients. That needs to
           # be higher to prevent such clients being awaken too
           # often by the DPD messages, and save battery.
           # The mobile clients are distinguished from the header
           # 'X-AnyConnect-Identifier-DeviceType'.
           mobile-dpd = 1800

           # MTU discovery (DPD must be enabled)
           # If set, this forces all UDP packets to carry the don't fragment
           # (DF) bit.
           try-mtu-discovery = false

           # The revocation list of the certificates issued by the 'ca-cert' above.
           # See the manual to generate an empty CRL initially. The CRL will be reloaded
           # periodically when ocserv detects a change in the file. To force a reload use
           # SIGHUP.
           #crl = /path/to/crl.pem

           # If you have a certificate from a CA that provides an OCSP
           # service you may provide a fresh OCSP status response within
           # the TLS handshake. That will prevent the client from connecting
           # independently on the OCSP server.
           # You can update this response periodically using:
           # ocsptool --ask --load-cert=your_cert --load-issuer=your_ca --outfile response
           # Make sure that you replace the following file in an atomic way.
           #ocsp-response = /path/to/ocsp.der

           # The object identifier that will be used to read the user ID in the client
           # certificate. The object identifier should be part of the certificate's DN
           # Useful OIDs are:
           #  CN = 2.5.4.3, UID = 0.9.2342.19200300.100.1.1
           #cert-user-oid = 0.9.2342.19200300.100.1.1

           # The object identifier that will be used to read the user group in the
           # client  certificate. The object identifier should be part of the certificate's
           # DN. Useful OIDs are:
           #  OU (organizational unit) = 2.5.4.11
           #cert-group-oid = 2.5.4.11

           # Uncomment this to enable compression negotiation (LZS, LZ4).
           #compression = true

           # Set the minimum size under which a packet will not be compressed.
           # That is to allow low-latency for VoIP packets. The default size
           # is 256 bytes. Modify it if the clients typically use compression
           # as well of VoIP with codecs that exceed the default value.
           #no-compress-limit = 256

           # GnuTLS priority string; note that SSL 3.0 is disabled by default
           # as there are no openconnect (and possibly anyconnect clients) using
           # that protocol. The string below does not enforce perfect forward
           # secrecy, in order to be compatible with legacy clients.
           #
           # Note that the most performant ciphersuites are the moment are the ones
           # involving AES-GCM. These are very fast in x86 and x86-64 hardware, and
           # in addition require no padding, thus taking full advantage of the MTU.
           # For that to be taken advantage of, the openconnect client must be
           # used, and the server must be compiled against GnuTLS 3.2.7 or later.
           # Use "gnutls-cli --benchmark-tls-ciphers", to see the performance
           # difference with AES_128_CBC_SHA1 (the default for anyconnect clients)
           # in your system.

           tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"

           # More combinations in priority strings are available, check
           # http://gnutls.org/manual/html_node/Priority-Strings.html
           # E.g., the string below enforces perfect forward secrecy (PFS)
           # on the main channel.
           #tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128"

           # The time (in seconds) that a client is allowed to stay connected prior
           # to authentication
           auth-timeout = 40

           # The time (in seconds) that a client is allowed to stay idle (no traffic)
           # before being disconnected. Unset to disable.
           #idle-timeout = 1200

           # The time (in seconds) that a client is allowed to stay connected
           # Unset to disable.
           #session-timeout = 86400

           # The time (in seconds) that a mobile client is allowed to stay idle (no
           # traffic) before being disconnected. Unset to disable.
           #mobile-idle-timeout = 2400

           # The time (in seconds) that a client is not allowed to reconnect after
           # a failed authentication attempt.
           min-reauth-time = 120

           # Banning clients in ocserv works with a point system. IP addresses
           # that get a score over that configured number are banned for
           # min-reauth-time seconds. By default a wrong password attempt is 10 points,
           # a KKDCP POST is 1 point, and a connection is 1 point. Note that
           # due to difference processes being involved the count of points
           # will not be real-time precise.
           #
           # Score banning cannot be reliably used when receiving proxied connections
           # locally from an HTTP server (i.e., when listen-clear-file is used).
           #
           # Set to zero to disable.
           max-ban-score = 50

           # The time (in seconds) that all score kept for a client is reset.
           ban-reset-time = 300

           # In case you'd like to change the default points.
           #ban-points-wrong-password = 10
           #ban-points-connection = 1
           #ban-points-kkdcp = 1

           # Cookie timeout (in seconds)
           # Once a client is authenticated he's provided a cookie with
           # which he can reconnect. That cookie will be invalided if not
           # used within this timeout value. On a user disconnection, that
           # cookie will also be active for this time amount prior to be
           # invalid. That should allow a reasonable amount of time for roaming
           # between different networks.
           cookie-timeout = 300

           # Cookie rekey time (in seconds)
           # The time after which the key used to encrypt cookies will be
           # refreshed. After this time the previous key will also be valid
           # for verification. It is recommended not to modify the default
           # value.
           cookie-rekey-time = 14400

           # If this is enabled (not recommended) the cookies will stay
           # valid even after a user manually disconnects, and until they
           # expire. This may improve roaming with some broken clients.
           #persistent-cookies = true

           # Whether roaming is allowed, i.e., if true a cookie is
           # restricted to a single IP address and cannot be re-used
           # from a different IP.
           deny-roaming = false

           # ReKey time (in seconds)
           # ocserv will ask the client to refresh keys periodically once
           # this amount of seconds is elapsed. Set to zero to disable (note
           # that, some clients fail if rekey is disabled).
           rekey-time = 172800

           # ReKey method
           # Valid options: ssl, new-tunnel
           #  ssl: Will perform an efficient rehandshake on the channel allowing
           #       a seamless connection during rekey.
           #  new-tunnel: Will instruct the client to discard and re-establish the channel.
           #       Use this option only if the connecting clients have issues with the ssl
           #       option.
           rekey-method = ssl

           # Script to call when a client connects and obtains an IP.
           # The following parameters are passed on the environment.
           # REASON, USERNAME, GROUPNAME, HOSTNAME (the hostname selected by client),
           # DEVICE, IP_REAL (the real IP of the client), IP_REAL_LOCAL (the local
           # interface IP the client connected), IP_LOCAL (the local IP
           # in the P-t-P connection), IP_REMOTE (the VPN IP of the client),
           # IPV6_LOCAL (the IPv6 local address if there are both IPv4 and IPv6
           # assigned), IPV6_REMOTE (the IPv6 remote address), IPV6_PREFIX, and
           # ID (a unique numeric ID); REASON may be "connect" or "disconnect".
           # In addition the following variables OCSERV_ROUTES (the applied routes for this
           # client), OCSERV_NO_ROUTES, OCSERV_DNS (the DNS servers for this client),
           # will contain a space separated list of routes or DNS servers. A version
           # of these variables with the 4 or 6 suffix will contain only the IPv4 or
           # IPv6 values.

           # The disconnect script will receive the additional values: STATS_BYTES_IN,
           # STATS_BYTES_OUT, STATS_DURATION that contain a 64-bit counter of the bytes
           # output from the tun device, and the duration of the session in seconds.

           #connect-script = /usr/bin/myscript
           #disconnect-script = /usr/bin/myscript

           # UTMP
           # Register the connected clients to utmp. This will allow viewing
           # the connected clients using the command 'who'.
           #use-utmp = true

           # Whether to enable support for the occtl tool (i.e., either through D-BUS,
           # or via a unix socket).
           use-occtl = true

           # PID file. It can be overriden in the command line.
           pid-file = /var/run/ocserv.pid

           # Set the protocol-defined priority (SO_PRIORITY) for packets to
           # be sent. That is a number from 0 to 6 with 0 being the lowest
           # priority. Alternatively this can be used to set the IP Type-
           # Of-Service, by setting it to a hexadecimal number (e.g., 0x20).
           # This can be set per user/group or globally.
           #net-priority = 3

           # Set the VPN worker process into a specific cgroup. This is Linux
           # specific and can be set per user/group or globally.
           #cgroup = "cpuset,cpu:test"

           #
           # Network settings
           #

           # The name to use for the tun device
           device = vpns

           # Whether the generated IPs will be predictable, i.e., IP stays the
           # same for the same user when possible.
           predictable-ips = true

           # The default domain to be advertised
           default-domain = example.com

           # The pool of addresses that leases will be given from. If the leases
           # are given via Radius, or via the explicit-ip? per-user config option then
           # these network values should contain a network with at least a single
           # address that will remain under the full control of ocserv (that is
           # to be able to assign the local part of the tun device address).
           # Note that, you could use addresses from a subnet of your LAN network if you
           # enable proxy arp in the LAN interface (see http://infradead.org/ocserv/recipes-ocserv-pseudo-bridge.html);
           # in that case it is recommended to set ping-leases to true.
           ipv4-network = 192.168.1.0
           ipv4-netmask = 255.255.255.0

           # An alternative way of specifying the network:
           #ipv4-network = 192.168.1.0/24

           # The IPv6 subnet that leases will be given from.
           ipv6-network = fda9:4efe:7e3b:03ea::/48

           # Specify the size of the network to provide to clients. It is
           # generally recommended to provide clients with a /64 network in
           # IPv6, but any subnet may be specified. To provide clients only
           # with a single IP use the prefix 128.
           #ipv6-subnet-prefix = 128
           #ipv6-subnet-prefix = 64

           # Whether to tunnel all DNS queries via the VPN. This is the default
           # when a default route is set.
           #tunnel-all-dns = true

           # The advertized DNS server. Use multiple lines for
           # multiple servers.
           # dns = fc00::4be0
           dns = 192.168.1.2

           # The NBNS server (if any)
           #nbns = 192.168.1.3

           # The domains over which the provided DNS should be used. Use
           # multiple lines for multiple domains.
           #split-dns = example.com

           # Prior to leasing any IP from the pool ping it to verify that
           # it is not in use by another (unrelated to this server) host.
           # Only set to true, if there can be occupied addresses in the
           # IP range for leases.
           ping-leases = false

           # Use this option to enforce an MTU value to the incoming
           # connections. Unset to use the default MTU of the TUN device.
           #mtu = 1420

           # Unset to enable bandwidth restrictions (in bytes/sec). The
           # setting here is global, but can also be set per user or per group.
           #rx-data-per-sec = 40000
           #tx-data-per-sec = 40000

           # The number of packets (of MTU size) that are available in
           # the output buffer. The default is low to improve latency.
           # Setting it higher will improve throughput.
           #output-buffer = 10

           # Routes to be forwarded to the client. If you need the
           # client to forward routes to the server, you may use the
           # config-per-user/group or even connect and disconnect scripts.
           #
           # To set the server as the default gateway for the client just
           # comment out all routes from the server, or use the special keyword
           # 'default'.

           route = 10.10.10.0/255.255.255.0
           route = 192.168.0.0/255.255.0.0
           #route = fef4:db8:1000:1001::/64

           # Subsets of the routes above that will not be routed by
           # the server. Note, that this may currently be not be supported
           # by openconnect clients.

           no-route = 192.168.5.0/255.255.255.0

           # If set, the script /usr/bin/ocserv-fw will be called to restrict
           # the user to its allowed routes and prevent him from accessing
           # any other routes. In case of defaultroute, the no-routes are restricted.
           # All the routes applied by ocserv can be reverted using /usr/bin/ocserv-fw
           # --removeall. This option can be set globally or in the per-user configuration.
           #restrict-user-to-routes = true

           # When set to true, all client's iroutes are made visible to all
           # connecting clients except for the ones offering them. This option
           # only makes sense if config-per-user is set.
           #expose-iroutes = true

           # Groups that a client is allowed to select from.
           # A client may belong in multiple groups, and in certain use-cases
           # it is needed to switch between them. For these cases the client can
           # select prior to authentication. Add multiple entries for multiple groups.
           # The group may be followed by a user-friendly name in brackets.
           #select-group = group1
           #select-group = group2[My special group]

           # The name of the (virtual) group that if selected it would assign the user
           # to its default group.
           #default-select-group = DEFAULT

           # Instead of specifying manually all the allowed groups, you may instruct
           # ocserv to scan all available groups and include the full list.
           #auto-select-group = true

           # Configuration files that will be applied per user connection or
           # per group. Each file name on these directories must match the username
           # or the groupname.
           # The options allowed in the configuration files are dns, nbns,
           #  ipv?-network, ipv4-netmask, rx/tx-per-sec, iroute, route, no-route,
           #  explicit-ipv4, explicit-ipv6, net-priority, deny-roaming, no-udp,
           #  keepalive, dpd, mobile-dpd, max-same-clients, tunnel-all-dns,
           #  restrict-user-to-routes, user-profile, cgroup, stats-report-time,
           #  and session-timeout.
           #
           # Note that the 'iroute' option allows to add routes on the server
           # based on a user or group. The syntax depends on the input accepted
           # by the commands route-add-cmd and route-del-cmd (see below). The no-udp
           # is a boolean option (e.g., no-udp = true), and will prevent a UDP session
           # for that specific user or group. Note also, that, any DNS or NBNS servers
           # present will overwrite the global ones, while any routes or no-routes set
           # will be appended to the default set.
           #
           # Also explicit addresses, are only allowed when they are odd. In that
           # case the next even address will be used as the remote address (in PtP).

           #config-per-user = /etc/ocserv/config-per-user/
           #config-per-group = /etc/ocserv/config-per-group/

           # When config-per-xxx is specified and there is no group or user that
           # matches, then utilize the following configuration.
           #default-user-config = /etc/ocserv/defaults/user.conf
           #default-group-config = /etc/ocserv/defaults/group.conf

           # The system command to use to setup a route. %{R} will be replaced with the
           # route/mask, %{RI} with the route in CIDR format, and %{D} with the (tun) device.
           #
           # The following example is from linux systems. %{R} should be something
           # like 192.168.2.0/255.255.255.0 and %{RI} 192.168.2.0/24 (the argument of iroute).

           #route-add-cmd = "ip route add %{R} dev %{D}"
           #route-del-cmd = "ip route delete %{R} dev %{D}"

           # This option allows to forward a proxy. The special keywords '%{U}'
           # and '%{G}', if present will be replaced by the username and group name.
           #proxy-url = http://example.com/
           #proxy-url = http://example.com/%{U}/

           # This option allows you to specify a URL location where a client can
           # post using MS-KKDCP, and the message will be forwarded to the provided
           # KDC server. That is a translation URL between HTTP and Kerberos.
           # You can have the same path used for multiple realms. To authenticate
           # in client side, in MIT kerberos you'll need to add in krb5.conf:
           #   EXAMPLE.COM = {
           #     kdc = https://ocserv.example.com/KdcProxy
           #     http_anchors = FILE:/etc/ocserv-ca.pem
           #   }
           # This option is available if ocserv is compiled with GSSAPI support.

           #kkdcp = SERVER-PATH KERBEROS-REALM PROTOCOL@SERVER:PORT
           #kkdcp = /KdcProxy KERBEROS.REALM udp@127.0.0.1:88
           #kkdcp = /KdcProxy KERBEROS.REALM tcp@127.0.0.1:88
           #kkdcp = /KdcProxy KERBEROS.REALM tcp@[::1]:88

           #
           # The following options are for (experimental) AnyConnect client
           # compatibility.

           # This option must be set to true to support legacy CISCO clients.
           # A side effect of this option is that it will no longer be required
           # for clients to present their certificate on every connection.
           # That is they may resume a cookie without presenting a certificate
           # (when certificate authentication is used).
           cisco-client-compat = true

           # Client profile xml. A sample file exists in doc/profile.xml.
           # It is required by some of the CISCO clients.
           # This file must be accessible from inside the worker's chroot.
           # Note that enabling this option is not recommended as it will allow
           # the worker processes to open arbitrary files (when isolate-workers is
           # set to true).
           #user-profile = /path/to/file.xml

           #Advanced options

           # Option to allow sending arbitrary custom headers to the client after
           # authentication and prior to VPN tunnel establishment. You shouldn't
           # need to use this option normally; if you do and you think that
           # this may help others, please send your settings and reason to
           # the openconnect mailing list. The special keywords '%{U}'
           # and '%{G}', if present will be replaced by the username and group name.
           #custom-header = "X-My-Header: hi there"

EXIT STATUS

       One of the following exit values will be returned:

       0  (EXIT_SUCCESS)
              Successful program execution.

       1  (EXIT_FAILURE)
              The operation failed or the command syntax was not valid.

       70  (EX_SOFTWARE)
              libopts had an internal operational error.  Please report it to autogen-
              users@lists.sourceforge.net.  Thank you.

COMPATIBILITY

       The server has been tested to be compatible with the openconnect VPN client. However, it
       is also known to be compatible with certain CISCO AnyConnect clients.  To enable
       compatibility with CISCO's AnyConnect the cisco-client-compat and user-profile options
       must be set in ocserv's configuration.

SEE ALSO

       ocpasswd(8), occtl(8)

AUTHORS

       Nikos Mavrogiannopoulos and others

COPYRIGHT

       Copyright (C) 2013, 2014, 2015 Nikos Mavrogiannopoulos all rights reserved.  This program
       is released under the terms of the GNU General Public License, version 2.

BUGS

       Please send bug reports to: openconnect-devel@lists.infradead.org

NOTES

       This manual page was AutoGen-erated from the ocserv option definitions.