====== Simulations réseau et essais techniques ======
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 =====
* CHD a une plage de 1024 IP publiques à distribuer aux adhérents (exemple pris 6.5.4.0/22)
* CHD a un machine dans le datacenter TLS00 de 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
* 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
===== Schémas =====
{{: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
* Répartition du trafic sur les fibres
* Forçage du trafic sur une des deux fibre si un équipement pose pb sur l'autre lien
* 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 ====
127.0.0.1 localhost
192.168.90.222 rt_mitterand
192.168.91.222 rt_zac
6.5.4.1 rt_tls
# 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
# 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
# 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
# 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
# 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
==== Scripts ====
#!/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
#!/bin/bash
# set ts=4
# Généré le 2015-11-29 21:08:50+01:00
#adt
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
#[...]
#!/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
rm $TMP