Informations :
Dates
- Publish : : Thursday 18 september 2014
- Modification : Friday 24 april 2020
- 2741 views
Share :
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 :
- On cherche une adresse IP particulière ici la
172.16.5.253
pour connaître l'interface réseau (ex:ppp0
,ppp1
), - et on assigne les routes du client (du réseau chez le client) au serveur (pour qu'ils puissent communiquer).
- 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
053echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF + IPv4 ${LOCAL_IPv4} <> $SITE_A_IP OK";
054 055#-----------------------------------------------------------------
056for i in "${!SITE_A_NET_V4[@]}"
057do
058SITE_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]}"`
059if [ "${SITE_A_SEARCH_ROUTE}" != "${SITE_A_NET_V4[$i]}/${SITE_A_CAST_V4[$i]}" ]
060then
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}"
066else
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";
068fi
069done
070#-----------------------------------------------------------------
071 072#-----------------------------------------------------------------
073SITE_A_SEARCH_IPv6=`/sbin/ifconfig |/bin/grep "${SITE_A_LOCAL_IPv6}"`
074if [ "${SITE_A_SEARCH_IPv6}" ]
075then
076echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Iface $SITE_A_SEARCH_IF + IPv6 $SITE_A_LOCAL_IPv6 OK";
077else
078/bin/echo "$NOW $HOSTNAME VPN $SITE_A_NAME: Ajout de laddress IPv6 $SITE_A_LOCAL_IPv6 sur $SITE_A_SEARCH_IF";
079CMD=`/sbin/ip -6 address add "${SITE_A_LOCAL_IPv6}" dev $SITE_A_SEARCH_IF`
080fi
081 082for i in "${!SITE_A_NET_V6[@]}"
083do
084SITE_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]}"`
085if [ "${SITE_A_SEARCH_ROUTE}" != "${SITE_A_NET_V6[$i]}/${SITE_A_CAST_V6[$i]}" ]
086then
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}"
092else
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";
094fi
095done
096#-----------------------------------------------------------------
097 098 099else
100# exit 2;
101echo "SITE : $SITE_A_NAME DOWN";
102fi
103 104 105fi
106#####---------------------------- SCRIPT VPN SITE_A ------------------------------#####
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