Avec la contribution de certains de nos collègues, nous publions quelques scripts pour Linux permettant de gérer la connexion et la déconnexion automatique au serveur VPN.
Jean-Michel Carricand nous à fait un script très simple de connexion :
#! /bin/bash
function usage() {
echo "Usage: $0 {start|stop|restart} connection_name password"
exit 1
}
CONN="$2"
PASS="$3"
DEFAULTROUTE=`route -n | grep '^0.0.0.0' | tr -s ' ' ' ' | cut -d' ' -f2`
case "$1" in
start)
[ -z "$2" -o -z "$3" ] && usage
$0 stop
/etc/init.d/ipsec start; sleep 2
ipsec auto --up ufc-vpn; sleep 2
route add 194.57.91.250 gw $DEFAULTROUTE
/etc/init.d/xl2tpd start; sleep 2
echo "c $CONN passwordfd $PASS" > /var/run/xl2tpd/l2tp-control
;;
stop)
echo "d $CONN" > /var/run/xl2tpd/l2tp-control; sleep 2
/etc/init.d/xl2tpd stop
ipsec auto --down ufc-vpn
/etc/init.d/ipsec stop
route del 194.57.91.250 gw $DEFAULTROUTE
;;
restart)
$0 stop
$0 start
;;
*)
usage
;;
esac
Jérôme Rabouille (UFR-STGI) :
#!/bin/bash
# Ecrit par Jérôme Rabouille / UFR STGI
# Montage du VPN UFC sous linux avec IPSEC(openswan) / xl2tpd
# Testé sous Ubuntu Hardy
VPN_NAME="ufc-vpn" #nom du vpn dans /etc/ipsec/conf
MACHINE_NAME_XL2TPD=ma_machine #nom de la machine dans /etc/xl2tpd/xl2tpd.conf
L2TPD_SCRIPT=/etc/init.d/xl2tpd
L2TPD_PIPE=/var/run/xl2tpd/l2tp-control
IPSEC_SCRIPT=/etc/init.d/ipsec
IPSEC_COMMAND=/usr/sbin/ipsec
if [ "$UID" = "0" ]; then
case "$1" in
start)
echo "Saisir le mot de passe(ENT): "
read -s PASSWORD
$IPSEC_SCRIPT start > /dev/null
$L2TPD_SCRIPT start > /dev/null
sleep 2
$IPSEC_COMMAND auto --up $VPN_NAME > /dev/null
echo "c $MACHINE_NAME_XL2TPD passwordfd $PASSWORD" > $L2TPD_PIPE
sleep 3
ppp_ip="`/sbin/ifconfig ppp0 | grep 'inet adr' | awk '{print $2}' | sed -e 's/.*://'`"
echo "IP LOCAL UFC:" $ppp_ip
;;
stop)
echo "d $MACHINE_NAME_XL2TPD" > $L2TPD_PIPE
$IPSEC_COMMAND auto --down $VPN_NAME > /dev/null
sleep 2
$L2TPD_SCRIPT stop > /dev/null
$IPSEC_SCRIPT stop > /dev/null
;;
*)
echo "usage: "$0 "[start|stop]"
echo "Montage du VPN de l'UFC"
;;
esac
else
echo "ERREUR: Vous devez être super utilisateur!"
exit 1
fi
exit 0
Cédric Clerget (FEMTO-ST) :
Alors j’ai noté quelques problèmes sur mon PC du boulot et mon PC perso. Les deux PC tournent avec une Debian ETCH 64 bits. La connexion se fait sans problème, petit hic, si je souhaite utiliser les DNS FEMTO-ST lorsque je me connecte au realm femto-st je dois éditer /etc/resolv.conf afin d’y ajouter :
search femto-st.fr
nameserver 172.20.208.80
C’est ce que fait le script une fois connecté (script intrusif, n’hésitez pas a sauvegarder /etc/l2tp et /etc/ipsec avant).
#! /bin/sh
# A changer selon le lieu d'ou vous vous connectez
PASSERELLE="192.168.1.254"
# A changer selon votre localisation géographique
SERVEUR_VPN="194.57.91.250"
# chemin du certificat utilisateur
USER_CERT="/etc/ipsec.d/certs/mycert.pem"
# La connexion au VPN impose l'utilisation unique du réseau de l'UFC,
# et par conséquent l'utilisation du proxy de l'UFC afin de pouvoir surfer.
# Si vous souhaitez utiliser votre connexion pour le surf ou autres choses
# tout en restant dans le réseau UFC, vous le pouvez en mettant la valeur
# du champs suivant à 1
DUALROUTE_ACTIVE=1
DUALROUTE_SCRIPT="/etc/ppp/ip-up.d/dualroute"
# Pour la restauration des DNS de votre connexion internet, car la restauration
# ne fonctionne pas avec pppd (bug ? feature ?)
RESOLV_BACKUP="/etc/resolv.conf.pppd-backup"
# si vous désirez remplacer les DNS par défaut attribuer lors de la connexion, sinon commentez les 5 lignes suivantes
RESOLV_CONF=`
cat << RESOLV_CONF
search femto-st.fr
nameserver 172.20.208.80
RESOLV_CONF`
initialisation () {
# Demande de saisi de l'utilisateur et du mot de passe
echo -n "Utilisateur (ex : identifiant@realm) : "
read USER
echo -n "Mot de passe : "
read -s PASSWORD
echo ""
echo "Connexion en cours ..."
# génération du fichier /etc/ppp/ip-up.d/dualroute
DUALROUTE=`
cat << DUALROUTE
#!/bin/sh
route add -net 172.20.0.0 netmask 255.255.0.0 dev \\$1
DUALROUTE`
# génération du fichier /etc/ipsec.conf
IPSEC_CONF=`
cat << IPSEC_CONF
version 2
config setup
uniqueids=yes
nhelpers=0
nat_traversal=yes
conn %default
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
type=transport
keyingtries=1
include /etc/ipsec.d/examples/no_oe.conf
conn ufc-vpn
rightprotoport=17/1701
leftprotoport=17/1701
keyexchange=ike
pfs=no
auto=add
left=%defaultroute
leftcert=$USER_CERT
leftrsasigkey=%cert
right=$SERVEUR_VPN
rightrsasigkey=%cert
rightca=%same
leftnexthop=$PASSERELLE
IPSEC_CONF`
# génération du fichier /etc/xl2tpd/xl2tpd.conf
XL2TP_CONF=`
cat << XL2TP_CONF
[global]
port = 1701
access control = no
[lac machine_lambda]
lns = $SERVEUR_VPN
redial = yes
redial timeout = 10
max redials = 10
length bit = yes
refuse authentication = yes
refuse chap = yes
require pap = yes
name = perso
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
XL2TP_CONF`
# génération du fichier /etc/ppp/options.l2tpd.client
if [ $DUALROUTE_ACTIVE == 0 ]; then
REPLACEROUTE_OPTION="replacedefaultroute"
else
REPLACEROUTE_OPTION="noreplacedefaultroute"
fi
OPTIONS_L2TP=`
cat << OPTIONS_L2TP
defaultroute
$REPLACEROUTE_OPTION
debug
lock
user $USER
noipdefault
usepeerdns
noauth
lcp-echo-interval 20
lcp-echo-failure 10
noaccomp
OPTIONS_L2TP`
}
case "$1" in
start)
initialisation
echo -e "$IPSEC_CONF" > /etc/ipsec.conf
echo -e "$XL2TP_CONF" > /etc/xl2tpd/xl2tpd.conf
echo -e "$OPTIONS_L2TP" > /etc/ppp/options.l2tpd.client
if [[ ! -e $DUALROUTE_SCRIPT && $DUALROUTE_ACTIVE == 1 ]]; then
echo -e "$DUALROUTE" > $DUALROUTE_SCRIPT
chmod +x $DUALROUTE_SCRIPT
fi
/etc/init.d/ipsec start > /dev/null && /etc/init.d/xl2tpd start > /dev/null
sleep 3
if [ ! -z "$PASSWORD" ]; then
ipsec auto --up ufc-vpn > /dev/null && echo "c machine_lambda passwordfd $PASSWORD" > /var/run/xl2tpd/l2tp-control
fi
if [ ! -z "$RESOLV_CONF" ]; then
sleep 6
echo -e "$RESOLV_CONF" > /etc/resolv.conf
fi
;;
stop)
echo -e "Déconnexion en cours ..."
echo "d machine_lambda" > /var/run/xl2tpd/l2tp-control && ipsec auto --down ufc-vpn > /dev/null
/etc/init.d/ipsec stop > /dev/null && /etc/init.d/xl2tpd stop > /dev/null
# restauration du fichier /etc/resolv.conf écraser par la connexion VPN
if [ -e "$RESOLV_BACKUP" ]; then
mv $RESOLV_BACKUP /etc/resolv.conf
fi
# restauration de la route par défaut afin de pouvoir utiliser de nouveau sa connexion internet
if [ $DUALROUTE_ACTIVE == 0 ]; then
route add default gw $PASSERELLE
fi
rm -f $DUALROUTE_SCRIPT
;;
*)
echo "Usage: connexion-vpn {start|stop}" >&2
exit 3
;;
esac
: