Een virtual private network (VPN) is een vertrouwde, veilige verbinding tussen een lokaal netwerk (LAN) en een ander netwerk. Denk aan uw router als de middelste man tussen de netwerken die je verbinding maakt. Zowel je computer en de OpenVPN server (de router in dit geval) “schudden handen met elkaar” met behulp van certificaten die elkaar valideren. Pas als bij de validatie zowel de client als de server het eens zijn en elkaar vertrouwen, zal de klant toegang krijgen op het netwerk van de server.

VPN software en hardware kost normaal gesproken erg veel geld om deze te deployen. OpenVPN is echter een open-source VPN-oplossing die helemaal gratis is! De Tomato Firmware, die OpenVPN Server ondersteuning heeft,  is een perfecte oplossing voor iedereen die gratis een beveiligde verbinding tussen twee netwerken wilt opzetten. In deze blog leg ik uit hoe je OpenVPN opzet tussen je Router met Tomato firmware en je IOS device. Voor meer informatie over OpenVPN kun je het beste de officiële site van OpenVPN bezoeken.

Voor het creëren van de diverse keys gaan we eerst OpenVPN downloaden van de site van OpenVPN. In deze blog ga ik ervan uit dat je de 64-bit versie gebruikt.

Nadat je de software hebt geinstalleerd open je een DOS Command prompt als Administrator en ga je naar c:\Program Files\OpenVPN\easy-rsa en voer het init-config commando uit:

init-config

Open nu de files vars.bat in deze directory met een editor en pas KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, en KEY_EMAIL waarden aan en save de file.

Ga vervolgens weer naar de DOS Command prompt en typ de volgende commando’s:

vars
clean-all
build-ca

De meeste waarden kun je zo over nemen. Het is echter belangrijk dat je de ‘Common Name’ invult met een waarde. Kies hiervoor bijvoorbeeld je naam of hostnaam van je server.

Typ vervolgens het volgende commando in:

build-key-server server

Je kunt hier de default waarden overnemen. Geef echter bij ‘Common Name’ de waarde “server” op. Geef verder “y” op bij de ‘Sign the certificate? [y/n]’ and ‘1 out of 1 certificate requests certified, commit? [y/n]’ vragen.

Op dezelfde manier gaan we nu nog certificaten voor de client aanmaken. Ook dit gebeurt in de DOS command prompt. Geef hiervoor het volgende commando op:

build-key iPhone

Zorg er weer voor dat de parameter die je meegeeft ook als waarde gebruikt in ‘Common Name’.

Tenslotte moeten we nog de zogenaamde Diffie Hellman parameter file genereren met het volgende commando:

build-dh

Hierna kun je de volgende files vinden in je ‘keys’ sub-directory:

Filenaam Nodig door Doel Veilig
ca.crt server + alle cliënten Root CA certificaat nee
ca.key key signing device Root CA key ja
dh{n}.pem server Diffie Hellman parameters nee
server.crt server Server certificaat nee
server.key server Server key ja
iPhone.crt iPhone client iPhone certificaat nee
iPhone.key iPhone client iPhone key ja
Een static key kun je overigens genereren door het volgende commando:

"C:\Program Files\OpenVPN\bin\openvpn.exe" --pause-exit --verb 3 --genkey --secret "C:\Program Files\OpenVPN\config\key.txt"

Copieer nu de betreffende inhoud van de gegenereerde files (afhankelijk van je Authorization Mode) bij Tomato in de OpenVPN Server naar de Keys sectie volgens onderstaand overzicht:

Ik heb zelf voor Authorization Mode ‘TLS’ gekozen. Stel in dat geval in je Tomato firmware alles in volgens onderstaande screenshots:
Van de betreffende file hoe je alleen maar het key/certificaat stuk over te nemen.

Tenslotte moet je je OpenVPN server starten door op de [Start Now] button te drukken.

Nu moeten we de configuratie file voor de client gaan creëren. In de directory ‘C:\Program Files\OpenVPN\sample-config\’ kun je voorbeelden vinden. Copieer de file ‘client.ovpn’ naar ‘iPhone.ovpn’ en edit deze in een editor. Pas de waarden voor ‘dev’, ‘proto’, ‘remote’, ‘ca’, ‘cert’ en ‘key’ aan.

##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server. #
# #
# This configuration can be used by multiple #
# clients, however each client should have #
# its own cert and key files. #
# #
# On Windows, you might want to rename this #
# file so it has a .ovpn extension #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one. On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server? Use the same setting as
# on the server.
;proto tcp
proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote eye-vision.homeip.net 1194
;remote my-server-2 1194

# Choose a random host from the remote
# list for load-balancing. Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here. See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets. Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
ca ca.crt
cert iPhone.crt
key iPhone.key

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server". This is an
# important precaution to protect against
# a potential attack discussed here:
# http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server". The build-key-server
# script in the easy-rsa folder will do this.
ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20

Installeer nu op je iPhone de OpenVPN App. Je moet ook nog de files ‘iPhone.ovpn’, ‘ca.crt’, ‘iPhone.crt’ en ‘iPhone.key’ op je iPhone krijgen. Dit doe je door in iTunes naar je Device te gaan en in de Apps tab OpenVPN te selecteren. Scroll vervolgens naar beneden en voeg deze files toe aan het File Sharing window. Synchroniseer tenslotte je iPhone met iTunes.

Start nu de OpenVPN applicatie op je iPhone. Je krijgt het volgende scherm te zien
Druk op de [+] button om je profiel toe te voegen. Vervolgens kun je in het volgende scherm connecten met je OpenVPN server op je router met Tomato firmware.
Op je iPhone zul je rechtsbovenaan het [VPN] teken zien ten teken dat je via een veilige VPN connectie verbinding maakt met je router thuis.