SSH, OpenSSL, Iptables, RSYNC, RAID, VPN

 Charge moyenne sur 1mn : 0.00 Charge moyenne sur 5mn : 0.03 Charge moyenne sur 15mn : 0.06


Blocs utilisateurs du site : Infos du compte / droits utilisateurs / récapitulatif

Identifiez-vous

Authentifiez-vous avec votre compte ZW3B et profitez des services membres.

Identifiant :
Mot de passe :
  
  

Howto VPN client : IPSec + XL2TP

  • Howto VPN client : IPSec + XL2TP
Comment faire pour configurer un client VPN par les protocoles IPSec et XL2TP

Informations

Dates
  • Publication : Jeudi 18 septembre 2014
  • Modification : Jeudi 15 decembre 2016

Je vais décrire comment configurer un client VPN par les protocoles IPSec et XL2TP.

Installation des paquets IPSec

Il faut installer un xSecureWAN ;) il y quelques temps çà s'appellait FreeSWAN puis OpenSWAN ;)

De nôs jours c'est : strongSWAN !
aptitude install strongswan xl2tpd

Configuration d'IPSec

Nous allons configurer IPSec : vim /etc/ipsec.conf.

version 2.0
config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8
        oe=off
        protostack=netkey
        uniqueids=no
#       plutodebug=all
        klipsdebug=none
        plutoopts="--interface=vmbr1"

conn net.zw3b.fr
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        dpddelay=30
        dpdtimeout=120
        dpdaction=clear
        rekey=no
        keylife=24h
        ikelifetime=6h
        type=transport
        left=%defaultroute
        leftprotoport=17/1701
        #
        right=IP_DU_SERVER_VPN
        rightid=@net.zw3b.vpn
        rightprotoport=17/1701

Puis on ajoute la passphrase dans /etc/ipsec.secrets

%any @net.zw3b.vpn : PSK "ma clef a partager"

Configuration de XL2TP

Nous allons configurer XL2TP : vim /etc/xl2tpd/xl2tpd.conf.

[global]
;auth file = /etc/xl2tpd/xl2tpd-secrets
ipsec saref = yes
;saref refinfo = 30
;listen-addr = 0.0.0.0
;port = 1701
; utilse pour la conf par default(a sup si radius)
access control = no
rand source = dev
;
;debug avp = yes
;debug network = yes
;debug packet = no
;debug state = yes
;debug tunnel = yes
;
[lac net]
lns = IP_DU_SERVER_VPN
;require authentication = yes
;require chap = yes
;refuse pap = yes
;length bit = yes
;name = p2.zw3b.vpn
ppp debug = yes
pppoptfile = /etc/ppp/options.net.client.xl2tpd

Configuration de PPP

Nous allons configurer PPP : vim /etc/ppp/options.net.client.xl2tpd.

# Do not support BSD compression.
nobsdcomp
passive
lock

# Allow all usernames to connect.
#name *
#proxyarp
#ipcp-accept-local
#ipcp-accept-remote
#lcp-echo-failure 10
lcp-echo-interval 30
nodeflate

# Do not authenticate incoming connections. This is handled by IPsec.
#noauth
#refuse-chap
#refuse-mschap
#refuse-mschap-v2
# Authentifition
name pc_1.zw3b.vpn 
password mot2passe4client_1

# Authentification
noauth
#require-chap
#require-mschap
#require-mschap-v2
#hide-password
#modem

# Set the DNS servers the PPP clients will use.
#ms-dns 8.8.8.8
#ms-dns 213.186.33.99

mtu 1400
mru 1400

# Options
refuse-eap
noccp
crtscts
idle 1800
#defaultroute
nodefaultroute

logfile /var/log/ppp.log

Script de connexion au serveur VPN : IPSEC+XL2TP

Ce script démare les services ipsec et xl2tpd. Puis lance la connexion ipsec auto --up net.zw3b.fr puis une lance la connexion xl2tp au LAC net pour enfin ajouter au client les routes que le serveur pourait distribuer.

vi /root/vpn-client-zw3b.sh

#!/bin/bash

#####---------------------------- INFORMATIONS --------------------------------#####
#
#       Name : vpn-client-zw3b.sh
#       Desc : Script de connexion au serveur VPN : IPSEC+XL2TP
#       Auteur : O.Romain Jaillet-ramey alias Kss*
#       Mail : orj AT lab3w DOT fr
#       Date : 2014-05-05
#
#####---------------------------- INFORMATIONS --------------------------------#####


#####--------------------------------------------------------------------------#####

function ipsec_l2tp()
{
        /etc/init.d/ipsec 
        /etc/init.d/xl2tpd 
}

#####--------------------------------------------------------------------------#####


#####--------------------------------------------------------------------------#####
case "" in

start|restart)
{content_text} stop
echo "{content_text} Starting"
        ipsec_l2tp start
        sleep 2
        /usr/sbin/ipsec auto --up net.zw3b.fr
        sleep 2
        /bin/echo "c net" >> /var/run/xl2tpd/l2tp-control
        sleep 10
        /sbin/route add -net 172.16.5.0 netmask 255.255.255.0 dev ppp0
        /bin/echo "VPN ZW3B CONNECTION UP"
;;

stop)
echo "{content_text} Stop"
        /sbin/route del -net 172.16.5.0 netmask 255.255.255.0 dev ppp0
        sleep 2
        /bin/echo "d net" > /var/run/xl2tpd/l2tp-control
        sleep 2
        /usr/sbin/ipsec auto --down net.zw3b.fr
        ipsec_l2tp stop
        /bin/echo "VPN ZW3B CONNECTION DOWN"
;;

*)
/bin/echo "usage : {content_text} (start|stop|restart)"
;;

esac
#####--------------------------------------------------------------------------#####

Script qui check si la connexion VPN est active.

Ce script vérifie que la connexion PPP est active vérifiant que l'adresse IP sur l'interface ppp0 existe. En cas d'erreur on lance le script /repertoire/vpn-net-client.sh restart de connexion au serveur VPN IPSec + XL2TP

vi /root/vpn-client-zw3b-check.sh

#!/bin/bash

#####---------------------------- INFORMATIONS --------------------------------#####
#
#       Name : vpn-client-zw3b-check.sh
#       Desc : Script de connexion au serveur VPN : IPSEC+XL2TP
#       Auteur : O.Romain Jaillet-ramey alias Kss*
#       Mail : orj AT lab3w DOT fr
#       Date : 2014-10-08
#
#####---------------------------- INFORMATIONS --------------------------------#####

HOSTNAME=`/bin/hostname`
NOW=$(date +"%b %d %H:%M:%S")

LOCAL_IP="172.16.5.253"

LOCAL_SEARCH_IP=`/sbin/ifconfig |/bin/grep "${LOCAL_IP}"|/usr/bin/cut -d":" -f2|/usr/bin/cut -d" " -f1`
LOCAL_SEARCH_IF=`/sbin/ifconfig |/bin/grep -B 1 "${LOCAL_IP}" |/usr/bin/cut -d" " -f1 |/bin/sed '/^$/d'`


if [ "${LOCAL_SEARCH_IP}" = ${LOCAL_IP} ]
then
        /bin/echo $NOW $HOSTNAME VPN STD: Iface $LOCAL_SEARCH_IP sur $LOCAL_SEARCH_IF OK
        exit 2
else
        /bin/echo $NOW $HOSTNAME VPN STD: On relance la connexion....
        /root/vpn-net-client.sh restart
        /bin/echo $NOW $HOSTNAME VPN STD: Connexion OK
fi

NdM : Pour le cas où vous ayez une deconnexion ;)

Puis on met le script vvpn-client-zw3b-check.sh en crontab -e.

*/5 * * * * sh /root/vpn-client-zw3b-check.sh 1>>/var/log/syslog 2>/dev/null 2>&1

Autre Script qui check si la connexion IPSEC/XLTP est active.

Ce script vérifie que la connexion IPSEC est active vérifiant avec la comande ipsec status que la connexion est bien établie, puis on vérifie que l'interface ppp0 existe en vérifiant l'adresse IP du serveur existe et est associée à celle de notre client. En cas d'erreur on lance le script de démarrage du client VPN IPSec + XL2TP.

#!/bin/bash

#####---------------------------- INFORMATIONS --------------------------------#####
#
#       Name : vpn-client-zw3b-check-connection.sh
#       Desc : Script qui verifie que la connection (IPSEC/XL2TP) au serveur existe
#       Auteur : O.Romain Jaillet-ramey alias Kss*
#       Mail : orj AT lab3w DOT fr
#       Date creation : 2016-07-23
#       Date modification : 2016-08-03
#
#####---------------------------- INFORMATIONS --------------------------------#####

#####---------------------------- CONFIG VPN ZWB ------------------------------#####

HOSTNAME=`/bin/hostname`
NOW=$(date +"%b %d %H:%M:%S")
NOW=$(date)

ZWB_NAME="ZW3B"
ZWB_HOST="zwb.lab3w.fr"
ZWB_IP="172.16.5.199"

CLIENT_IP="172.16.5.254"
CLIENT_MAIL="admins@domain.tld"

#####---------------------------- CONFIG VPN ZWB ------------------------------#####

#####---------------------------- SCRIPT --------------------------------------#####

function check_zwb_l2tp()
{
        ZWB_SEARCH_IP=`/sbin/ifconfig |/bin/grep "${ZWB_IP}"|/usr/bin/cut -d":" -f2|/usr/bin/cut -d" " -f1`
        #ZWB_REPONSE=`ping -c1 ${ZWB_IP} |/bin/grep "received" |/usr/bin/cut -d"," -f2  |/usr/bin/cut -d" " -f2`

        #if [ "${ZWB_REPONSE}" -eq "1" ] 
        if [ "${ZWB_SEARCH_IP}" = "${CLIENT_IP}" ] 
                then
                echo "1"; 
        else
                echo "0";
        fi  

        exit 1;
}

function check_zwb_ipsec()
{
        COMMAND="/usr/sbin/ipsec status ${ZWB_HOST}"
        XL2TP_CHECK=$(check_zwb_l2tp)

        if [[ -n "`${COMMAND} |/bin/grep "ESTABLISHED"`" ]] && [[ "${XL2TP_CHECK}" = "1" ]]
        then

                REQ=`$COMMAND |/bin/grep "ESTABLISHED" | cut -d" " -f3-4`
                RES="$NOW $HOSTNAME VPN $ZWB_NAME: Connexion OK depuis $REQ"

                echo $RES
                    
        else
                MSG=" -> Restart du client VPN"

                if [ "${XL2TP_CHECK}" = "0" ]; then

                        ERR="$NOW $HOSTNAME VPN $ZWB_NAME: Connexion DOWN -> Erreur XL2TP"
                        /root/vpn-client-zw3b.sh restart && echo "$ERR $MSG" | mail -s "[ERR]VPNClient" ${CLIENT_MAIL}

                elif [ -z "`${COMMAND} |/bin/grep "ESTABLISHED"`" ]; then

                        ERR="$NOW $HOSTNAME VPN $ZWB_NAME: Connexion DOWN -> Erreur IPSEC"
                        /root/vpn-client.sh restart && echo "$ERR $MSG" | mail -s "[ERR]VPNClient" ${CLIENT_MAIL}
                fi

                echo "$ERR $MSG";
        fi


        exit 1;



}

#####---------------------------- SCRIPT --------------------------------------#####


#####---------------------------- USAGE ---------------------------------------#####
case  in
        check)

        check_zwb_ipsec
;;
*)
        echo "Use : {content_text} check"
;;
esac
#####---------------------------- USAGE --------------------------------------#####

Puis on met le script vvpn-client-zw3b-check-connection.sh en tâches planifiées toutes les N minutes : crontab -e.

*/5 * * * * /root/vpn-client-zw3b-check-connection.sh check 1>>/var/log/syslog 2>/dev/null 2>&1

qui devrait vous ressortir en syslog quelque chose comme çà :

Aug 14, 11:19:01 CLIENT VPN ZW3B: Connexion OK depuis 50 minutes.

Bonne connexion :)


<< Howto VPN serveur : IPSec + XL2TP

Configurer un VPN client : IPSec + XL2TP >>





Autheur de la page

LAB3W.ORJ

LAB3W.ORJ

  • Prénom : Olivier Romain Luc
  • Nom : Jaillet-ramey
  • Arrivé le mardi 19 octobre 1976 (1976/10/19 00:00)
    43 ans d'activité !

Firefox Nighlty

Nos amis de Framasoft s'intéressent à Mozilla et leur ont posé des questions à propos de Nightly : Firefox Night-club, entrée libre !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready