OpenVPN
Installation
# apt-get install openvpn
Server configuration
The sample server configuration file that comes with OpenVPN is a good starting point. It will create a VPN using a virtual tun
network interface (for routing), will listen for client connections on udp
port 1194
, and distribute virtual addresses to connecting clients from the 10.8.0.0/24
subnet.
# cd /etc/openvpn/server
# cp /usr/share/openvpn/examples/server.conf .
# vi /etc/openvpn/server/server.conf
The server will start as root, but for security, can be set to drop to lower privileges after startup, by removing the semicolons (uncommenting) the
user nobody
andgroup nogroup
directives.Also uncomment out the
client-to-client
directive if you want clients to not only be able to reach the server over VPN (the default), but also each other.Set the
ca
,cert
,key
, anddh
parameters in the config file to point to the files generated in the PKI setup.If you have set the DH key size to 2048 instead of the default 1024, change
dh dh1024.pem
accordingly.For assigning the different clients static IP addresses from the OpenVPN server, uncomment
client-config-dir ccd
Enabling compression is not recommended; it opens the server up to the VORACLE attack vector.
It is recommended to use OpenVPN over UDP, because TCP over TCP is a bad idea.
Write and quit.
Assign static IP addresses
Create the client configuration directory:
# mkdir /etc/openvpn/ccd
For each client, create a configuration file assigning it to a static IP address. For example:
In /etc/openvpn/ccd/<clientname1>
ifconfig-push 10.8.0.5 10.8.0.6
The first client will use 10.8.0.6 as its IP address, and 10.8.0.5 is the VPN tunnel endpoint. The second address is only used to route traffic through the tunnel. This is because each client uses a CIDR/30 network. Per client 4 IP addresses are used.
In /etc/openvpn/ccd/<clientname2>
ifconfig-push 10.8.0.9 10.8.0.10
And in /etc/openvpn/ccd/<clientname3>
ifconfig-push 10.8.0.13 10.8.0.14
To use a virtual IP address range other than 10.8.0.0/24
, modify the server
directive. Mind that the virtual IP address range must be a private range currently unused on the network.
Firewall server
Limit the incoming OpenVPN connections to the IP addresses of the servers you want the backend server to connect with in the firewall.
Start the OpenVPN server
# systemctl openvpn start
Client configurations
On a client: Copy the example client configuration file
# cd /etc/openvpn/client/
# cp /usr/share/openvpn/examples/client.conf .
# vi /etc/openvpn/client.conf
Make changes:
Add the address of the OpenVPN server to the configuration file: Look for
remote my-server-1 1194
and changemy-server-1
into the IP address of the server.Look for
cert client.crt
andkey client.key
and change them to the names of the keys that were copied over.
Firewall client
Punch a hole for the server address in your firewall.
Fire it up!
# systemctl openvpn start