Step 1. Install OpenVPN and Easy-RSA
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Extract sample server.conf to /etc/openvpn folder
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Start editing server.conf
sudo nano /etc/openvpn/server.conf
Change dh1024.pem
to dh2048.pem
to double RSA key
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
# dh dh1024.pemdh dh2048.pem
Uncomment push “redirect-gateway def1 bypass-dhcp”push "redirect-gateway def1 bypass-dhcp"
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).push "redirect-gateway def1 bypass-dhcp"
Uncomment push “dhcp-option DNS 208.67.222.222”
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 208.67.222.222"push "dhcp-option DNS 208.67.220.220"
Uncomment both user nobody and group nogroup.
# You can uncomment this out on
# non-Windows systems.user nobody
group nogroup
STEP 2. Enable packet forwarding. Allow Firewall
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo nano /etc/sysctl.conf
Uncomment net.ipv4.ip_forward
net.ipv4.ip_forward=1
For VPN server facing public
Allow ssh
Allow 1194/udp
# Allow VPN to LAN
iptables -I FORWARD -i tun0 -o lan -s 10.8.0.0/24 -d 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
# Allow VPN to WAN
iptables -I FORWARD -i tun0 -o wan -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
# Allow LAN to WAN
iptables -I FORWARD -i lan -o wan -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
#Allow established traffic to pass back and forth
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#Masquerade traffic from VPN to WAN
iptables -t nat -I POSTROUTING -o wan -s 10.8.0.0/24 -j MASQUERADE
#Masquerade traffic from LAN to WAN
iptables -t nat -I POSTROUTING -o wan -s 192.168.1.0/24 -j MASQUERADE
#Masquerade traffic from VPN to LAN (if LAN hosts dont' use VPN server default gateway)iptables -t nat -A POSTROUTING -o lan -d 192.168.1.0/24 -j MASQUERADE
####### This is the same as MASQUERADING VPN to LANiptables -t nat -A POSTROUTING -o lan -d 192.168.1.0 -j SNAT --to-source 192.168.1.241
For VPN server behind firewall
STEP 3. Create Certificate Authority (only run once!)
Copy Easy-RSA generation scripts to /etc/openvpn
cp -r /usr/share/easy-rsa/ /etc/openvpn
Make the key storage directory
mkdir /etc/openvpn/easy-rsa/keys
Make your key personal by entering your info
sudo nano /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="SG"
export KEY_PROVINCE="SG"
export KEY_CITY="Singapore"
export KEY_ORG="My Company Name"
export KEY_EMAIL="your@email.com";
export KEY_OU="ClientOrganizationalUnit"export KEY_NAME="server"
Generate Diffie-Hellman parameters
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Move to /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa
Initialize the PKI (Public Key Infrastructure)
. ./vars
Since we haven’t generated anything in the keys directory yet, the warning is nothing to be concerned about
“NOTE: If you run ./clean-all, it will be doing a rm -rf on /etc/openvpn/easy-rsa/keys”
Now we’ll clear the working directory of any possible old or example keys to make way for our new ones.
./clean-all
Builds certificate authority (CA) by invoking an interactive OpenSSL command
Prompt you to confirm Easy-RSA’s variables.
Simply press ENTER to pass through each prompt.
./build-ca
Remember that this step (generating Certificate Authority) should only run once.!
STEP 4. Server-side Certificate & Key
Generate a Certificate and Key for the Server
Still working from /etc/openvpn/easy-rsa folder, execute below.
./build-key-server server
(“server” refers to the export KEY_NAME variable entered in Easy-RSA vars)
Just press ENTER to pass through each one.
A challenge password []:
An optional company name []:
Answer Y to additional two queries below.
Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]
Move the Server Certificates and Keys
OpenVPN expects server’s CA(certificate and key) in /etc/openvpn.
Let’s copy them into the proper location.
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
Start OpenVPN
service openvpn start
service openvpn status
Troubleshooting
Look at /var/log/syslog for OpenVPN errors
Options error: –key fails with ‘server.key’: No such file or directory
STEP 5. Generate Certificates and Keys for Clients
From location /etc/openvpn/easy-rsa execute below command
./build-key client_name1
./build-key client_name2
./build-key client_name3
Press ENTER to accept the defaults.
Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]
In the copy process, we will change file extension for clients to use later.
Example from client_name1.conf
to client_name1.ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client_name1.ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client_name2.ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client_name3.ovpn
STEP 6. Transferring Certificates and Keys to Client Devices
Requires clients certificate and key to be located in server.
/etc/openvpn/easy-rsa/keys/client_name1.crt
/etc/openvpn/easy-rsa/keys/client_name1.key
/etc/openvpn/easy-rsa/keys/client_name2.crt
/etc/openvpn/easy-rsa/keys/client_name2.key
The ca.crt
and client.ovpn
are the same for all client devices.
The ca.crt
and client.ovpn
are located at the following location.
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/client.ovpn
Securely copy out client_name1.key
file
scp root@vpn.server.com:/etc/openvpn/easy-rsa/keys/client_name1.key Downloads/
Make sure you have the following 4 files for your client
client_name1.crt
client_name1.key
client.ovpn
ca.crt
STEP 7. Create a Unified OpenVPN profile for client
Edit client_name1.ovpn
and enter your vpn ip address
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remotex.x.x.x
1194
Uncomment user nobody and group nogroup
# Downgrade privileges after initialization (non-Windows only)user nobody
group nogroup
Insert certificate and key
# SSL/TLS parms.
# . . .
#ca ca.crt
#cert client.crt
#key client.key
<ca>
(insert ca.crt here)
</ca>
<cert>
(insert client1.crt here)
</cert>
<key>
(insert client1.key here)
</key>
Save client.ovpn and deploy at client device
STEP 8. Deploy Client profile
Download OpenVPN client
https://openvpn.net/index.php/open-source/downloads.html
Save client_name1.ovpn
file at the following location
C:\Program Files\OpenVPN\config\client.ovpn
Always run as Administrator