Setup OpenVPN Server on Debian

Previously I explained how to setup a PPTP VPN server on Debian and that’s plenty for the average user. In this article I will explain how to setup an OpenVPN server on Debian.

Why OpenVPN instead of PPTP?

To put it simply, OpenVPN is much more secure and works better. For example, on PPTP you can expect speeds to reach 10mbps. On OpenVPN you can generally expect to reach upwards of 60mbps. Aside from this, OpenVPN offers certificate based authentication, which we will be setting up in this guide.

Lets get started with the server setup

Install OpenVPN

apt-get install openvpn

By default, the easy-rsa scripts are installed under the “/usr/share/easy-rsa/” directory. So, we need to copy these scripts to a desired location, such as: /etc/easy-rsa.

mkdir /etc/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/easy-rsa

Generate Certificates

nano /etc/easy-rsa/2.0/vars

Scroll to the bottom and modify to the following, example:

export KEY_COUNTRY="US"
export KEY_PROVINCE="FL"
export KEY_CITY="Tampa"
export KEY_ORG="Akensai"
export KEY_EMAIL="[email protected]"
export KEY_CN=vpn.akensai.com
export KEY_NAME=vpn.akensai.com
export KEY_OU=Admin
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

Export the values

source ./vars

Cleanup any old certificates

./clean-all

Generate CA.crt and CA.key

./build-ca

Generate Server Certificate

./build-key-server server

Generate Diffie Hellman

./build-dh

Generate Client Certificate. Each user needs their own certificate. For example, the following would be for user ‘akensai’.

./build-key akensai
Configure OpenVPN

Copy certificates to readable directory

mkdir /etc/openvpn/certs
cp /etc/easy-rsa/2.0/keys/* /etc/openvpn/certs

Create server configuration

nano /etc/openvpn/server.conf

Paste the below and save the file.

port 1999
proto udp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/certs/server.key
dh /etc/openvpn/certs/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log /etc/openvpn/server.log
verb 3
plugin /usr/lib/openvpn/openvpn-auth-pam.so login

Set OpenVPN to run on boot

update-rc.d -f openvpn defaults

Start OpenVPN Service

service openvpn restart
Configure the server networking

If you are not already running PPTP or any other VPN’s you will need to configure some server level networking to insure you can make and keep a good connection to the OpenVPN server. These are also detailed in the tutorial for PPTP on Linux.

Enable IP Forwarding

nano /etc/sysctl.conf

Find and uncomment:

#net.ipv4.ip_forward=1

Echo changes for good measure:

sysctl -p

Set iptables rules to allow for forwarding

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Set default MTU rules via iptables:

iptables -o eth0 -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu

Create iptables script

nano /etc/iptables.sh

Enter the following rules and save the file

#!/bin/sh
IPT="/sbin/iptables"

# VPN Routing
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPT -o eth0 -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu

Give iptables.sh the proper permissions

chown root /etc/iptables.sh
chmod 700 /etc/iptables.sh

Set the script to run on boot

nano /etc/network/interfaces

And the following to the bottom of the file and save it

pre-up /etc/iptables.sh
Installation and Configuration complete!

You should now have a working OpenVPN server. Now we just need to create the configuration files for the client (us) to connect to it.

OpenVPN Client

For Windows, I use this client. There are many to choose from and they all work pretty much the same. So take your pick. Let’s move onto actually configuring your new OpenVPN Client.

OpenVPN Client Configuration Example

This example is based on the configuration entered during the server configuration above.

In your OpenVPN client, create a new client configuration, for example

vpn-akensai-com.ovpn

Paste the following in the file, replacing the certificate files as your own scheming goes, for example

client
dev tun
proto udp
remote vpn.akensai.com 1999
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert akensai/akensai.crt
key akensai/akensai.key
ns-cert-type server
verb 3

You will need to copy over your certificate files from the server to a place you can call them in the above configuration, these are for example:-

ca.crt
server.crt
server.key
akensai.crt
akensai.key

You can copy these via FTP, SCP, etc – or the good ol’ fashion way of opening them in nano/vim and copy/pasting the contents to duplicate files on your desktop.

Almost done!

I suggest rebooting the server if nothing else is running on it. This insures that the everything starts up as normal in the event of a crash, downtime, etc. If you find your server is not working, go back over the steps above and be sure you did everything.

Notice

This tutorial assumes you have a good working knowledge of Linux based systems. This was not written for beginners. If you have any questions or feedback feel free to leave a comment or contact me directly.

Similar Posts