Previous Topic: VPN: Virtual Private Networking ApplianceNext Topic: Generic


VPN2 - Virtual Private Networking Appliance

Latest version: 1.0.4-1

At a Glance

Catalog

System

Category

Gateways

User volumes

no

Min. memory

96MB

OS

Linux

Constraints

no

Functional Overview

VPN2 is a Virtual Private Networking appliance that operates in IPv4 and IPv6 networks, designed to provide secure and reliable tunnels for inter-grid communications as well as remote access to applications and appliances. VPN2 can also operate without using VPN tunnels, in which case it functions as a combined cleartext IN/OUT gateway. VPN2 may also be used to seamlessly interconnect IPv4 and IPv6 grids. VPN2 is based on the OpenVPN, OpenSSH and Racoon open source software packages.

VPN has three basic modes of operation: server, client, and both.

VPN2 supports IPSec, shared secrets files, SSL certificates and ssh key files for authentication and encryption. A regular OpenVPN/OpenSSH client may be used on a remote workstation to connect to VPN2, which in turn provides secure access to the internal components of an application running on CA AppLogic. The VPN2 appliance supports the generation of shared secrets files, SSL certificates and ssh keys.

To remotely access a CA AppLogic application over a secure VPN tunnel using VPN2, the OpenVPN client-side software, or OpenSSH may be used on the client's machine (or some other compatible software).

Boundary

Resources

Resource

Minimum

Maximum

Default

CPU

0.1

16

0.2

Memory

96 MB

32 GB

96MB

Bandwidth

1 Mbps

2 Gbps

250 Mbps

Terminals

Name

Direction

Protocol

Description

clt

in

any

Common input for all incoming traffic to be directed through the in terminal when VPN is operating as a client. If VPN is configured to establish a tunnel on the in terminal, packets sent to clt are directed to an established tunnel, or dropped, if the tunnel is not up.

in

in,out

any

Receives all encrypted (incoming or outgoing) traffic for assigned IPs

srv

out

any

Common output for all outgoing traffic that is received through the in terminal when VPN is operating as a server. All traffic is filtered using the tcp_ports, udp_ports, ssh_ports and aux_protocols properties prior to be sent through the srv.

fs

out

nfs

Access to a network file system for shared file storage, providing read-write file access over NFS. This volume is mounted as /mnt/fs in the appliance's filesystem space and is used for storage of encryption keys and certificates. The connected server must have a read-write share named /mnt/data. Neither the data volume nor the NFS-mounted volume is required if VPN operates in cleartext mode. This terminal may be left unconnected if it is not used

log

out

cifs

Access to a CIFS-based network file system for storing access and error logs. The connected server must allow anonymous logins and have a read-write share named share. This terminal may be left unconnected if it is not used.

mon

out

cce

Used to send performance and resource usage statistics. May be left disconnected if not used.

The in terminal is used for encrypted traffic (inbound or outbound.) This terminal is configured via the Interfaces tab of Application Configuration Editor.

Properties

General Properties

Property Name

Type

Description

dns1

IP address

Defines the primary DNS server to which VPN2 will forward DNS requests. If left empty, VPN2 will use the root DNS servers. Default: empty

dns2

IP address

Defines the backup DNS server to which VPN2 will forward DNS requests if the primary is not available. If left empty, VPN2 will not use a backup DNS server. Default: empty

VPN Properties

Property Name

Type

Description

mode

String

Mode of operation. Possible values are:

server - VPN2 operates in server mode, accepting incoming traffic from established tunnels on the in terminal and sending it to the srv terminal.

client - VPN2 operates in client mode, accepting incoming traffic on clt terminal and sending it into the established tunnel on the in terminal.

both - VPN2 operates in both client and server modes.

Default: server.

tunnel

String

Type of the tunnel to establish. Possible values are:

certificate - A VPN tunnel is established using SSL client and server certificates for authentication and encryption with OpenVPN. The server certificate is generated automatically if not present; the client certificate must be generated manually with the /appliance/security.sh script located on the VPN2 server and copied into the /client/ subdirectory on the data volume or nfs-mounted volume. This mode works with IPv4 and IPv6.

shared secret - A VPN tunnel is established using a shared secrets file with OpenVPN. This file is automatically generated on the VPN2 server if not present, is located in the /server/ subdirectory of the data volume or nfs-mounted volume, and is named secret.key. This file must be copied on the client VPN2 appliance into the /client/ subdirectory. This mode works with IPv4 and IPv6.

ssh key - An SSH tunnel is established using OpenSSH keyfiles for authentication. Keyfiles are generated with the /appliance/security.sh server-side script. The client keyfile must be copied into the /client/ subdirectory of the data volume of nfs-mounted storage. This mode works with IPv4 and IPv6.

ipsec shared secret - IPSec tunnel is established between instances of VPN2. The first line of the file specified by the auth_path property is used as a shared key. This mode works only with IPv4.

ipsec certificate - IPSec tunnel using certificates is established between instances of VPN2. The server certificate is generated automatically if not present or may be generated with the /appliance/security.sh script; the client certificate must be generated manually with the /appliance/security.sh script located on the VPN2 server and copied into the /client/ subdirectory on the data volume or nfs-mounted volume. This mode works only with IPv4. For the both mode of operation all certificates must be generated by the same appliance, and distributed with it's ca.crt certificate.

cleartext - No tunnel is established; the VPN2 appliance operates as a combined IN/OUT gateway, accepting traffic on the clt terminal and forwarding it through the in terminal, and accepting traffic on the in terminal and forwarding it through the srv terminal. This mode works with IPv4 and IPv6. For IPv6 mode the remote_host property must contain the peer's address.

Default: cleartext.

auth_path

String

Authentication information for the tunnel. For the shared secret mode of operation, this is a relative path to the shared secrets file on the data volume (ex. "secret.key" for a "client/secret.key" file). For the certificate mode, this is a relative path, including the file name without extension, to the certificate/key file pair. For example, if the certificate files client1-2009.crt and client1-2009.key are located in the /client subdirectory of the data volume, "client1-2009" must be specified here. If the tunnel is cleartext, this property is ignored. If the tunnel is ssh key, this property indicates the path, including filename, to the ssh public (for VPN server) or private (for VPN client) key file (e.g. "/1/ssh.key" for a /client/1/ssh.key public key file).

Default: empty

log_level

String

VPN logging level. Possible values are:

none - Nothing is logged.

emerg - Logs only errors detected by VPN2.

warn - Logs both warnings and errors.

notice - Logs warnings, errors and notices.

debug - Logs additional debug information in addition to warnings, notices and errors.

Default: none if the log terminal is not connected; emerg if the log terminal is connected.

Server Properties

Property Name

Type

Description

allowed_hosts

String

List of hosts and/or subnets allowed to connect. Separate multiple entries with spaces or commas. Supported format example: 192.168.1.2 192.168.1.0/24 192.168.2.0/255.255.255.0 fc00:1234::12/64.

Default: 0.0.0.0/0 (all allowed, both IPv4 and IPv6)

tcp_ports

String

Port numbers or port ranges to allow on thel srv terminal. Accepts a string of comma or space-separated values. Port ranges must be specified as lower_port:higher_port with colon or dash as a separator (e.g., 80,81,82:85 86-90). A special value of 0 means that all tcp ports are accepted.

Default: empty

udp_ports

String

Same as tcp_ports, but for UDP protocol.

Default: empty

aux_protocols

String

A string of comma or space-separated additional IP Protocol numbers to allow (e.g., 6 for TCP, 47 for GRE). Separate protocols may be specified by their names (ex. 'gre' instead of '47'). See

protocol-numbers for assignment.

Default: empty (disabled)

Client Properties

Property Name

Type

Description

remote_host

String

Defines the remote host to forward all traffic to. This can be the DNS name of the host or its IPv4 or IPv6 address in "dots" notation. This property is mandatory.

Default: empty

dns_poll

Integer

The poll interval, in seconds, that VPN2 will use when checking the mapping of the DNS name of remote_host to IP address (used only if remote_host is specified as a DNS name). Set to 0 to disable polling and not try to detect changes.

Default: 3600 seconds (1 hour).

ssh_ports

String

A client-side property for ssh key mode, that specifies what tcp ports to forward to the VPN2 server. Port ranges are not supported, ports may be divided by spaces or commas.

Default: empty

Volumes

Name

Description

data

A read-write data volume (placeholder) containing config files and certificate files. This volume Is not required if the fs terminal is connected. If fs is connected, and a data volume is supplied, VPN2 fails to start and logs an error message. All files that are necessary for VPN2 server operation are stored in the /server/ subdirectory of the data storage. All files that are necessary for VPN2 client operation, are stored in the /client/ subdirectory.

Custom Counters

The VPN2 appliance reports the following custom counters through the mon terminal.

Counter Name

Description

server_bytes_in

Total bytes received by VPN2.

server_bytes_out

Total bytes sent by VPN2.

client_bytes_in

Total bytes sent by VPN2.

client_bytes_out

Total bytes sent to client tunnels.

client_bytes_out

Number of clients connected to VPN2.

Performance

Two test applications were residing on the same CA AppLogic grid. 100mbit bandwidth was assigned to both VPN2 appliances (client and server), and to server and client appliances. Multiple object, each 1Mbyte in size, were fetched, 10 objects in parallel, for 60 seconds.

Mode

Bandwidth,Mbit/second

Object size

Requests/second

Transfer rate, MBytes/second

Certificate

100

1MB

12.5667

12.56

Shared secret

100

1MB

12.5166

12.51

SSH key

100

1MB

12.7667

12.76

Cleartext

100

1MB

13.0329

12.76

Error Messages

In case of appliance startup failure, the following errors may be logged to the system log:

Error Message

Description

Failed to mount the data volume

VPN2 failed to mount the data volume. Verify that the volume is formatted and available.

Failed to generate server_key

VPN2 failed to generate shared secrets file. Probably the data volume is too small, or mounted read-only.

Failed to launch OpenVPN server

VPN2 failed to launch OpenVPN server. Please contact 3Tera support.

Failed to generate certificates.

VPN2 failed to create Certification Authority and generate necessary certificated for certificate server mode of operation. Probably the data volume is too small, or mounted read-only.

Failed to generate DH file.

VPN2 failed to generate Diffie-Hellman key file. Probably the data volume is too small, or mounted read-only.

Secrets file client_auth does not exist

File client_auth, specified in the auth property, does not exist. Verify the path and name of the file.

Remote server address is empty for

Remote VPN2 server address is empty for tunnel X.

Failed to launch OpenVPN for clientX tunnel

VPN2 failed to launch OpenVPN software for client tunnel X. Probably some properties or key files are invalid.

Certificate file client_auth.crt does not exist

VPN2 failed to locate a certificate file. Invalid path or file name specified in auth property for the certificate client mode of operation.

Key file client_auth.key does not exist

VPN2 failed to locate a key file. Invalid path or file name specified in auth property for the certificate client mode of operation

Certification Authority certificate ca_cert is missing

VPN2 failed to locate Certification Authority certificate. It should be located in /CA/ca.crt file on the data volume.

Types of tunnels

Cleartext

This mode supports a "single server - multiple clients" scenario, allowing access to the VPN2 server from multiple locations. In this mode VPN tunnels are not established, and a data store is not required (neither a data volume nor a NAS appliance connected to the fs terminal). This mode operates in IPv4 and IPv6.

On the server VPN2 appliance, traffic received on the in terminal is filtered through the tcp_ports, udp_ports, aux_protocols properties and forwarded to the srv terminal.

On the client VPN2 appliance, all traffic received on the clt terminal is forwarded to the remote VPN2 server, specified in the remote_host property.

Properties that must be configured on the server side: mode, tunnel, allowed_hosts, tcp_ports, udp_ports, aux_protocols.

Properties that must be configured on the client side: mode, tunnel, remote_host.

Server-side property remote_host must be configured with client's address if IPv6 mode is in use.

Certificate

This mode supports a "single server - multiple clients" scenario, allowing access to the VPN2 server from multiple locations. A data store is required (either a data volume or a NAS appliance connected to the fs terminal). This mode operates in both IPv4 and IPv6.

Upon start, the server appliance generates necessary certificates and key files if these files are not already present. These files may be re-generated with the security.sh script, located in the /appliance/ directory. Prior to configuring any VPN2 clients, certificates must be generated for them. A user may login into the running VPN2 server appliance and generate a client keypair as follows:

grid> comp login VPN2-1:main.VPN2
CentOS release 6 (Final)
[VPN-1:main.VPN ~]# /appliance/security.sh generate_client
Generated client SSL cerfiticate and key file.
==============================================
These files, with CA certificate file, should be copied to VPN2 server into
/client/ subdirectory of data volume or fs-mounted volume.
Path to client files (client.829de5afcac564b3) should be specified in auth_path property.
Location of files:
client certificate: /mnt/fs/server/client.829de5afcac564b3.crt
client key file: /mnt/fs/server/client.829de5afcac564b3.key
CA certificate file located at /mnt/fs/server/ca.crt

The client certificate and key file must be copied to the client VPN2 appliance to the /client/ subdirectory of the data store, and the auth_path set to the appropriate value, "client.829de5afcac564b3" in this case. The CA certificate from the VPN2 server (/mnt/fs/server/ca.crt) must be copied to the /client/ subdirectory on the client appliance as well, and named "ca.crt". Every client VPN2 appliance should have it's own certificate.

On the server VPN2 appliance, traffic received on the in terminal is decrypted, filtered through the tcp_ports, udp_ports, aux_protocols properties and forwarded to the srv terminal.

On the client VPN2 appliance, all traffic received on the clt terminal is encrypted and forwarded to the remote VPN2 server, specified in the remote_host property.

Properties that must be configured on the server side: mode, tunnel, allowed_hosts, tcp_ports, udp_ports, aux_protocols.

Properties that must be configured on the client side: mode, tunnel, remote_host, auth_path.

Shared secrets file

This mode supports only the "single server - single client" scenario, allowing access to the VPN2 server from only single client at one time. A data store is required (either a data volume or a NAS appliance connected to the fs terminal). This mode operates in both IPv4 and IPv6.

Upon the start, the server appliance generates a shared secrets file "/server/secret.key", if this file is not already present. This file may be re-generated with the security.sh script, located in the /appliance/ directory. Prior to configuring any VPN2 clients, this shared secrets file must be copied to it's data store into the /client/ subdirectory. To generate a new shared secrets file, a user may login into the running VPN2 server appliance and issue the following command:

[VPN2-1:main.VPN2 server]# /appliance/security.sh generate_secret
Generated OpenVPN shared secrets file.
======================================
This file should be copied to VPN2 server into /server/ subdirectory of data volume or fs-mounted volume,
and to the VPN2 client into /client/ subdirectory of data volume or fs-mounted volume.
Path to it should be specified in auth_path property of the VPN2 client.
Location of file: /mnt/fs/server/secret.key

A freshly-generated secrets file overwrites the old one, if it existed. This shared secrets file "/mnt/fs/server/secret.key" must be copied to the client VPN2 appliance into /client/ subdirectory of the data store, and auth_path property set to the correct value, "secret.key" in this case. Multiple client VPN2 appliances may be configured, but only one can be connected at any time.

On the server VPN2 appliance, traffic received on the in terminal is decrypted, filtered through the tcp_ports, udp_ports, aux_protocols properties and forwarded to the srv terminal.

On the client VPN2 appliance, all traffic received on the clt terminal is encrypted and forwarded to the remote VPN2 server, specified in the remote_host property.

Properties that must be configured on the server side: mode, tunnel, allowed_hosts, tcp_ports, udp_ports, aux_protocols.

Properties that must be configured on the client side: mode, tunnel, remote_host, auth_path.

Ssh key

This mode supports a "single server - multiple clients" scenario, allowing access to the VPN2 server from multiple locations. A data store is required (either a data volume or a NAS appliance connected to the fs terminal). Only tcp traffic may be tunneled through the ssh tunnel, so only tcp_ports property is used on the server side. Port ranges are not supported - every ports that should be forwarded must be specified explicitly in ssh_ports client-side property. This mode operates in both IPv4 and IPv6.

VPN2 server generates the default ssh keypair upon start; default keys are located at: server key (public key): server/ssh-server.pub client key (private key): server/ssh-client.key Additional keys may be generated manually using the security.sh script:

[VPN2-1:main.VPN2 ~]# /appliance/security.sh generate_ssh
Generated SSH keypair.
======================
Public key should be copied to VPN2 server into /server/ subdirectory of data volume or fs-mounted volume.
Private key should be copied to VPN2 client into /client/ subdirectory of data volume or fs-mounted volume.
Path to key files should be specified in auth_path property on both VPN2 client and server.
Location of files:
Public key: /mnt/fs/server/ssh.11179ebbfa3f6852.pub
Private key: /mnt/fs/server/ssh.11179ebbfa3f6852.key
The public key should be copied to the VPN2 server into the /server/ subdirectory; the private key should be copied to the client into the /client/ subdirectory. The auth_path property should be set on both client and server. If auth_path is empty on the server, the default SSH key is used. 

On the server VPN2 appliance, traffic received on the in terminal is decrypted, filtered through the ssh_ports property and forwarded to the srv terminal. Only tcp port forwarding is supported. The auth_path property defines the public ssh key to use. When the appliance is working in both client and server mode, both public and private keys should be named the same, and located in /server/ and /client/ subdirectories. The ssh_ports property should be configured on both server and client in the same way.

On the client VPN2 appliance, all traffic received on the clt terminal is encrypted and forwarded to the remote VPN2 server, specified in the remote_host property.

Properties that must be configured on the server side: mode, tunnel, allowed_hosts, auth_path, tcp_ports.

Properties that must be configured on the client side: mode, tunnel, remote_host, auth_path, ssh_ports.

Note: SSH server-server mode. Two VPN2 appliances may both be configured in both mode and connect to each other. In order to use this mode, appliances must be configured in a special way:

Assuming you have 2 appliances named VPN21 and VPN22:

  1. create 2 sets of public/private key files (1.key/1.pub, 2.key/2.pub , using "/appliance/security.sh generate_ssh" script)
  2. configure auth_path property on both appliances to "ssh.key"
  3. copy 2.pub to VPN21:/mnt/data/server/ssh.key (or to ssh.key file in /server/ subdirectory of the NAS drive) (public key goes to /server/ subdirectory)
  4. copy 2.key to VPN22:/mnt/data/client/ssh.key (private key goes to /client/ subdirectory)
  5. copy 1.pub to VPN22:/mnt/data/server/ssh.key (public key goes to /server/ subdirectory)
  6. copy 1.key to VPN21:/mnt/data/client/ssh.key (private key goes to /client/ subdirectory)

IPSec certificate

This mode supports a "single server - multiple clients" scenario, allowing access to the VPN2 server from multiple locations. A data store is required (either a data volume or a NAS appliance connected to the fs terminal). This mode operates only in IPv4.

Upon start, the server appliance generates necessary certificates and key files if these files are not already present. These files may be re-generated with the security.sh script, located in the /appliance/ directory. Prior to configuring any VPN2 clients, certificates must be generated for them. A user may login into the running VPN2 server appliance and generate a client keypair as follows:

grid> comp login VPN2-1:main.VPN2
CentOS release 6 (Final)

[VPN2-1:main.VPN2 ~]# /appliance/security.sh generate_client
Generated client SSL cerfiticate and key file.
==============================================
These files, with CA certificate file, should be copied to VPN2 server into
/client/ subdirectory of data volume or fs-mounted volume.
Path to client files (client.829de5afcac564b3) should be specified in auth_path property.
Location of files:
client certificate: /mnt/fs/server/client.829de5afcac564b3.crt
client key file: /mnt/fs/server/client.829de5afcac564b3.key
CA certificate file located at /mnt/fs/server/ca.crt

The client certificate and key file must be copied to the client VPN2 appliance to the /client/ subdirectory of the data store, and the auth_path set to the appropriate value, "client.829de5afcac564b3" in this case. The CA certificate from the VPN2 server (/mnt/fs/server/ca.crt) must be copied to the /client/ subdirectory on the client appliance as well, and named "ca.crt". Every client VPN2 appliance should have it's own certificate.

Important! An exception exist when VPN2 is used in both mode. In this case all certificates, client and server ones, must be generated by the same VPN2 instance, and distributed together with it's ca.crt certificate to other instances.

On the server VPN2 appliance, traffic received on the in terminal is decrypted, filtered through the tcp_ports, udp_ports, aux_protocols properties and forwarded to the srv terminal.

On the client VPN2 appliance, all traffic received on the clt terminal is encrypted and forwarded to the remote VPN2 server, specified in the remote_host property.

Properties that must be configured on the server side: mode, tunnel, allowed_hosts, tcp_ports, udp_ports, aux_protocols.

Properties that must be configured on the client side: mode, tunnel, remote_host, auth_path.