sommaire
Serveur OpenVPN

Installation:
version 2.1.3-2+squeeze1
apt-get install openvpn


Configuration:

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

Edition du fichier /etc/openvpn/easy-rsa/vars, à la fin du fichier:

export KEY_COUNTRY="FR"
export KEY_PROVINCE="IDF"
export KEY_CITY="Puteaux"
export KEY_ORG="fredaria.org"
export KEY_EMAIL="openvpn@fredaria.org"

Générer les clefs et les certificats:

Pour le serveur:

depuis /etc/openvpn/easy-rsa/
. ./vars
./clean-all
./build-dh
./build-ca  
La réponse aux questions: laisser par défaut si tout a bien été rempli dans le fichier /etc/openvpn/easy-rsa/vars


./build-key-server vpn-server
La réponse aux questions: laisser par défaut si tout a bien été rempli dans le fichier /etc/openvpn/easy-rsa/vars.

Choisir ou pas de mettre un "challenge password "
_________________________________________________________________
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'FR'
stateOrProvinceName   :PRINTABLE:'IDF'
localityName          :PRINTABLE:'Puteaux'
organizationName      :PRINTABLE:'fredaria.org'
commonName            :PRINTABLE:'vpn-server'
emailAddress          :IA5STRING:'openvpn@fredaria.org'
Certificate is to be certified until May 26 12:24:12 2023 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
_________________________________________________________________

Pour un client:
./build-key vpn-client1

Le "Common name" est important
_________________________________________________________________
-----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [IDF]:
Locality Name (eg, city) [Puteaux]:
Organization Name (eg, company) [fredaria.org]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [vpn-client1]:
Name []:
Email Address [openvpn@fredaria.org]:
_________________________________________________________________

Création de la clé spéciale pour plus de sécurtité
openvpn --genkey --secret keys/ta.key

S'assurer enfin que toute les clés soient dans le répertoire mis dans /etc/openvpn/serveur.conf . Ici /etc/openvpn/easy-rsa/keys/

Ajout d'un utilisateur et d'un groupe dédié au processus:

groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn

Fichier de configuration serveur:  le serveur sur le réseau 192.168.0.0/24 donnera un ip sur une autre plage 192.168.80.0/24

local 192.168.0.9
port 1443
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpn-server.crt
key /etc/openvpn/easy-rsa/keys/vpn-server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 192.168.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.3"
client-to-client
duplicate-cn                                                   # cette ligne permet de n'avoir qu'un seul certificat pour tous les clients / à commenter au en fonction des besoins
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key   # cette clé doit être présent sur chaque client
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 4

Ce qu'il reste à faire:

-Routage:
La partie "push route" permet d'accèder aux réseaux ajoutés. Il faut donc que la passerelle de chaque réseau soit modifiée pour prendre en compte le nouveau routage
Dans ce cas là:
le réseau 192.168.0.0/24 à pour routeur 192.168.0.1
Ce routeur doit donc être modifier en ajoutant la route permettant d'aller sur 192.168.1.0/24 via 192.168.0.9
Avec un routeur sous GNU/Linux cela pourrait se faire via:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.9

-Firewall:
Penser à ouvrir le port 1443 mis dans le fichier server.conf.
Dans le cas d'une DMZ nattée il faudra aussi rediriger le port 1443 vers le serveur OpenVPN

-DNS:
Dans le cas d'une configuration DNS (via BIND) gérant les ACL et les vues il faut ajouter ce nouveau réseau dans la configuration de bind.

Exemple: vous avez un serveur BIND qui gère la résolution dns différement que l'on l'interroge depuis le LAN ou le WAN =>
Il faut ajouter le 192.168.1.0 dans l'ACL de la vue du LAN pour passer de:

acl "LAN" {
        192.168.0/24;
        127.0.0.0/24;
};

vers:

acl "LAN" {
        192.168.0/24;
        192.168.1/24;
        127.0.0.0/24;
};

-Configuration des clients
Cette ligne:
push "dhcp-option DNS 192.168.0.3"
ne sert que pour les machines sous Windows

Pour un client, par exemple, sous Android il faudra ajouter en dure le serveur dns et/ou le nom de domaine:
dhcp-option DNS ip_serveur_dns
dhcp-option DOMAIN mondomain.org.



Précisions:

Pourquoi ne pas prendre le port 443 pour faire un "vrai vpn SSL" ?
Dans le cas d'un accès internet avec une seul ip publique si l'on prend le port 443 pour openvpn on ne pourra pas utiliser le protocol SSL (sur le 443) avec un serveur HTTP
pour, par exemple, sécuriser un accès HTTP typiquement un webmail (afin d'eviter que les identifiants ne passe pas en clair dans la connexion TCP).

Maintenant vous avez des clients VPN qui se trouvant sur la plage 192.168.80.0/24 qui peuvent accèder aux ressources de la plage locale 192.168.0.0/24. Cette configuration laisse à l'ordinateur client ses routes d'origine pour le reste des accès => L'accès internet de la machine cliente se fait toujours par sa passerelle par défaut.