Petit retour sur la bascule d'une connex à une autre en cas de coupure. Ce que j'avais mis en place en suivant les instructions de Mikrotik ne fonctionne pas (ou très mal). J'ai eu une panne de 5h hier sur la ligne Free, et j'ai du basculer à la mano.
Du coup, j'ai décidé de faire autre chose, où je ne laisse plus le check gateway décider de la situation.
Déjà, niveau ipv4, je suis repassé en dhcp pour l’obtention des adresses et routes, au lieu de les entrer à la main. Quand je mets les mêmes infos à la mano, ça ne se comporte pas nickel en cas de bascule, aucune idée du pourquoi pour le moment.
Donc, l'eth8 est relié à mon routeur 4g, le sfp2 à la delta. Sur les équipements, la réservation est fixe évidemment. A noter, lors de la création du dhcp client, mettre une distance plus élevée pour le ligne de secours (ici 3 vs 1)
Là, je fais tous les tests de routage, forcer par une connexion, une autre, tout est ok et sans "perte".
Ensuite, mon idée est de jouer avec les poids / distance. Si la connex Free est ko, alors passer la 4g en distance "1", et la fibre en "2". Quand la connex Free est de nouveau up, la repasser en "1", et mettre la 4g en "2" (j'ai utilisé "3" dans mon cas, mais c'est le même principe)
Pour ça, j'ai fait 2 scripts assez simple :
Le premier "PrimaryVersBackup", va tester le lien fibre en faisant un ping vers 9.9.9.9 par l'interface fibre. Si il y a 0 réponse, alors on agit. On passe la distance du premier client dhcp à 1, et celle du 2nd dhcp client à 2 :
:if ( [/ping 9.9.9.9 interface=sfp-sfpplus2 count=30 ] = 0 ) do={/ip dhcp-client set 0 default-route-distance=1 ; /ip dhcp-client set 1 default-route-distance=2}
Ce script est schedulé toutes les 2 minutes.
Toutes les minutes, j'ai un autre script qui vérifie la connexion fibre, si elle est up et sans perte, alors on la met en priorité.
:if ( [/ping 9.9.9.9 interface=sfp-sfpplus2 count=15 ] = 15 ) do={/ip dhcp-client set 0 default-route-distance=3 ; /ip dhcp-client set 1 default-route-distance=1}
Je pense que je peux faire ça en 1 seul script en jouant avec un "else", mais pour mes tests il était plus simple de partir sur 2 actions indépendantes.
Voilà voilà.
EDIT : j'ai eu une coupure de plusieurs minutes depuis, et ça a fonctionné comme prévu.