View previous topic :: View next topic |
Author |
Message |
GaMeS Guru
Joined: 08 Nov 2005 Posts: 374 Location: Nantes
|
Posted: Thu Oct 04, 2007 10:45 pm Post subject: [TIP] VPN sous ms-chap-v2 et mppe |
|
|
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 |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Oct 05, 2007 6:41 am Post subject: |
|
|
ppp ou le VPN du pauvre
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 |
|
|
|
|
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
|
|