Ansible Playbook for deploying OpenVPN on Ubuntu and Arch Hosts with LDAP authentication support.
- Ansible <= 2.6
-
openvpn
- Installs, configures and hardens OpenVPN security configuration
- Enables
tls-crypt(supersedes tls-auth) - Enables forward secrecy TLS ciphers
- Reduces OpenVPN daemon privileges after initialization
- Configures LDAP auth over TLS
- Pushes OpenDNS for client configuration
-
easy-rsa (default expire: 10 years)
- Certificate Authority and random generated passphrase
- OpenVPN server certificate and private key
- Diffie-Hellman (DH) parameters key
- Hash-based Message Authentication Code (HMAC) key
- Optional: transfer CA cert and HMAC key to secondary/backup OpenVPN host(s)
-
network (default:
ufworiptables)- Enables NAT forwarding
- Port forward OpenVPN (default proto:
tcp) - Starts OpenVPN network/service
-
client
- Generates OpenVPN client
.ovpnprofile from template - Sends an email to the OpenVPN user with the client profile for desktop/mobile import
- Retrieves OpenDNS config pushed from OpenVPN server
- Generates OpenVPN client
openvpn,vpnconfig,ldaprsanetworkclient,email
-
Update the global variables in
group_vars/allfor your own VPN server environment. -
Update the
host_varsvariable file for each OpenVPN server with your host-specific environment. -
Recommended: Set up vpn virtualenv
mkvirtualenv vpn; pip install -r requirements.txt -
Execute the playbook
ansible-playbook [options] vpn.yaml -
Execute specifc role(s)
ansible-playbook [options] --tags "openvpn,rsa" vpn.yaml -
Execute sending client profile
ansible-playbook [options] --tags "client,email" vpn.yaml -
Exclude a role
ansible-playbook [options] --skip-tags "client"vpn.yaml
LDAP auth is enabled by default. The OpenVPN client file openvpn-client.ovpn can be imported into a mobile/desktop app which will prompt for the VPN user's LDAP credentials. An OpenVPN LDAP schema can be found in roles/openvpn/files/ldap/openvpn-ldap.schema.
By default this Playbook uses LDAP auth rather than certificate based authentication. While using LDAP auth the client openvpn-client.ovpn file only requires the CA cert and tls-crypt key. One nice advantage of using LDAP auth with OpenVPN is that creating unique client configs is not necessary. The same client config can be distributed to VPN users.
The OpenVPN client config profile can be emailed to the VPN user. Deploying the playbook with client enabled in group_vars/all will prompt for the email address where the client profile should get sent to. The client profile is generated using a template so the appropriate configuration and any number of VPN servers can be imported by desktop and mobile apps.
-
To have the Easy-RSA role generate a new Public Key Infrastructure (PKI), Certificate Authority (CA) and Server certs/keys, the
pkidirectory within/etc/easyrsa/must not be present. The role will not overwrite an existing PKI and related files. -
Currently works on remote hosts running os-families:
- ArchLinux: Arch Linux
- Debian: Ubuntu (needs updated testing)
- MFA/YubiKey support
- Handle more OS families