Ziirish's Home :: Blog

Ziirish's Pub

 
 

Comme d'habitude, je n'ai aucune inspiration pour le titre aujourd'hui. Je profite donc de ce premier post de l'année pour faire dans le basique...

Passées ces formalités, nous pouvons revenir aux choses plus sérieuses... En effet, je vous parlais avant les vacances d'une petite nouveauté dans mon "infrastructure" réseau.

Il s'agit de configurer un petit VPN pour relier mes machines distantes et de modifier la route par défaut d'une partie de mes machines pour que tout le monde sorte par le même endroit.

Lors de la mise en place de cette configuration, je me suis mangé un joli RTFM, et effectivement, j'ai trouvé tout ce dont j'avais besoin dans la bible d'OpenVPN

Mais comme je suis gentil et que j'aime parler pour ne rien dire (ça fait plein de lignes en plus sur mon blog \o/ ), je vais vous détailler un peu le paramétrage.

On commence par créer nos différents certificats et clés :


% mkdir ~/openvpn
% cp -R /usr/share/doc/openvpn/examples/easy-rsa/ ~/openvpn/
% cd ~/openvpn/easy-rsa/2.0
% cat vars
# easy-rsa parameter settings

# NOTE: If you installed from an RPM,
# don't edit this file in place in
# /usr/share/openvpn/easy-rsa --
# instead, you should copy the whole
# easy-rsa directory to another location
# (such as /etc/openvpn) so that your
# edits will not be wiped out by a future
# OpenVPN package upgrade.

# This variable should point to
# the top level of the easy-rsa
# tree.
export EASY_RSA="`pwd`"

#
# This variable should point to
# the requested executables
#
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"


# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`

# Edit this variable to point to
# your soon-to-be-created key
# directory.
#
# WARNING: clean-all will do   
# a rm -rf on this directory   
# so make sure you define
# it correctly!
export KEY_DIR="$EASY_RSA/keys"

# Issue rm -rf warning
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR

# PKCS11 fixes
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"

# Increase this to 2048 if you 
# are paranoid.  This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=1024

# In how many days should the root CA key expire?
export CA_EXPIRE=3650

# In how many days should certificates expire?
export KEY_EXPIRE=3650

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="FR"
export KEY_PROVINCE="Région"
export KEY_CITY="Ville"
export KEY_ORG="Ziirish"
export KEY_EMAIL="toto@domain.tld"
% . ./vars
% ./clean-all
% ./build-ca
% ./build-dh
% ./build-key-server <nom_du_serveur>

Tout ça, ça nous crée nos certificats et autres clés. Ensuite, on configure notre serveur (on commence par placer les certificats dans un endroit plus approprié)


% cp keys/{server.key,server.crt,dh1024.pem,ca.crt} /etc/openvpn/
% cat /etc/openvpn/server.conf
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
verb 3
% /etc/init.d/openvpn start

Puis on crée les clés et autres certificats de nos clients (à répéter autant de fois qu'on a de clients en changeant par le bon nom) :


% cd ~/openvpn/easy-rsa/2.0
% ./build-key <client>

On configure tout de suite notre serveur pour qu'il autorise les clients à l'utiliser comme passerelle. Pour ça on active l'IP forwarding, et on instaure une règle de NAT.


% echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
% sysctl -p
net.ipv4.ip_forward = 1
% iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Il ne nous reste plus qu'à configurer nos clients. Pour cela, nous aurons besoin de récupérer sur le serveur certains fichiers :


% scp root@server:easy-rsa/2.0/keys/{ca.crt,client.crt,client.key} /etc/openvpn/
% cat /etc/openvpn/client.conf
client
dev tun
proto tcp
remote <ip_du_serveur> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3
redirect-gateway def1

C'est cette dernière ligne qui s'occupera de configurer correctement nos routes.

On démarre le client, and voilà, l'accès à l'interweb passe par le tunnel pour sortir ailleurs, comme Oudini !