OpenVPN
Installatie in Ubuntu
Bron: [1]
De installatie van OpenVPN kan eenvoudig via de apt-get repository
apt-get install openvpn
Opbouwen CA
OpenVPN is gebaseerd op een CA systeem. Dit kan je handmatig opbouwen maar hier gebruiken we een set scripts welke bij OpenVPN worden geleverd:
mkdir /etc/openvpn/easy-rsa/ cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
In de vars file kan je de informatie over de CA owner instellen:
vi /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain"
Als dit is aangepast kunnen we verder gaan met het genereren van de keys en het certificaat.
cd /etc/openvpn/easy-rsa/ source ./vars ./clean-all ./build-dh ./pkitool --initca ./pkitool --server server
Kopieren van de files naar de OpenVPN map:
cd keys openvpn --genkey --secret ta.key sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../
Configureren OpenVPN Server
Eerst kopieren we de sample config naar de /etc/openvpn map:
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Daarna passen we deze file aan naar wens. Mijn config zonder het commentaar:
root@vps:/etc/openvpn# grep -v "^\;" server.conf | grep -v ^$ | grep -v ^#
port 1194 proto tcp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 10.8.0.0 255.255.255.0" keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC # AES comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log log openvpn.log verb 4 mute 20
Configureren OpenVPN Client
Om met behulp van Easy-RSA een client aan te maken dien je de volgende commando's uit te voeren:
cd /etc/openvpn/easy-rsa source ./vars ./pkitool [clientname]
Daarna moeten we de client.conf maken:
client remote vps.frotmail.nl 1194 nobind proto tcp ;proto udp ;dev tap dev tun ca ca.crt cert [clientname].crt key [clientname].key tls-auth ta.key 1 cipher AES-256-CBC # AES comp-lzo persist-key persist-tun verb 4
Tenslotte moeten we een aantal files kopieren naar de client:
[clientname].crt [clientname].key client.conf ca.crt ta.key
Deze kan de openvpn client starten met:
openvpn --config client.conf
In deze opstelling heeft iedere client een uniek certificaat nodig en kunnen ze niet dubbel inloggen. Bekijk als je dit anders wil de optie duplicate-cn
Routing
Op de server is het VPN netwerk een 'connected subnet' waardoor alle VPN users kunnen pingen naar de server en terug. Als een user probeert verbindingen te maken naar een ander netwerk aan de server zal hiervoor nog wat extra moeten worden aangepast.
Als je bijvoorbeeld de volgende setup hebt:
[ VPN User ] | [ INTERNET ] | <--- LAN subnet: 10.7.0.0/24 [ WAN Router ] | | | | [ OpenVPN Server ] [ Client ]
Zal de VPN User niet de client kunnen pingen omdat de client niets weet van het VPN netwerk 10.8.0.0/24 Om dit op te lossen zal je op de WAN Router een statische route moeten maken naar het LAN ip van de server. Of, wat nog mooier is, je installeert Quagga en start een OSPF, RIP of BGP router en zorgt voor dynamische routering tussen je WAN Rotuer en OpenVPN server.