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 :