#!/bin/bash function adt() { adt_num=$1 adt_etat=$2 adt_nom=$3 ip4_nexthop=$4 ip4_public=$5 dev=eth1 SELF=$(basename $0) INFO="logger -p notice -t $SELF --" CRIT="logger -p crit -t $SELF --" echo "$ip4_public ${adt_nom}.pub4 adt$adt_num" >> /etc/hosts.adt echo "$ip4_nexthop ${adt_nom}.gw4 hop$adt_num" >> /etc/hosts.adt case $adt_etat in actif) regex="^$ip4_public via [0-9.]+ dev $dev" ip route get $ip4_public | grep -qE "$regex" res=$? out=$(ip route replace $ip4_public via $ip4_nexthop dev $dev) res2=$? if [ $res2 -eq 0 ]; then if [ $res -eq 1 ]; then $INFO "Accès ajouté : adt $*" fi else $CRIT "ERREUR : adt $adt_num $adt_etat $adt_nom : pb remplacement route : '$out'" fi ;; resilie) out=$(ip route delete $ip4_public 2>&1) res=$? case $res in 0) $INFO "Accès supprimé : adt $*" ;; 2) : ;; # Route non trouvée, routage déjà supprimé *) $CRIT "ERREUR : adt $adt_num $adt_etat $adt_nom : pb suppression route : '$out'" ;; esac ;; *) $CRIT "ERREUR : adt $adt_num $adt_etat $adt_nom : '$adt_etat' n'est pas un état reconnu" ;; esac } function main() { > /etc/hosts.adt sysctl -w net.ipv4.ip_forward=1 source /root/config_adt.sh cat /etc/hosts.system /etc/hosts.adt > /etc/hosts } main