ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, SHells, VPN IPSec + XL2TP : Routage des sous réseaux clients

Routage des sous réseaux clients pour le serveur VPN : IPSec + XL2TP.

Author : O.Romain.Jaillet-ramey

J'écris un script pour ajouter des (ou les) routes possibles vers les réseaux clients VPN au serveur.

Script qui ajoute des routes vers les sous-reseaux des tunnels

Ici c'est un peu différent, on fait plusieurs choses :

  1. On cherche une adresse IP particulière ici la 172.16.5.253 pour connaître l'interface réseau (ex: ppp0, ppp1),
  2. et on assigne les routes du client (du réseau chez le client) au serveur (pour qu'ils puissent communiquer).
  3. Ensuite on ajoute une tache planifiée (crontab) sur ce script (vpn-add-routes-clients.sh) toutes les minutes par exemple.

Script avec 106 lignes

001#!/bin/sh
002
003#####---------------------------- INFORMATIONS --------------------------------#####
004#
005#       Name : vpn-add-routes-clients.sh
006#       Desc : Script qui ajoute des routes vers les sous-reseaux des tunnels
007#       Auteur : O.Romain Jaillet-ramey alias Kss*
008#       Mail : orj AT lab3w DOT fr
009#       Date-created : 2018-01-11
010#       Date-modified : 2020-04-24
011#
012#####---------------------------- INFORMATIONS --------------------------------#####
013
014#####---------------------------- CONFIG VPN LOC ------------------------------#####
015
016HOSTNAME=`/bin/hostname`
017NOW=$(date +"%b %d %H:%M:%S")
018
019LOCAL_IPv4="172.16.5.199"
020LOCAL_IPv6="2001:0bc8:25bb:ff5e:5000:0000:0000:0199/128"
021
022SITE_A_LOCAL_IPv6="2001:0bc8:25bb:ff5e:8000:003a:0:0199/92"
023
024#####---------------------------- CONFIG VPN SITE_N ------------------------------#####
025
026#------------------------
027SITE_A=true
028SITE_A_NAME="NOM DE CHEZ TOI"
029SITE_A_IP="172.16.5.253"
030#------------------------
031declare -a SITE_A_NETWORKS
032SITE_A_NET_V4=('10.1.100.0' '10.100.10.0')
033declare -a SITE_A_BROADCAST
034SITE_A_CAST_V4=('24' '24')
035#------------------------
036declare -a SITE_A_NET_V6
037SITE_A_NET_V6=('2001:0bc8:25bb:ff70::' '2001:bc8:25bb:ff71:0001:00A0::' '2001:bc8:25bb:ff74:0001:00AC:FF00::')
038declare -a SITE_A_CAST_V6
039SITE_A_CAST_V6=('64' '96' '104')
040#------------------------
041
042SITE_A_SEARCH_IP=`/sbin/ifconfig |/bin/grep "${SITE_A_IP}"|/usr/bin/cut -d":" -f2|/usr/bin/cut -d" " -f1`
043SITE_A_SEARCH_IF=`/sbin/ifconfig |/bin/grep -B 1 "${SITE_A_IP}" |/usr/bin/cut -d" " -f1 |/bin/sed '/^$/d'`
044
045#####---------------------------- CONFIG VPN SITE_A ------------------------------#####
046
047#####---------------------------- SCRIPT VPN SITE_A ------------------------------#####
048
049if [ "${SITE_A}" = true ];
050then
051if [ "${LOCAL_IPv4}" = "${SITE_A_SEARCH_IP}" ];
052then
053        echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF + IPv4 ${LOCAL_IPv4} <> $SITE_A_IP OK";
054
055        #-----------------------------------------------------------------
056        for i in "${!SITE_A_NET_V4[@]}"
057        do
058                SITE_A_SEARCH_ROUTE=`/sbin/ip -4 route show|/bin/grep "${SITE_A_SEARCH_IF}"|/usr/bin/cut -d" " -f1|/bin/grep "${SITE_A_NET_V4[$i]}"`
059                if [ "${SITE_A_SEARCH_ROUTE}" != "${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]}" ]
060                then
061#                       echo -n IPV4 $i
062#                       echo " "${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]}
063
064                        /bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF |+ Ajout de la route ${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]}";
065                        /sbin/ip -4 route add "${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]}" dev "${SITE_A_SEARCH_IF}"
066                else
067                        /bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF |+ Route ${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]} OK";
068                fi
069        done
070        #-----------------------------------------------------------------
071
072        #-----------------------------------------------------------------
073        SITE_A_SEARCH_IPv6=`/sbin/ifconfig |/bin/grep "${SITE_A_LOCAL_IPv6}"`
074        if [ "${SITE_A_SEARCH_IPv6}" ]
075        then
076                echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF + IPv6 $SITE_A_LOCAL_IPv6 OK";
077        else
078                /bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Ajout de laddress IPv6 $SITE_A_LOCAL_IPv6 sur $SITE_A_SEARCH_IF";
079                CMD=`/sbin/ip -6 address add "${SITE_A_LOCAL_IPv6}" dev $SITE_A_SEARCH_IF`
080        fi
081
082        for i in "${!SITE_A_NET_V6[@]}"
083        do
084                SITE_A_SEARCH_ROUTE=`/sbin/ip -6 route show|/bin/grep "${SITE_A_SEARCH_IF}"|/usr/bin/cut -d" " -f1|/bin/grep "${SITE_A_NET_V6[$i]}"`
085                if [ "${SITE_A_SEARCH_ROUTE}" != "${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]}" ]
086                then
087#                       echo -n IPV6 $i
088#                       echo " "${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]}
089
090                        /bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF |+ Ajout de la route ${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]}";
091                        /sbin/ip -6 route add "${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]}" dev "${SITE_A_SEARCH_IF}"
092                else
093                        /bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF |+ Route ${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]} OK";
094                fi
095        done
096        #-----------------------------------------------------------------
097
098
099else
100#        exit 2;
101        echo "SITE : $SITE_A_NAME DOWN";
102fi
103
104
105fi
106#####---------------------------- SCRIPT VPN SITE_A ------------------------------#####
Retirer les numéros de lignes

Puis on met le script en crontab -e.

Script avec 1 ligne

001*/1 * * * * /bin/sh /root/vpn-add-routes-clients.sh 1>>/var/log/syslog 2>/dev/null 2>&1
Retirer les numéros de lignes

<< Configurer un VPN client : IPSec + XL2TP

VPN IPSec + XL2TP : IPv(4/6) Remount du client et des routes >>