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 18:42] admin |
technique:archives:network-design-sim [2015/11/29 21:12] (Version actuelle) admin [Scripts] |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
Quelques essais d'archi faits en octobre et novembre 2015 avec l'outil [[https://en.wikipedia.org/wiki/Graphical_Network_Simulator-3|GNS3]]. | Quelques essais d'archi faits en octobre et novembre 2015 avec l'outil [[https://en.wikipedia.org/wiki/Graphical_Network_Simulator-3|GNS3]]. | ||
- | Hypothèses : | + | ===== Hypothèses ===== |
* CHD a une plage de 1024 IP publiques à distribuer aux adhérents (exemple pris 6.5.4.0/22) | * CHD a une plage de 1024 IP publiques à distribuer aux adhérents (exemple pris 6.5.4.0/22) | ||
Ligne 9: | Ligne 9: | ||
* CHD fait ses annonces BGP à 1 pair [[http://www.fullsave.com/prestations/transit-bgp/|géré par FullSave]] | * CHD fait ses annonces BGP à 1 pair [[http://www.fullsave.com/prestations/transit-bgp/|géré par FullSave]] | ||
* CHD loue 2 liens fibre vers Saint-Gaudens | * CHD loue 2 liens fibre vers Saint-Gaudens | ||
- | * 1 routeur (RT) par arrivée fibre (Serge G. et ZAC Landes) | + | * 1 routeur (RT) par arrivée fibre (av F.Mitterand et ZAC Landes) |
* 1 grand LAN radio (ponts transparents) avec les 2 RT et tous les adhérents | * 1 grand LAN radio (ponts transparents) avec les 2 RT et tous les adhérents | ||
- | Schéma : {{:technique:archives:capture-simu-gns3.png?linkonly|:technique:archives:capture-simu-gns3.png}} | + | ===== Schémas ===== |
- | Problématiques à envisager : | + | {{:technique:archives:capture-simu-gns3.png?linkonly|:technique:archives:capture-simu-gns3.png}} |
+ | |||
+ | {{:technique:archives:capture-simu-gns3-ports.png}} | ||
+ | ===== Problématiques à envisager ===== | ||
* Les routeurs des adhérents TTN sont majoritairement en firmware d'usine, avec une IP en 172 côté WAN | * Les routeurs des adhérents TTN sont majoritairement en firmware d'usine, avec une IP en 172 côté WAN | ||
- | * Répartition du traffic sur les fibres | + | * Répartition du trafic sur les fibres |
- | * Forçage du traffic sur une des deux fibre si un équipement pose pb sur l'autre lien | + | * Forçage du trafic sur une des deux fibre si un équipement pose pb sur l'autre lien |
* Routage dynamique ou pas | * Routage dynamique ou pas | ||
+ | * Minimiser le trafic du lien radio entre les routeurs à saint-gaudens en situation nominale | ||
+ | |||
+ | ===== Problèmes rencontrés ===== | ||
+ | |||
+ | * OSPF entre les rt_tls et les routeurs à Saint Gaudens permettrai de faire de sorte que les routes pour le trafic allant d'internet aux adhérents mais sans tenir compte de l'état du réseau radio et sans permettre facilement de répartition sur les fibres | ||
+ | * VRRP utilise mutlicast et est chatty, peu adapté sur le LAN radio (je pensais qu'on pourrait s'en servir pour que la default gateway des routeurs adt soit virtuelle) | ||
+ | |||
+ | ===== Solution en routage statique ===== | ||
+ | ==== Configs ==== | ||
+ | <code text hosts> | ||
+ | 127.0.0.1 localhost | ||
+ | 192.168.90.222 rt_mitterand | ||
+ | 192.168.91.222 rt_zac | ||
+ | 6.5.4.1 rt_tls | ||
+ | </code> | ||
+ | |||
+ | <code text rt_tls_network-interface> | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | up ip addr add 6.5.4.1 dev $IFACE | ||
+ | |||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | # Pour les besoin de la simulation, NAT de mon aDSL, sinon rmmod iptables conseillé, cf h7 | ||
+ | address 192.168.1.42 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 192.168.1.254 | ||
+ | up sysctl -w net.ipv4.ip_forward=1 | ||
+ | up iptables -t nat -F POSTROUTING | ||
+ | up iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE | ||
+ | |||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 192.168.90.223 | ||
+ | netmask 255.255.255.0 | ||
+ | up ip route add 6.5.4.0/24 via 192.168.90.222 | ||
+ | |||
+ | auto eth2 | ||
+ | iface eth2 inet static | ||
+ | address 192.168.91.223 | ||
+ | netmask 255.255.255.0 | ||
+ | up ip route add 6.5.5.0/24 via 192.168.91.222 | ||
+ | </code> | ||
+ | |||
+ | <code text rt_mitterand_network-interface> | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.90.222 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 192.168.90.223 | ||
+ | |||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 172.16.0.1 | ||
+ | netmask 255.255.0.0 | ||
+ | |||
+ | #auto eth1:253 | ||
+ | iface eth1:253 inet static | ||
+ | address 172.16.0.253 | ||
+ | netmask 255.255.0.0 | ||
+ | up /root/setup_routing.sh | ||
+ | |||
+ | auto eth1:254 | ||
+ | iface eth1:254 inet static | ||
+ | address 172.16.0.254 | ||
+ | netmask 255.255.0.0 | ||
+ | up /root/setup_routing.sh | ||
+ | </code> | ||
+ | |||
+ | <code text rt_zac_network-interface> | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.91.222 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 192.168.91.223 | ||
+ | up sysctl -w net.ipv4.ip_forward=1 | ||
+ | |||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 172.16.0.2 | ||
+ | netmask 255.255.0.0 | ||
+ | |||
+ | auto eth1:253 | ||
+ | iface eth1:253 inet static | ||
+ | address 172.16.0.253 | ||
+ | netmask 255.255.0.0 | ||
+ | up /root/setup_routing.sh | ||
+ | |||
+ | #auto eth1:254 | ||
+ | iface eth1:254 inet static | ||
+ | address 172.16.0.254 | ||
+ | netmask 255.255.0.0 | ||
+ | up /root/setup_routing.sh | ||
+ | </code> | ||
+ | |||
+ | <code text adt1_network-interface> | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # Simule l'antenne en bridge | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 172.16.10.10 | ||
+ | netmask 255.255.0.0 | ||
+ | |||
+ | # Simule le routeur OpenWRT avec IP publiques | ||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 6.5.4.10 | ||
+ | netmask 255.255.255.255 | ||
+ | up ip route replace default via 172.16.0.254 src 6.5.4.10 dev eth0 | ||
+ | up sysctl -w net.ipv4.ip_forward=1 | ||
+ | </code> | ||
+ | |||
+ | <code text adt2_network-interface> | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # Simle l'antenne en bridge | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 172.16.10.11 | ||
+ | netmask 255.255.0.0 | ||
+ | |||
+ | # Simule le routeur OpenWRT avec IP publiques | ||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 6.5.5.10 | ||
+ | netmask 255.255.255.255 | ||
+ | up ip route replace default via 172.16.0.253 src 6.5.5.10 dev eth0 | ||
+ | up sysctl -w net.ipv4.ip_forward=1 | ||
+ | </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> | ||