Provided by: ocserv_1.1.3-1_amd64 bug

NAME

       ocserv - OpenConnect VPN server

SYNOPSIS

       ocserv options -c [config]

       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.

       It  is  also  possible to run hostname-based virtual servers which could support different authentication
       methods. When multiple virtual servers are present clients are distinguished  by  the  advertised  server
       name over TLS (SNI). Clients which do not support or sent SNI, are directed to the default server.

OPTIONS

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

       -d, --debug=num:
              Enable verbose network debugging information. num must be between zero and 9999.

       -c, --config=FILE:
              Specify the configuration file for the server.

       -t, --test-config:
              Test  the  provided  configuration  file  and exit. A successful exit error code indicates a valid
              configuration.

       -p, --pid-file=FILE:
              Specify a PID file for the server.

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

       -v, --version:
              Output version of program and exit.

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"  #ip_address  =  "1.2.3.4" 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  3DES  cipher  is  used  in  the
       example because 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  =  365  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, i.e., preventing the user from  accessing  the  VPN  resources
       prior to its certificate expiration, use:

       $  cat  << _EOF_ >crl.tmpl crl_next_update = 365 crl_number = 1 _EOF_ $ cat user-cert.pem >>revoked.pem $
       certtool   --generate-crl    --load-ca-privkey    ca-key.pem    \    --load-ca-certificate    ca-cert.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-cert.pem \ --template
       crl.tmpl --outfile crl.pem

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.

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.

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.

       ``` ### The following directives do not change with server reload.# used  for  the  user  to  login,  add
       multiple  auth  directives. The values # in the 'auth' directive are AND composed (if multiple all must #
       succeed). # Available options: certificate, plain,  pam,  radius,  gssapi.  #  Note  that  authentication
       methods  utilizing  passwords  cannot  be  #  combined  (e.g.,  the  plain, pam or radius methods).# This
       indicates that all connecting users must present a certificate. # The username and  user  group  will  be
       then extracted from it (see # cert-user-oid and cert-group-oid). The certificate to be accepted # it must
       be  signed  by  the  CA  certificate as specified in 'ca-cert' and # it must not be listed in the CRL, as
       specified by the 'crl' option. # # 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 one to specify # an oath
       password file  to  be  used  for  one  time  passwords;  the  format  of  #  the  file  is  described  in
       https://github.com/archiecobbs/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/group  will  be  overridden,  # and all configuration will be read from radius. That also
       includes the # Acct-Interim-Interval, and Session-Timeout values. # # See  doc/README-radius.md  for  the
       supported             radius             configuration             atributes.             #             #
       gssapi[keytab=/etc/key.tab,require-local-user-map=true,tgt-freshness-time=900] # The gssapi option allows
       one 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.#auth        =        "pam[gid-min=1000]"        #auth       =
       "plain[passwd=./sample.passwd,otp=./sample.otp]"   auth   =   "plain[passwd=./sample.passwd]"   #auth   =
       "certificate"    #auth   =   "radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"#   for
       authentication. That is, if set, any of the methods enabled # will be sufficient to  login,  irrespective
       of  the  main  'auth'  entries.  # When multiple options are present, they are OR composed (any of them #
       succeeding  allows  login).  #enable-auth  =  "certificate"  #enable-auth  =  "gssapi"   #enable-auth   =
       "gssapi[keytab=/etc/key.tab,require-local-user-map=true,tgt-freshness-time=900]"# 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]"#  hostname.  #listen-host = [IP|HOSTNAME]# hostname.
       if not set, listen-host will be used #udp-listen-host = [IP|HOSTNAME]# should set that to true to ask the
       client to resolve again on # reconnects. #listen-host-is-dyndns = true# listen-netns  =  "foo"tcp-port  =
       443  udp-port  = 443# unprivileged user (e.g., 'ocserv') and no other services should run as this # user.
       run-as-user = nobody run-as-group = daemon# if you use more than a single servers.  #occtl-socket-file  =
       /var/run/occtl.socket#  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#chroot-dir   =
       /var/lib/ocserv#   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. # The certificate files will be reloaded when
       changed allowing for in-place # certificate renewal (they are checked  and  reloaded  periodically;  #  a
       SIGHUP  signal  to  main server will force reload).#server-key = /etc/ocserv/server-key.pem server-cert =
       ../tests/certs/server-cert.pem  server-key  =  ../tests/certs/server-key.pem#  versions  of  GnuTLS   for
       supporting  DHE  ciphersuites.  #  Can  be  generated  using:  #  certtool --generate-dh-params --outfile
       /etc/ocserv/dh.pem #dh-params = /etc/ocserv/dh.pem# in files. The srk-pin-file is applicable to TPM  keys
       only,   and   is   the   #   storage   root   key.   #pin-file   =  /etc/ocserv/pin.txt  #srk-pin-file  =
       /etc/ocserv/srkpin.txt# Only needed if the file is  encrypted  or  a  PKCS  #11  object.  This  #  is  an
       alternative  method to pin-file. #key-pin = 1234# This is an alternative method to srk-pin-file. #srk-pin
       =  1234#  client  certificates  (public  keys)  if  certificate  authentication  #  is  set.  #ca-cert  =
       /etc/ocserv/ca.pem ca-cert = ../tests/certs/ca.pem

   All configuration options below this line are reloaded on a SIGHUP.
       ###  The  options  above,  will  remain  unchanged.  Note  however, that the ### server-cert, server-key,
       dh-params and ca-cert options will be reloaded ### if the provided file changes, on server  reload.  That
       allows  certificate  ###  rotation,  but  requires  the  server  key  to remain the same for seamless ###
       operation. If the server key changes on reload, there may be connection ### failures during the reloading
       time.# 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).  #  Note  however,  that  process  isolation  is
       restricted  to  the  specific  libc versions # the isolation was tested at. If you get random failures on
       worker processes, try # disabling that option  and  report  the  failures  you,  along  with  system  and
       debugging  #  information  at:  https://gitlab.com/ocserv/ocserv/issues  isolate-workers  = true#banner =
       "Welcome"#pre-login-banner = "Welcome"# that case the maximum value is ~8k clients. #max-clients  =  1024
       max-clients  =  16#  multiple  times).  Unset  or  set to zero for unlimited. max-same-clients = 2# which
       supports the proxy protocol, set this to obtain the correct # client addresses. The proxy protocol  would
       then  be  expected  in  # the TCP or UNIX socket (not the UDP one). Although both v1 # and v2 versions of
       proxy protocol are supported, the v2 version # is  recommended  as  it  is  more  efficient  in  parsing.
       #listen-proxy-proto  =  true#  (X  is  the provided value), as the secmod backlog grows. This # makes the
       server more resilient (and prevents connection failures) on # multiple  concurrent  connections.  Set  to
       zero  for  no  limit.  rate-limit-ms  = 100# 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#
       processes will be reset. These are the statistics shown by cmd # 'occtl show stats'.  For  daily:  86400,
       weekly:  604800  #  This  is  unrelated to stats-report-time. server-stats-reset-time = 604800keepalive =
       32400# 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# 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-Platform'.  mobile-dpd = 1800# many seconds, attempt to send future traffic over
       the TCP # connection instead, in an attempt to wake up the client # in the case that there is a  NAT  and
       the  UDP  translation  #  was deleted. If this is unset, do not attempt to use this # recovery mechanism.
       switch-to-tcp-timeout =  25try-mtu-discovery  =  false#  higher  than  your  load-balancer  health  probe
       interval. #server-drain-ms = 15000# 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 =
       /etc/ocserv/ocsp.der# 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,  SAN(rfc822name)  cert-user-oid  =
       0.9.2342.19200300.100.1.1# client certificate. The object identifier should be part of the  certificate's
       # DN. If the user may belong to multiple groups, then use multiple such fields # in the certificate's DN.
       Useful  OIDs  are:  #  OU  (organizational unit) = 2.5.4.11 #cert-group-oid = 2.5.4.11# 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 = /etc/ocserv/crl.pem#compression = true# 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#  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:-VERS-TLS1.0:-VERS-TLS1.1"#
       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"# cipher as the  primary  TLS  channel.
       This  cannot be combined with # listen-clear-file since the ciphersuite information is not available # in
       that configuration. Note also, that this option implies that # dtls-legacy option is false;  this  option
       cannot  be  enforced  #  in the legacy/compat protocol. #match-tls-dtls-ciphers = true# to authentication
       auth-timeout = 240# before being disconnected. Unset to disable. #idle-timeout = 1200# Unset to  disable.
       When  set a client will be disconnected after being # continuously connected for this amount of time, and
       its cookies will # be invalidated (i.e., re-authentication will be required). #session-timeout  =  86400#
       traffic)   before   being   disconnected.  Unset  to  disable.  #mobile-idle-timeout  =  2400#  a  failed
       authentication attempt. min-reauth-time = 300# 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 = 80ban-reset-time = 1200#ban-points-wrong-password = 10 #ban-points-connection =
       1 #ban-points-kkdcp = 1# Once a client is authenticated he's provided  a  cookie  with  #  which  he  can
       reconnect.  That  cookie will be invalidated if not # used within this timeout value. This cookie remains
       valid, during # the user's connected time, and after user disconnection it  #  remains  active  for  this
       amount  of  time.  That  setting should allow a # reasonable amount of time for roaming between different
       networks. cookie-timeout = 300# valid even after a user manually disconnects, and until  they  #  expire.
       This  may improve roaming with some broken clients. #persistent-cookies = true# restricted to a single IP
       address and cannot be re-used # from a different IP. deny-roaming = false# 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# 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# The following parameters
       are passed on the environment. # REASON, VHOST, USERNAME, GROUPNAME, DEVICE, IP_REAL (the real IP of  the
       client),  #  REMOTE_HOSTNAME  (the remotely advertised hostname), 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 connect script must return zero as exit code, or the # client connection will be
       refused.# 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.#disconnect-script = /usr/bin/myscript# available.
       It  will  contain  REASON  with "host-update" value and the # variable REMOTE_HOSTNAME in addition to the
       connect variables.# Register the connected clients to utmp. This  will  allow  viewing  #  the  connected
       clients  using  the  command  'who'.  #use-utmp = true# or via a unix socket). use-occtl = truepid-file =
       /var/run/ocserv.pid# All messages at the configure level and lower will be displayed. # Supported  levels
       (default  0)  #  0  default  (Same  as basic) # 1 basic # 2 info # 3 debug # 4 http # 8 sensitive # 9 TLS
       log-level = 1# 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# specific and can be set per user/group  or
       globally.   #cgroup   =   "cpuset,cpu:test"#device  =  vpns#  same  for  the  same  user  when  possible.
       predictable-ips = true# openconnect clients) can be provided in a space separated list. default-domain  =
       example.com   #default-domain  =  "example.com  one.example.com"#  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
       http://ocserv.gitlab.io/www/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#ipv4-network  =
       192.168.1.0/24#ipv6-network = fda9:4efe:7e3b:03ea::/48# 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#  when  a  default  route  is  set.
       #tunnel-all-dns  =  true#  multiple  servers.  #  dns  = fc00::4be0 dns = 192.168.1.2#nbns = 192.168.1.3#
       multiple lines for multiple domains. #split-dns = example.com# 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# connections. Unset to use the default MTU of the TUN device. # Note that the MTU  is
       negotiated using the value set and the # value sent by the peer. #mtu = 1420# 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 output
       buffer.  The  default  is  low  to  improve  latency.  #  Setting  it  higher  will  improve  throughput.
       #output-buffer  =  10# 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 #route
       = default# the server.

       no-route = 192.168.5.0/255.255.255.0# in Linux systems with iptables software.# 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# script
       /usr/bin/ocserv-fw  will  be  called to restrict the user to # access specific ports in the network. This
       option can be set globally # or in  the  per-user  configuration.  #restrict-user-to-ports  =  "tcp(443),
       tcp(80), udp(443), sctp(99), tcp(583), icmp(), icmpv6()"#restrict-user-to-ports = "!(tcp(443), tcp(80))"#
       connecting  clients  except for the ones offering them. This option # only makes sense if config-per-user
       is set. #expose-iroutes = true# 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]#   to  its  default  group.
       #default-select-group = DEFAULT# ocserv  to  scan  all  available  groups  and  include  the  full  list.
       #auto-select-group  =  true#  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-data-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,   cgroup,   stats-report-time,   #   mtu,   idle-timeout,   mobile-idle-timeout,
       restrict-user-to-ports, # split-dns and session-timeout. # # Note that the 'iroute' option allows one  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. The hostname option will set a #
       hostname  to  override  any  proposed  by the user. Note also, that, any # routes, no-routes, DNS or NBNS
       servers  present  will  overwrite  the  global  ones.#config-per-group  =  /etc/ocserv/config-per-group/#
       matches,  then utilize the following configuration. #default-user-config = /etc/ocserv/defaults/user.conf
       #default-group-config = /etc/ocserv/defaults/group.conf# 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-del-cmd  =  "ip
       route  delete  %{R}  dev  %{D}"#  and '%{G}', if present will be replaced by the username and group name.
       #proxy-url = http://example.com/ #proxy-url = http://example.com/%{U}/#  post  using  MS-KKDCP,  and  the
       message  will  be  forwarded  to  the  provided  # KDC server. That is a translation URL between HTTP and
       Kerberos.  #  In  MIT  kerberos  you'll  need  to  add  in  realms:  #  EXAMPLE.COM   =   {   #   kdc   =
       https://ocserv.example.com/KdcProxy  # http_anchors = FILE:/etc/ocserv-ca.pem # } # In some distributions
       the krb5-k5tls plugin of kinit is required. # #  The  following  option  is  available  in  ocserv,  when
       compiled  with  GSSAPI  support.#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"#  to  the  client.  A
       minimal  file can be: # <?xml version="1.0" encoding="UTF-8"?> #  # # Other fields may be used by some of
       the CISCO clients. # This file must be accessible from inside the worker's chroot. #  Note  that:  #  (1)
       enabling  this  option is not recommended as it will allow the # worker processes to open arbitrary files
       (when isolate-workers is # set to true). # (2) This option cannot be set per-user or per-group; only  the
       global  #  version is being sent to client. #user-profile = profile.xml# compatibility.# will not require
       clients to present their certificate on every TLS # connection. It must be set to true to support  legacy
       CISCO  clients  #  and  openconnect  clients  <  7.08.  When  set to true, it implies dtls-legacy = true.
       cisco-client-compat = true# The DTLS-PSK negotiation was introduced in ocserv 0.11.5 to deprecate  #  the
       pre-draft-DTLS  negotiation  inherited  from  AnyConnect.  It  allows the # DTLS channel to negotiate its
       ciphers and the DTLS protocol version. #dtls-psk = false# but that may  change  in  the  future).  #  The
       legacy  DTLS  uses  a  pre-draft  version of the DTLS protocol and was # from AnyConnect protocol. It has
       several limitations, that are addressed # by  the  dtls-psk  protocol  supported  by  openconnect  7.08+.
       dtls-legacy = true# If the server has not configured an IPv6 or IPv4 address pool, enabling this option #
       will  instruct  the  client  to  bypass  the  server for that IP protocol. The option is # currently only
       understood by Anyconnect clients. client-bypass-protocol = false# 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"# by this server.

       [vhost:www.example.com] auth = "certificate"

       ca-cert = ../tests/certs/ca.pem# the virtual host name.

       server-cert           =           ../tests/certs/server-cert-secp521r1.pem          server-key          =
       ../tests/certs/server-key-secp521r1.pem

       ipv4-network = 192.168.2.0 ipv4-netmask = 255.255.255.0

       cert-user-oid = 0.9.2342.19200300.100.1.1 ```

SEE ALSO

       occtl(8), ocpasswd(8), openconnect(8)

COPYRIGHT

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

AUTHORS

       Written by Nikos Mavrogiannopoulos. Many people have contributed to it.

                                                    May 2021                                           OCSERV(8)