La configuration suivante permet de créer un serveur VPN sur votre routeur tournant sous OpenWrt. Les options utilisées ici vous permettront de vous connecter au VPN depuis un poste Windows en utilisant le client VPN fourni par Window.

Le fichier /etc/ppp/options

Il contient la configuration commune à toutes les connections PPP.

# désactive les compressions et autres contrôles de connection
noaccomp
nopcomp
nocrtscts

lock # garanti un accès exclusif sur l'interface réseau
maxfail 0 # en cas d'échec, recommence à l'infini

Le fichier /etc/ppp/options.pptpd

Dans ce fichier se trouvent les options du serveur pptp.

Pour fonctionner, le vpn doit être sur un réseau différent de celui de votre LAN.

logfile /tmp/pptp-server.log
192.168.99.1: # L'adresse ip du serveur
auth
name "*"
lcp-echo-failure 3
lcp-echo-interval 60
default-asyncmap
mtu 1482
mru 1482
nobsdcomp
nodeflate
nodefaultroute
proxyarp
ipparam mon_vpn # le nom donné à la connection dans les scripts ip-up et ip-down.

# requis pour que l'on puisse se connecter via une connection vpn "Windows".
mppe required,no40,no56,stateless
require-mschap-v2
refuse-chap
refuse-mschap
refuse-eap
refuse-pap

ms-wins 192.168.99.100 # Si vous disposez d'un serveur wins

Le fichier /etc/ppp/ip-up.d/mon_vpn

Ce fichier ajoute une règle iptable pour autoriser le traffic de la nouvelle connexion.

if [ $6 = "mon_vpn" ]; then
/usr/sbin/iptables -A FORWARD -i $1 -j ACCEPT
exit 0
fi

Le fichier /etc/ppp/chap-secrets

Il contient la liste des utilisateurs autorisés à se connecter au vpn.

#USERNAME PROVIDER PASSWORD IPADDRESS
nom_login * mon_mdp 192.168.99.20

Le fichier /etc/init.d/S51pptpd

Ce script permet de lancer le serveur vpn au démarrage du routeur. Il s'occupe de charger les modules nécessaires à l'établissement des connections et à leur filtrage éventuel par iptables.

#!/bin/sh

BIN=pptpd
DEFAULT=/etc/default/$BIN
RUN_D=/var/run
PID_F=$RUN_D/$BIN.pid
[ -f $DEFAULT ] && . $DEFAULT

case $1 in
start)
mkdir -p $RUN_D
for m in arc4 sha1 slhc ppp_generic ppp_async ppp_mppe_mppc ip_conntrack_proto ip_nat_proto_gre ip_conntrack_proto_gre ip_gre ip_nat_pptp ip_conntrack_pptp; do
insmod $m >/dev/null 2>&1
done
$BIN $OPTIONS
;;
stop)
[ -f $PID_F ] && kill $(cat $PID_F)
;;
*)
echo "usage: $0 (start|stop)"
exit 1
esac

exit $?