Auteur Sujet: Paramétrage d'un CCR2116 pour avoir un failover avec route recursive  (Lu 1264 fois)

0 Membres et 1 Invité sur ce sujet

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Bonjour à tous je suis en train de paramétrer le routeur CCR2116 pour avoir un failover avec route recursive (j'ai pour ce faire suivi cette vidéo : youtube.com/watch?v=eTmpBAAW_pQ )

L'objectif étant que quand mes interfaces br-wan (fibre Orange) et ether2-4G (Routeur 4G Huawai) fonctionne toute deux normalement seulement la fibre soit utilisé et dès lors que la fibre tombe alors utilisation de la fibre et des que la panne fibre est résolu alors passage automatique à nouveau sur la fibre.

Si je désactive br-wan dans interface ma route fibre, et mon moniteur google vers fibre passe bien en rouge et la 4G prend bien la relève, et dans DHCP client coté fibre il détecte bien une erreur et Statut : Searching puis quand je reactive a nouveau Statut : Bound

Mais premier problème : si je débranche la fibre ma route fibre, et mon moniteur google vers fibre passe bien en rouge et la 4G prend bien la relève, mais dans DHCP client coté fibre il NE détecte pas d'erreur et Statut reste sur bound (j'ai l'impression que le routeur ne détecte pas si la fibre et branché ou non ) de fait quand je rebranche la fibre mes route fibre reste rouge.
Pour que le client DHCP récupère les adresse et que la route principale revienne sur la fibre orange je doit dans le DHCP Client br-wan désactiver et réactiver là il me fait une nouvelle recherche et la route principal reviens sur la fibre.
Peut-être que l'idéal serait de faire un script pour désactiver et réactiver le client DHCP br-wan toute les X minute si la route passe en rouge ... Mais comment scripter cela ? Avez-vous une autre idées ?
Comment detecter si la fibre est branché ou non ?

Deuxième problème : Si jamais la Gateway de br-wan change les route vont t-elle changé automatiquement ? (Etant donnée que j'ai désactive default route dans br-wan) si non comment faire pour que les routes s'adapte au changement de passerelle ? J'ai bien essayer de mettre br-wan en lieu et place de mes ip passerelle mais de fait les routes fibre ne fonctionne plus.

Troisième problème : J'ai donc supposer que dans DHCP Client je dois passé les route a no sur br-wan cependant par intermittence j'ai des coupure AS et S (Route fibre et 4G passant au rouge (mais pas en meme temps es-ce un problème au niveau du scope ou target scope )

Par ailleurs je souhaiterai scripter l'envoi d'un mail des lors qu'un basculement de route est detecter ? Avec un script peut-être ? Mais dans ce cas comment scripter cela

« Modifié: 14 mars 2023 à 21:08:32 par Asclèpios »

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #1 le: 13 mars 2023 à 20:42:04 »
J’ai essayé de rédiger une première ébauche de script pour m’envoyer un mail lors du changement de route qu’en pensez-vous ?


:local primary_route "Ma gateway Orange "
:local backup_route "192.168.8.1"
:local email_to "mon@email.com"
:local email_subject "Basculement de route Mikrotik"

:global previous_route
:global current_route

:if ($previous_route = "") do={
    :set previous_route $primary_route
}

:if ($current_route = "") do={
    :set current_route [/ip route get [/ip route find dst-address="8.8.8.8"] gateway]
}

:if ($previous_route != $current_route) do={
    :local email_body "La route actuelle est $current_route"
    /tool e-mail send to=$email_to subject=$email_subject body=$email_body
    :set previous_route $current_route
}

:log info "Vérification de la route"

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #2 le: 14 mars 2023 à 09:41:08 »
A ceux que ca intéresse, j'ai enfin réussi à finaliser un script de reboot si température en erreur, du au fail des PSU.

:local temperature [/system/health get [find name=temperature] value]
:local message ""
:global CPUTemperature
:log warning $temperature;
{
  :if ($CPUTemperature<0) do={
    :global CPUTemperature 0
    }
    :if ($temperature<2 && $CPUTemperature=0) do={
      :set message "Temperature CPU ERREUR: $temperature C - Reboot en cours"
      :log warning $message;
      :global CPUTemperature 0
      /system reboot
      :delay 3; 
    }
}

Une bonne journée à tous

Hello,

Pourquoi utilises-tu la variable CPUTemperature ?

merci.

Gnubyte

  • Abonné Orange Fibre
  • *
  • Messages: 1 062
  • Toulon (83)
    • HSGMII intégriste
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #3 le: 14 mars 2023 à 13:12:31 »
Bonjour à tous je suis en train de paramétrer le routeur CCR2116 pour avoir un failover avec route recursive (j'ai pour ce faire suivi cette vidéo : youtube.com/watch?v=eTmpBAAW_pQ )

L'objectif étant que quand mes interfaces br-wan (fibre Orange) et ether2-4G (Routeur 4G Huawai) fonctionne toute deux normalement seulement la fibre soit utilisé et dès lors que la fibre tombe alors utilisation de la fibre et des que la panne fibre est résolu alors passage automatique à nouveau sur la fibre.

Si je désactive br-wan dans interface ma route fibre, et mon moniteur google vers fibre passe bien en rouge et la 4G prend bien la relève, et dans DHCP client coté fibre il détecte bien une erreur et Statut : Searching puis quand je reactive a nouveau Statut : Bound

Mais premier problème : si je débranche la fibre ma route fibre, et mon moniteur google vers fibre passe bien en rouge et la 4G prend bien la relève, mais dans DHCP client coté fibre il NE détecte pas d'erreur et Statut reste sur bound (j'ai l'impression que le routeur ne détecte pas si la fibre et branché ou non ) de fait quand je rebranche la fibre mes route fibre reste rouge.
Pour que le client DHCP récupère les adresse et que la route principale revienne sur la fibre orange je doit dans le DHCP Client br-wan désactiver et réactiver là il me fait une nouvelle recherche et la route principal reviens sur la fibre.
Peut-être que l'idéal serait de faire un script pour désactiver et réactiver le client DHCP br-wan toute les X minute si la route passe en rouge ... Mais comment scripter cela ? Avez-vous une autre idées ?
Comment detecter si la fibre est branché ou non ?

Deuxième problème : Si jamais la Gateway de br-wan change les route vont t-elle changé automatiquement ? (Etant donnée que j'ai désactive default route dans br-wan) si non comment faire pour que les routes s'adapte au changement de passerelle ? J'ai bien essayer de mettre br-wan en lieu et place de mes ip passerelle mais de fait les routes fibre ne fonctionne plus.

Par ailleurs je souhaiterai scripter l'envoi d'un mail des lors qu'un basculement de route est detecter ? Avec un script peut-être ? Mais dans ce cas comment scripter cela

Passionnant sujet.
J'ai demandé le transfert de ce sujet dans la section consacrée à RouterOS, où on se fera un plaisir de te suivre.

Ta problématique rejoint la mienne, mais je n'ai oas encore eu le temps de l'adresser.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #4 le: 14 mars 2023 à 14:34:40 »
Hello,

Moi j'utilise ça, à tester ...
Je pense qu'on peut optimiser un peu (beaucoup).
les ip de test addrTestX sont les IPs définis en recursive routing pour tester le lien principal fibre.


# check wan1 and release/restart dhclient as required
# TODO : eventually disable / enable iface
#
# version 20230301

:local dhclient4ID "0"
:local dhclient6ID "0"
:local iface "bridge-wan1"
:local addrTest1 "1.0.0.1"
:local addrTest2 "9.9.9.10"
:local addrTest3 "8.8.4.4"
:local addrONU "192.168.x.10"
:local LogHeader "check-dhclient"
:local email "xxx@xxx.com"

:local msg
:local addr
:local routeStatus
:local pingStatus
:local linkStatus

# global vars
:local Date [/system clock get date];
:local Time [/system clock get time];
:global dhclientStatus
:global dhclientRun
:set dhclientRun ($Time . " " . $Date);


# init dohStatus
:if ( [:tostr $dhclientStatus]  = "" ) do={
      :set dhclientStatus ($Time . " " . $Date);
}


# test ONU/ONT
:set addr "$addrONU" ; :set linkStatus "OK"
if ([/ping $addr count=3]=0) do={
      :set msg "$LogHeader : link ONU $addr FAILED !"
      :put "$msg"; :log warning "$msg"
      :set dhclientStatus "ONU"
} else={
       :set dhclientStatus "OK"
       :set msg "$LogHeader : link ONU $addr alive"
       :put "$msg"; :log info "$msg"
}


# test route
:set addr "$addrTest1/32" ; :set routeStatus "OK"
:retry command={/ip route get [ find dst-address=$addr active ]} delay=1 max=3 on-error={:set routeStatus "FAILED"}
if ($routeStatus = "FAILED") do={
      :set msg "$LogHeader : route $addr FAILED !"
      :put "$msg"; :log warning "$msg"
      :set dhclientStatus "WARNING"

      :set addr "$addrTest2/32" ; :set routeStatus "WARNING"
      :retry command={/ip route get [ find dst-address=$addr active ]} delay=1 max=3 on-error={:set routeStatus "FAILED"}
      if ($routeStatus = "FAILED") do={
             :set msg "$LogHeader : route $addr FAILED !"
             :put "$msg"; :log warning "$msg"
             :set dhclientStatus "WARNING"

             :set addr "$addrTest3/32" ; :set routeStatus "WARNING"
             :retry command={/ip route get [ find dst-address=$addr active ]} delay=1 max=3 on-error={:set routeStatus "FAILED"}
             if ($routeStatus = "FAILED") do={
                    :set msg "$LogHeader : route $addr FAILED !"
                    :put "$msg"; :log error "$msg"
                    :set routeStatus "FAILED"
                    :set dhclientStatus "FAILED"
             } else={
                    :set dhclientStatus "OK"
                    :set msg "$LogHeader : route $addr active"
                    :put "$msg"; :log info "$msg"
             }
      } else={
             :set dhclientStatus "OK"
             :set msg "$LogHeader : route $addr active"
             :put "$msg"; :log info "$msg"
      }
} else={
      :set dhclientStatus "OK"
      :set msg "$LogHeader : route $addr active"
      :put "$msg"; :log info "$msg"
}



# test ping
:set addr "$addrTest1" ; :set pingStatus "OK"
if ([/ping $addr interface=$iface count=3]=0) do={
      :set msg "$LogHeader : ping $addr FAILED !"
      :put "$msg"; :log warning "$msg"
      :set dhclientStatus "WARNING"

      :set addr "$addrTest2" ; :set pingStatus "WARNING"
      if ([/ping $addr interface=$iface count=3]=0) do={
             :set msg "$LogHeader : ping $addr FAILED !"
             :put "$msg"; :log warning "$msg"
             :set dhclientStatus "WARNING"

             :set addr "$addrTest3" ; :set pingStatus "WARNING"
             if ([/ping $addr interface=$iface count=3]=0) do={
                    :set msg "$LogHeader : ping $addr FAILED !"
                    :put "$msg"; :log error "$msg"
                    :set dhclientStatus "FAILED"
                    :set pingStatus "FAILED"
             } else={
                    :set dhclientStatus "OK"
                    :set msg "$LogHeader : ping $addr alive"
                    :put "$msg"; :log info "$msg"
             }
      } else={
             :set dhclientStatus "OK"
             :set msg "$LogHeader : ping $addr alive"
             :put "$msg"; :log info "$msg"
      }
} else={
      :set dhclientStatus "OK"
      :set msg "$LogHeader : ping $addr alive"
      :put "$msg"; :log info "$msg"
}


# status
:set msg "$LogHeader : status routeStatus:$routeStatus pingStatus:$pingStatus dhclientStatus:$dhclientStatus linkStatus:$linkStatus"
:put "$msg"; :log info "$msg"


# final decision
if ( $dhclientStatus = "FAILED" or $pingStatus = "FAILED" or $routeStatus = "FAILED" ) do={
     :set msg "$LogHeader : release dhclient ID ip4:$dhclient4ID ip6:$dhclient6ID"
     :put "$msg"; :log warning "$msg"
     /tool e-mail send to=$email subject="$msg"
     :set dhclientStatus "RELEASE"
     /ip/dhcp-client/release numbers=$dhclient4ID
     /ipv6/dhcp-client/release numbers=$dhclient6ID
} else={
       :set msg "$LogHeader : everyting is fine"
       :put "$msg"; :log info "$msg"
}

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #5 le: 14 mars 2023 à 15:57:18 »
Passionnant sujet.
J'ai demandé le transfert de ce sujet dans la section consacrée à RouterOS, où on se fera un plaisir de te suivre.

Ta problématique rejoint la mienne, mais je n'ai oas encore eu le temps de l'adresser.

Merci, pas de soucis ...

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #6 le: 14 mars 2023 à 16:02:27 »
J'ai peut-être avancé pour la mise a jour de la route en cas de changement de la Gateway, j'ai trouvé ce script que j'ai adapter a ma route fibre qu'en pensez-vous ?

https://forum.mikrotik.com/viewtopic.php?t=139597

:local newgw [ip dhcp-client get [find interface="br-wan"] gateway];
:local routegw [/ip route get [find comment="Fibre"] gateway ];
:if ($newgw != $routegw) do={
     /ip route set [find comment="Fibre"] gateway=$newgw;
}

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #7 le: 14 mars 2023 à 18:39:52 »
J'ai traduit et adapté la doc a mon routeur, (sans mettre en place pour le moment vue qu'avec ma configuration cela fonctionne actuellement) mais avec quelque default important.

https://help.mikrotik.com/docs/pages/viewpage.action?pageId=26476608


Commençons par marquer le trafic en configurant les tables de routage et les règles de mangle du pare-feu, afin que nous ayons tout préconfiguré lorsque nous irons à la section de routage :
==> Quels est l'intérêt de cette règle ?
/routing/table
add fib name=Fibre
add fib name=Routeur4G
 
/ip/firewall/mangle
add chain=output connection-state=new connection-mark=no-mark action=mark-connection new-connection-mark=Fibre_conn out-interface=br-wan
add chain=output connection-mark=Fibre_conn action=mark-routing new-routing-mark=Fibre out-interface=br-wan
add chain=output connection-state=new connection-mark=no-mark action=mark-connection new-connection-mark=Routeur4G_conn out-interface=ether2-4G
add chain=output connection-mark=Routeur4G_conn action=mark-routing new-routing-mark=Routeur4G out-interface=ether2-4G

Nous diviserons la configuration de routage en trois parties. Tout d'abord, nous allons configurer Host1 et Host2 comme adresses de destination dans la section de routage :
==> Ici dans la Gateway Orange si je mets br-wan la route ne fonctionne pas, si elle est défini sur br-wan comment remplacer l'ip de la Gateway par une variable Gateway br-wan

/ip/route/
add dst-address=8.8.8.8 scope=10 gateway= //Ma Gateway Orange
add dst-address=8.8.4.4 scope=10 gateway=192.168.8.1 // Mon Gateway Routeur4G

Configurez maintenant les routes qui seront résolues récursivement, de sorte qu'elles ne soient actives que lorsqu'elles seront accessibles avec ping :

/ip/route/
add distance=1 gateway=8.8.8.8 routing-table=Fibre target-scope=11 check-gateway=ping
add distance=2 gateway=8.8.4.4 routing-table=Fibre target-scope=11 check-gateway=ping

Configurez des routes récursives similaires pour la deuxième passerelle :

/ip/route/
add distance=1 gateway=8.8.4.4 routing-table=Routeur4G target-scope=11 check-gateway=ping
add distance=2 gateway=8.8.8.8 routing-table=Routeur4G target-scope=11 check-gateway=ping
« Modifié: 14 mars 2023 à 19:46:09 par Asclèpios »

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #8 le: 15 mars 2023 à 18:57:41 »
Hello,

Moi j'utilise ça, à tester ...
Je pense qu'on peut optimiser un peu (beaucoup).
les ip de test addrTestX sont les IPs définis en recursive routing pour tester le lien principal fibre.


Merci pour ce script peut-tu m'expliquer comment il fait pour ping l'ONU depuis le routeur (il me semblait que celui ci n'était pas accessible depuis le routeur, par ailleurs pourrai-tu me l'adapter pour que si la fibre est HS alors il bascule sur ether2-4G et pour qu'il revienne a sa route par défaut des lors que la fibre est a nouveau OK

Merci par avance

Asclèpios

  • Abonné SFR fibre FttH
  • *
  • Messages: 636
  • Marseille (13)
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #9 le: 15 mars 2023 à 20:00:04 »
Quelques nouvelle : J'ai réussi a obtenir des route stable visiblement un problème de ping causé par les règles de firewall à investigué donc... Par ailleurs je me suis aperçu que placer les règles dans des table (Routeur4G et Fibre ) séparer avait pour effet de mettre les Route HS cependant si je mets tout dans la table main tout est ok.

Quels est l'intérêt des règles mangles et des table de routage différente (comme préconisé dans la doc MikroTik) ? 
Dans IP Route quels est la difference entre AS et AS+ ? (Car après avoir désactiver puis réactiver l'interface 4G pour tester AS+ à disparu de ma route 0.0.0.0/0 gateway : ma gateway fibre )

doctorrock

  • Abonné Orange Fibre
  • *
  • Messages: 932
  • Draguignan 83
Paramétrage d'un CCR2116 pour avoir un failover avec route recursive
« Réponse #10 le: 21 mars 2023 à 19:22:52 »
Les tables de routage permettent de faire du Policy routing, c'est à dire d'envoyer tel trafic par ci, et l'autre par là.
J'utilise ça chez moi pour router des VLANs internes vers telle ou telle sortie (VLAN0 passe par ISP1 et VLAN1 passe par ISP2 pour sortir sur Internet, par exemple).

Pour faire tomber les routes quand tu débranches la fibre, ou quand elle tombe, utilise le paramètre check-gateway en ping ou en arp sur ta route.
RouterOS va pinger ou ARP-request la gateway à intervalle régulier (qui peut plus ou moins se régler facilement) et s'il n'obtient pas de réponse : il va tomber la route (et inversement elle va remonter toute seule quand ca sera OK à nouveau).

J'utilise ça car j'ai aussi de l'ECMP chez moi, comme toi (j'ai plusieurs FAI et un prend le relai de l'autre quand ce dernier tombe).