Redondance du routage (couche 3)

Grenode met en place une redondance de son infrastructure de routage :

La mise en place de cette infrastructure est prévue pour l'été 2014 (juillet/août, voire septembre).

Scénarii où ce type de redondance est utile :

  • panne du routeur principal (batture)
  • bascule temporaire sur le routeur de backup pour une intervention sur le routeur principal

Selon la configuration de la couche 2, cela peut ne pas protéger contre une panne complète à LyonIX 1 (si le switch poulpe tombe, on perd nos VLAN d'interco, sauf si Rézopole nous les amène aussi à Vénissieux).

Redondance du routage externe

Architecture : deux routeurs de bordure BGP, avec tous les deux les mêmes sessions BGP externes. L'idée est de faire du "hot standby", avec un routeur principal, et un routeur de backup qui prend le relais automatiquement en cas de défaillance du routeur principal.

Ce comportement est obtenu avec une localpref différente (pour le trafic sortant) et une MED différente (pour le trafic entrant, cf. http://bird.network.cz/?get_doc&f=bird-6.html )

Redondance du routage interne

Pour les services internes de Grenode, nous utilisons déjà du routage dynamique (OSPF). Configuration envisagée :

  • les deux routeurs de bordure sont dans l'aire 0
  • chaque routeur a un lien vers les deux routeurs de bordure (les deux routeurs de bordure sont donc dans toutes les aires OSPF)
  • la route par défaut est annoncée par les deux routeurs de bordure, avec une métrique plus faible pour le routeur principal ("default cost X" dans Bird)

Redondance des livraisons IP

Les Livraisons IP aux membres sont actuellement faites avec du routage statique, ce qui complique un peu les choses.

IPv4

Utilisation possible de CARP pour partager la même adresse IP entre les deux routeurs de bordure, en "hot standby".

Sous Linux, UCARP semble être la seule implémentation de CARP, en userspace.

IPv6

Pour IPv6, on peut utiliser les Router Advertisement (RA) pour annoncer deux routes par défaut, avec une préférence (i.e. priorité) différente.

IPv6 implémente un mécanisme nommé "Neighbor Unreachability Detection", qui permet de se rendre compte en quelques secondes qu'un voisin utilisé comme next-hop n'est plus joignable. Cela permet de basculer rapidement vers une autre gateway disponible (cf. section 7.3 de la RFC4861). Ainsi, les machines livrées vont automatiquement basculer sur le routeur de backup lorsque le routeur principal n'est plus joignable.

Pour s'assurer que la route par défaut non-fonctionnelle disparaisse rapidement, on peut annoncer les routes par défaut avec une faible durée de vie, par exemple une grosse dizaine de secondes. Ça permet aussi de se prémunir du cas suivant, non pris en compte par Neighbor Unreachability Detection : le routeur principal est toujours là, mais il a perdu toutes ses routes parce que Bird est éteint ou a crashé. Évidemment, il faut que ce soit Bird lui-même qui annonce les RA.

Configuration des routeurs de bordure

Utilisation de radvd, quagga ou bird pour annoncer uniquement une route par défaut :

  • max RA interval : 5 seconds
  • default lifetime : 15 seconds
  • default preference : "high" (routeur principal) ou "medium" (routeur de backup)
  • pas de préfixe annoncé

Cette configuration doit être répétée pour chaque interface de livraison.

C'est mieux si c'est le daemon BGP lui-même qui annonce les RA, et pas un autre programme comme radvd : ainsi, les RA stoppent si le daemon BGP ne fonctionne plus. Avec Bird, il est même possible de conditionner l'envoi des RA par la présence d'une route (si la route disparaît, les RA ne sont plus envoyés). Cependant, ça semble être une mauvaise idée de rajouter trop de complexité.

Configuration pour Bird :

protocol device { }

protocol radv {
  interface "eth0.201", "eth0.202" {
    max ra interval 5;
    default lifetime 15;
    #default preference high;  # A partir de Bird 1.4.4

    # Par défaut, Bird annonce un préfixe pour chaque adresse configurée sur
    # l'interface.  Cette configuration matche n'importe quel préfixe et
    # désactive ce comportement.
    prefix ::/0 {
      skip;
    };
  };
}

Actuellement, Bird ne permet pas de choisir la préférence de la route par défaut annoncée, c'est gênant (patch envoyé upstream).

Configuration pour radvd :

interface eth0.201
{
  AdvSendAdvert on;
  MaxRtrAdvInterval 5;
  AdvDefaultLifeTime 15;
  AdvDefaultPreference high;
};

Visiblement, on est obligé de répéter le bloc pour chaque interface.

Configuration des machines livrées

Note : la route installée aura un next-hop en link-local, ce qui rend inutile l'éventuel /64 d'interconnexion.

Configuration sous Linux pour accepter les RA, mais seulement permettre d'installer une route par défaut (pas d'auto-configuration d'adresse) :

  • net.ipv6.conf.eth0.accept_ra = 2
  • net.ipv6.conf.eth0.accept_ra_defrtr = 1
  • net.ipv6.conf.eth0.accept_ra_rtr_pref = 1
  • net.ipv6.conf.eth0.accept_ra_pinfo = 0
  • net.ipv6.conf.eth0.autoconf = 0

Pour FreeBSD : TODO

Redondance couche 2

Pas de redondance en couche 2 pour le moment.