Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:archives:network-design-sim [2015/11/29 20:13] admin |
technique:archives:network-design-sim [2015/11/29 21:12] (Version actuelle) admin [Scripts] |
||
---|---|---|---|
Ligne 31: | Ligne 31: | ||
===== Solution en routage statique ===== | ===== Solution en routage statique ===== | ||
+ | ==== Configs ==== | ||
<code text hosts> | <code text hosts> | ||
127.0.0.1 localhost | 127.0.0.1 localhost | ||
Ligne 37: | Ligne 37: | ||
192.168.91.222 rt_zac | 192.168.91.222 rt_zac | ||
6.5.4.1 rt_tls | 6.5.4.1 rt_tls | ||
- | </code> | ||
- | |||
- | <code bash setup_routing.sh> | ||
- | #!/bin/bash | ||
- | |||
- | function adt() { | ||
- | adt_num=$1 | ||
- | adt_etat=$2 | ||
- | adt_nom=$3 | ||
- | ip4_nexthop=$4 | ||
- | ip4_public=$5 | ||
- | dev=eth1 | ||
- | |||
- | 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 | ||
- | echo "Accès ajouté : adt $*" | ||
- | fi | ||
- | else | ||
- | echo -n "ERREUR : adt $adt_num $adt_etat $adt_nom : " | ||
- | echo "pb remplacement route : '$out'" | ||
- | fi | ||
- | ;; | ||
- | resilie) | ||
- | out=$(ip route delete $ip4_public 2>&1) | ||
- | res=$? | ||
- | case $res in | ||
- | 0) echo "Accès supprimé : adt $*" ;; | ||
- | 2) : ;; # Route non trouvée, routage déjà supprimé | ||
- | *) echo -n "ERREUR : adt $adt_num $adt_etat $adt_nom : " | ||
- | echo "pb suppression route : '$out'" ;; | ||
- | esac | ||
- | ;; | ||
- | *) | ||
- | echo -n "ERREUR : adt $adt_num $adt_etat $adt_nom : " | ||
- | echo "'$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 | ||
- | </code> | ||
- | |||
- | <code bash config_adt.sh> | ||
- | #!/bin/bash | ||
- | # Ce fichier est généré automatiquement et s'affiche bien sous vim avec "set ts=4" | ||
- | |||
- | #adt <num> <etat> <NOM_Prenom> <ip4_nexthop> <ip4_public> | ||
- | adt 0001 actif Dxxxxx_Laurent 172.16.10.10 6.5.4.10 | ||
- | adt 0002 actif Pxxxxx_Daniel 172.16.10.11 6.5.5.10 | ||
- | #[...] | ||
</code> | </code> | ||
Ligne 233: | Ligne 166: | ||
up sysctl -w net.ipv4.ip_forward=1 | up sysctl -w net.ipv4.ip_forward=1 | ||
</code> | </code> | ||
+ | |||
+ | ==== Scripts ==== | ||
+ | <code bash setup_routing.sh> | ||
+ | #!/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 | ||
+ | </code> | ||
+ | |||
+ | <code bash config_adt.sh> | ||
+ | #!/bin/bash | ||
+ | # set ts=4 | ||
+ | # Généré le 2015-11-29 21:08:50+01:00 | ||
+ | |||
+ | #adt <num> <etat> <NOM_Prenom> <ip4_nexthop> <ip4_public> | ||
+ | adt 0001 actif Dxxxxx_Laurent 172.16.10.10 6.5.4.10 | ||
+ | adt 0002 actif Pxxxxx_Daniel 172.16.10.11 6.5.5.10 | ||
+ | #[...] | ||
+ | </code> | ||
+ | |||
+ | <code bash config_adt_gen.sh> | ||
+ | #!/bin/bash | ||
+ | SELF=$(basename $0) | ||
+ | INFO="logger -p notice -t $SELF --" | ||
+ | CRIT="logger -p crit -t $SELF --" | ||
+ | |||
+ | TMP=$(mktemp) | ||
+ | ssh automated@chd.sx sudo mysql --defaults-file=/etc/mysql/debian.cnf -BN -D gestion <<< 'SELECT * FROM v_config_adt;' >$TMP | ||
+ | |||
+ | if [ $? -eq 0 -a -s $TMP ] | ||
+ | then $INFO "Base de donnée lue avec succès" | ||
+ | else $CRIT "Echec de récupération des données depuis la base de données" | ||
+ | exit 2 | ||
+ | fi | ||
+ | |||
+ | cat - $TMP >/root/config_adt.sh <<EOT | ||
+ | #!/bin/bash | ||
+ | # set ts=4 | ||
+ | # Généré le $DATE | ||
+ | |||
+ | #adt <num> <etat> <NOM_Prenom> <ip4_nexthop> <ip4_public> | ||
+ | EOT | ||
+ | rm $TMP | ||
+ | </code> | ||
+ |