Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] VPN sous ms-chap-v2 et mppe
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
GaMeS
Guru
Guru


Joined: 08 Nov 2005
Posts: 374
Location: Nantes

PostPosted: Thu Oct 04, 2007 10:45 pm    Post subject: [TIP] VPN sous ms-chap-v2 et mppe Reply with quote

Suite à mes différents test en tout genre, je vous fais profiter de mes nouvelles trouvailles :)

(MAJ le 05 octobre 2007)


  • 1. Introduction
  • 2. Configuration du noyau (>= 2.6.20)
  • 3. Le logiciel ppp

    • 3.1 Installation
    • 3.2 Configuration du VPN

      • 3.2.1 /etc/ppp/peers/VPN_NAME
      • 3.2.2 /etc/ppp/options.VPN_NAME
      • 3.2.3 /etc/ppp/chap-secrets
      • 3.2.4 /etc/conf.d/net

    • 3.3 Lancement et premiers tests

  • 4. Problème de routage VPN



1. Introduction
Ce TIP va aborder les différentes étapes de la mise en place d'un client VPN pour un serveur fonctionnant sous authentification ms-chap-v2 et l'encapsulation mppe.

2. Configuration du noyau
Seule la branche 2.6.20 du kernel intègre la gestion de Microsoft Point-to-Point Encryption. Je vous invite très fortement à installer la derniere version en date du kernel pour profiter des dernières mise à jour concernant ce protocole.

Activation du protocole MPPE
Device Drivers
Network device Support
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
<*> PPP MPPE compression (encryption) (EXPERIMENTAL)
<*> PPP over Ethernet (EXPERIMENTAL)

Activez également l'ensemble des Cryptographic options pour permettre d'avoir un plus grand pannel des encryptions.


3. Le logiciel ppp

Le logiciel ppp permet la création d'un lien sur beaucoup de support, tel que les connections modems, WAN, ou tty.
D'une manière générale, il crée une nouvelle interface réseau servant de point d'entrée au niveau réseau virtuel privé.

3.1 Installation
Il est très conseiller d'obtenir la dernière version de net-dialup/ppp permettant ainsi des dernières fonctionnalitées liées à MPPE.

Code:

echo "net-dialup/ppp ~amd64">>/etc/portage/package.keywords


On active également l'utilisation de mppe dans ppp et on lance son installation
Code:

echo "net-dialup/ppp mppe-mppc">>/etc/portage/package.use
emerge -va net-dialup/ppp


3.2 Configuration

Pour créer un VPN, il faut au préalable configurer les fichiers suivants.

  • /etc/ppp/peers/NOM_DU_VPN (spécifications des protocoles, du nom d'hôte, etc...)
  • /etc/ppp/options.VPN_NAME (définition du mode de fonctionne des protocoles, authentification, mtu, etc...)
  • /etc/ppp/chap-secrets (définition de l'identifiant et du mot de passe sur le VPN_NAME)
  • /etc/conf.d/net (définition des différents paramètres liée à l'interface local du VPN)


3.2.1 /etc/ppp/peers/NOM_DU_VPN

Le fichier s'ordonne de la façon suivante.

Quote:

pty "pptp VPN_HOST --nolaunchpppd"
name VPN_USERNAME
require-mschap-v2
remotename VPN_NAME
file /etc/ppp/options.VPN_NAME
ipparam VPN_NAME


D'une manière moins générique cela donne ceci.

Quote:

pty "pptp vpn.supinfo.com --nolaunchpppd"
name blob
require-mschap-v2
remotename supinfo
file /etc/ppp/options.supinfo
ipparam supinfo


3.2.2 /etc/ppp/options.VPN_NAME

Dans le fichier de configuration suivant, il ne faut surtout pas oublier de spécifier mppe stateless sinon vous risquez d'obtenir une erreur de protocole MPPE.

Quote:

lock
noauth
defaultroute
nobsdcomp
nodeflate
mtu 1000
mru 1000
mppe stateless
lcp-echo-failure 10
lcp-echo-interval 10


3.2.3 /etc/ppp/chap-secrets

Quote:

VPN_USERNAME VPN_NAME VPN_PASSWORD *
VPN_NAME VPN_USERNAME VPN_PASSWORD *


3.2.4 /etc/conf.d/net

Le nom de l'interface est tout à fait configurable en PPP9 si vous le souhaitez.

Quote:

config_PPP0=( "ppp" )
pppd_PPP0=(
"persist"
"call VPN_NAME"
"holdoff 10"
"mru 1460"
"mtu 1460"
"idle 600"
)
link_PPP0="pty \"pptp VPN_HOST --nolaunchpppd\""


3.3 Lancement et premiers tests

Pour son premier lancement, n'hésitez pas à être dans un mode debug pon VPNNAME debug dump logfd 2 nodetach.

Quote:

geekb0x ppp # pon supinfo debug dump logfd 2 nodetach
pppd options in effect:
debug # (from command line)
nodetach # (from command line)
logfd 2 # (from command line)
dump # (from command line)
noauth # (from /etc/ppp/options.supinfo)
name XXXXX # (from /etc/ppp/peers/supinfo)
remotename supinfo # (from /etc/ppp/peers/supinfo)
# (from /etc/ppp/options.supinfo)
pty pptp vpn.supinfo.com --nolaunchpppd # (from /etc/ppp/peers/supinfo)
mru 1000 # (from /etc/ppp/options.supinfo)
mtu 1000 # (from /etc/ppp/options.supinfo)
lcp-echo-failure 10 # (from /etc/ppp/options.supinfo)
lcp-echo-interval 10 # (from /etc/ppp/options.supinfo)
ipparam supinfo # (from /etc/ppp/peers/supinfo)
defaultroute # (from /etc/ppp/options.supinfo)
nobsdcomp # (from /etc/ppp/options.supinfo)
nodeflate # (from /etc/ppp/options.supinfo)
mppe xxx # [don't know how to print value] # (from /etc/ppp/options.supinfo)
using channel 54
Using interface ppp1
Connect: ppp1 <--> /dev/pts/3
sent [LCP ConfReq id=0x1 <mru 1000> <asyncmap 0x0> <magic 0xbba44c3> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <mru 1400> <auth chap MS-v2> <magic 0x2f4a36ef> <pcomp> <accomp> <callback CBCP> <mrru 1614> <endpoint [local:4c.d4.c2.76.4f.37.4e.8f.bf.4c.94.ca.45.4a.b3.4e.00.00.00.00]> < 17 04 3c 3d>]
sent [LCP ConfRej id=0x0 <callback CBCP> <mrru 1614> < 17 04 3c 3d>]
rcvd [LCP ConfAck id=0x1 <mru 1000> <asyncmap 0x0> <magic 0xbba44c3> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <mru 1400> <auth chap MS-v2> <magic 0x2f4a36ef> <pcomp> <accomp> <endpoint [local:4c.d4.c2.76.4f.37.4e.8f.bf.4c.94.ca.45.4a.b3.4e.00.00.00.00]>]
sent [LCP ConfAck id=0x1 <mru 1400> <auth chap MS-v2> <magic 0x2f4a36ef> <pcomp> <accomp> <endpoint [local:4c.d4.c2.76.4f.37.4e.8f.bf.4c.94.ca.45.4a.b3.4e.00.00.00.00]>]
sent [LCP EchoReq id=0x0 magic=0xbba44c3]
rcvd [CHAP Challenge id=0x0 <b517c8fa144f90b866ff326c1926034c>, name = "VPN-PAR-FR"]
sent [CHAP Response id=0x0 <1d585177a379a6cc943be0880e10be6200000000000000000b711a819019af88b47d6f2c6854fcb19a4fcc5660b66d0c00>, name = "XXXXX"]
rcvd [LCP EchoRep id=0x0 magic=0x2f4a36ef]
rcvd [CHAP Success id=0x0 "S=32F47A37ADEF6C9224F17400EA6D70AD9BE6CBD3"]
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
rcvd [CCP ConfReq id=0x3 <mppe +H +M +S +L -D +C>]
sent [CCP ConfReq id=0x1 <mppe -H -M -S -L -D -C>]
sent [CCP ConfNak id=0x3 <mppe +H -M +S -L -D -C>]
rcvd [IPCP ConfReq id=0x4 <addr 10.1.80.50>]
sent [IPCP ConfAck id=0x4 <addr 10.1.80.50>]
rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
sent [IPCP ConfReq id=0x2 <addr 0.0.0.0>]
rcvd [CCP ConfNak id=0x1 <mppe -H -M +S -L -D -C>]
sent [CCP ConfReq id=0x2 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfReq id=0x5 <mppe +H -M +S -L -D -C>]
sent [CCP ConfAck id=0x5 <mppe +H -M +S -L -D -C>]
rcvd [IPCP ConfNak id=0x2 <addr 10.1.80.51>]
sent [IPCP ConfReq id=0x3 <addr 10.1.80.51>]
rcvd [CCP ConfAck id=0x2 <mppe +H -M +S -L -D -C>]
MPPE 128-bit stateless compression enabled
rcvd [IPCP ConfAck id=0x3 <addr 10.1.80.51>]
not replacing existing default route to eth0 [192.168.0.254]
local IP address 10.1.80.51
remote IP address 10.1.80.50
Script /etc/ppp/ip-up started (pid 15243)
Script /etc/ppp/ip-up finished (pid 15243), status = 0x0

Sinon, pour son utilisation quotidienne un simple pon VPNNAME suffit :)

Par defaut, le VPN doit nous obtenir une adresse passerelle (grâce à l'option defaultroute du fichier /etc/ppp/options.VPN_NAME). Si ce n'est pas le cas, c'est certainement que vous avez un routeur ou tout équipement qui vous a déjà fourni une passerelle par defaut. Je vous invite à suivre le paragraphe 4 Problème de routage VPN pour supprimer de désagrément.

4. Problème de routage VPN

Si dans le debug de la connection vous obtenez ceci not replacing existing default route to eth0 [192.168.0.254] c'est que comme bon nombre de personne vous utilisez le mode DHCP pour votre eth0.

La méthode dite "manuelle" sera de créer votre route à la main à chaque démarrage du vpn.
Quote:

route add -net NETWORK netmask MASK dev DEVICE_PPP


Une méthode plus conventionnelle dirons-nous, va être d'intégré un petit script qui détecte l'adresse réseau de destination, le device pour ajouter cette route automatique.
C'est chose faite, j'ai conçu un petit script vraiment très pratique qui répare ce problème.

Editez le fichier /etc/ppp/ip-up, le nouveau s'apparente à ceci.

Quote:


#!/bin/bash

# this is a script which is executed after connecting the ppp interface.
# look at man pppd for details

# the followings parameters are available:
# $1 = interface-name
# $2 = tty-device
# $3 = speed
# $4 = local-IP-address
# $5 = remote-IP-address
# $6 = ipparam

if [ "$USEPEERDNS" ]; then

if [ -x /sbin/resolvconf ]; then
conf="# Generated by ppp for $1\n"
[ -n "$DNS1" ] && conf="${conf}nameserver $DNS1\n"
[ -n "$DNS2" ] && conf="${conf}nameserver $DNS2\n"
echo -e "$conf" | resolvconf -a "$1"
else
# add the server supplied DNS entries to /etc/resolv.conf
# (taken from debian's 0000usepeerdns)

# follow any symlink to find the real file
REALRESOLVCONF=$(readlink --canonicalize /etc/resolv.conf)

if [ "$REALRESOLVCONF" != "/etc/ppp/resolv.conf" ]; then

# merge the new nameservers with the other options from the old configuration
{
grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF
cat /etc/ppp/resolv.conf
} > $REALRESOLVCONF.tmp

# backup the old configuration and install the new one
cp -dpP $REALRESOLVCONF $REALRESOLVCONF.pppd-backup
mv $REALRESOLVCONF.tmp $REALRESOLVCONF

# correct permissions
chmod 0644 /etc/resolv.conf
chown root:root /etc/resolv.conf
fi
fi

fi

if [ -x /etc/init.d/net.$1 ]; then
if ! /etc/init.d/net.$1 --quiet status ; then
export IN_BACKGROUND="true"
/etc/init.d/net.$1 --quiet start
fi
fi

[ -f /etc/ppp/ip-up.local ] && . /etc/ppp/ip-up.local "$@"


#######################################"
############ MODIFICATIONS################
#######################################

# Ajout de la route automatique vers le PPTP
# Gamez
# makeperl@gmail.com


# Parse de l'adresse ip
#
# parse_ip adresseip
# renvoie OCTET1
#######################################
function parse_ip () {

local IP=$1

if [ -n "$IP" ]
then
OCTET1IP=$(echo "$IP" | cut -d "." -f 1)
fi
}

# Detecte le masque reseau
# suivant OCTET1IP
#
# renvoie IPROUTE // renvoie l'adresse réseau par defaut
# renvoie MASKROUTE //masque par defaut de la classe
######################################
function detect_mask() {

RETURNACTION="FALSE";

if [ -n "$OCTET1IP" ]
then
case "$OCTET1IP" in
10)
IPROUTE="10.0.0.0";
MASKROUTE="255.0.0.0";
CIDR="8";
RETURNACTION="TRUE";
;;
172)
IPROUTE="172.16.0.0";
MASKROUTE="255.255.0.0";
CIDR="16";
RETURNACTION="TRUE";
;;
192)
IPROUTE="192.168.0.0";
MASKROUTE="255.255.255.0";
CIDR="24";
RETURNACTION="TRUE";
;;
*)
RETURNACTION="FALSE";
;;
esac
fi
}

DEV=$1;
LOCALIP=$4;
LOGFILE='/var/log/logRoute';
FORMATDATE='%d/%m/%Y-%T';

if [ -n "$LOCALIP" ] # if the local ip address is present
then
parse_ip $LOCALIP;
if [ -n "$OCTET1IP" ] # if we have the first octet
then
detect_mask $OCTET1IP ;
if [ -n "$RETURNACTION" ] && [ "$RETURNACTION" != "FALSE" ] # if we have the mask
then
route add -net $IPROUTE netmask $MASKROUTE dev $DEV
echo "`date +$FORMATDATE` Routing $IPROUTE/$CIDR via $DEV" >> $LOGFILE;
else
echo "`date +$FORMATDATE` Searching mask failled" >> $LOGFILE;
fi
else
echo "`date +$FORMATDATE` The first octet is not found" >> $LOGFILE;
fi
else
echo "`date +$FORMATDATE` Local ip of the VPN connection is not found" >> "$LOGFILE";
fi



Maintenant la route est correctement créée.
Quote:

geekb0x ppp # route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
10.1.80.50 * 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 0 ppp0
loopback * 255.0.0.0 U 0 0 0 lo
default 192.168.0.254 0.0.0.0 UG 0 0 0 eth0


Une fonction de log est également disponible pour permettre d'avoir un visuel sur le bon fonctionnement (ou non) du script.
Celui-ci est disponible par defaut dans /var/tmp/logRoute et modifiable dans le script via la modification de la valeur LOGFILE.

Quote:

geekb0x ppp # cat /var/log/logRoute
04/10/2007-00:51:56 Routing 10.0.0.0/8 via ppp0
04/10/2007-00:53:07 Routing 10.0.0.0/8 via ppp0
04/10/2007-02:20:15 Routing 10.0.0.0/8 via ppp0
04/10/2007-08:17:05 Routing 10.0.0.0/8 via ppp0
05/10/2007-00:01:31 Routing 10.0.0.0/8 via ppp0
05/10/2007-00:19:45 Routing 10.0.0.0/8 via ppp1


Merci de m'avoir suivi tout au long de ce périple ! Si vous avez des commentaires, etc.. n'hésitez pas !
_________________
$this->setLife(FALSE);
printf "I'm not a gamer !";
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Fri Oct 05, 2007 6:41 am    Post subject: Reply with quote

ppp ou le VPN du pauvre :lol:

Est ce que monitorer le VPN sous cette méthode est aisé? j'en ai pas l'impression si? (sous openvpn on peut facilement monitorer via l'interface telnet, sans parler du fait que c'est très facilement scriptable etc...)

En tout cas chapeau pour le tuto, ça a pas l'air ultra simple à mettre en place from scratch mais tu réussis à expliquer ça de manière didactique.
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum