À Grenode, il y a deux types de livraison IP, celle pour l'accès au reste d'Internet dites de transit et celle pour la collecte xDSL.

Afin d'isoler les réseaux de chacun des membres de Grenode, le réseau physique est découpé à l'aide de VLAN. Sauf configuration particulière, les membres ne peuvent pas se contacter entre eux sans passer par la passerelle.

Si un membre désire plus d'adresses IP ou dispose de ses propres blocs, il est possible de router un bloc d'adresse. L'ensemble des adresses affectées est documenté dans le ?Plan du réseau.

Ajouter une livraison IP de type Transit

Les livraisons IP de type transit se font sur batture et safran, chaque livraison étant faite sur un vlan dédié. Les préfixes utilisés sont :

  • en IPv4 172.17.<vlan>.0/24
  • en IPv6 2001:912:800:<vlan>::/64 et fe80::/64

Les différents réseaux sont documentés dans [[Plan_niveau3_IPv4]. Les 128 premières IP sont réservé à Grenode.

  • Les adresses .1 et .2 sont réservées pour les IP flottantes en VRRP. L'IP .1 est en priorité à Lyon (safran) mais peut basculer à Grenoble (batture). A l'inverse, l'IP .2 est en priorité à Grenoble mais peut basculer à Lyon.
  • Les adresses .3 et .4 sont respectivement celle de safran et batture.
  • Les adresses au-delà de .128 peuvent être utilisées par le membre si nécessaire, par exemple pour établir une session BGP avec safran et batture.

En IPv6, les IP flottantes sont fe80::1 et fe80::2 sur le même principe.

Coté Grenode

Conf interface

Dans /etc/network/interfaces (sur safran):

auto enp2s0f0.202
iface enp2s0f0.202 inet static
    address 172.17.202.3/24
    up ip link set $IFACE alias "cust: Rezine [1Gbit] (gw) {vlan202}"

iface enp2s0f0.202 inet6 static
    address 2001:912:800:202::3/64

Dans /etc/network/interfaces (sur batture):

auto enp2s0f0.202
iface enp2s0f0.202 inet static
    address 172.17.202.4/24
    up ip link set $IFACE alias "cust: Rezine [1Gbit] (gw) {vlan202}"

iface enp2s0f0.202 inet6 static
    address 2001:912:800:202::4/64

Conf VRRP

On utilise keepalived. Idées principales :

  • chaque routeur teste continuellement l'état de l'autre en IPv4 pour savoir si il y a besoin de basculer les IP flottantes
  • on a au total 4 instances VRRP par VLAN : une IPv4 en priorité à Lyon, une IPv4 en priorité à Grenoble, et pareil en IPv6
  • chaque instance VRRP est distinguée par son "virtual router id" qui doit être identique sur tous les routeurs
  • on synchronise l'état de l'instance IPv4 et de l'instance correspondante IPv6 via un "sync group"

Voilà un exemple de configuration dans /etc/keepalived/conf.d/vl201-grs-gresille.conf. A noter que la configuration est générée par Ansible parce que c'est assez pénible sinon.

vrrp_sync_group vl201-grs-gresille-batture.grenode.net {
  group {
    vl201-grs-gresille_2
    vl201-grs-gresille_4
  }
}

vrrp_sync_group vl201-grs-gresille-safran.grenode.net {
  group {
    vl201-grs-gresille_1
    vl201-grs-gresille_3
  }
}


vrrp_instance vl201-grs-gresille_1 {
  interface enp2s0f0.201
  virtual_router_id 1
  state MASTER
  priority 150
  virtual_ipaddress {
    172.17.201.1/32 dev enp2s0f0.201
  }
}

vrrp_instance vl201-grs-gresille_2 {
  interface enp2s0f0.201
  virtual_router_id 2
  state BACKUP
  priority 100
  virtual_ipaddress {
    172.17.201.2/32 dev enp2s0f0.201
  }
}

vrrp_instance vl201-grs-gresille_3 {
  interface enp2s0f0.201
  virtual_router_id 3
  state MASTER
  priority 150
  virtual_ipaddress {
    fe80::1/64 dev enp2s0f0.201
  }
}

vrrp_instance vl201-grs-gresille_4 {
  interface enp2s0f0.201
  virtual_router_id 4
  state BACKUP
  priority 100
  virtual_ipaddress {
    fe80::2/64 dev enp2s0f0.201
  }
}

Conf BGP

Conf bird sur batture/safran (identique):

/etc/bird/bird/bgp.conf:

#
# Member: Rezine
#
template bgp tpl_rezine from tpl {
        description "Livraison Rezine";
        import where bgp_import(65303, "member", 0);
        export where bgp_export(65303, "default", 0);
}

protocol bgp tpl_rezine_phloeme from tpl_rezine {
        neighbor 172.17.202.129 as 65303;
}

protocol bgp tpl_rezine_xyleme from tpl_rezine {
        neighbor 172.17.202.130 as 65303;
}

/etc/bird/bird/filters.conf:

prefix set as_prefixes;
{

    case AS {
        # Illyse
        4200000203:  as_prefixes = [
                        89.234.140.0/24+
        ];
        65303:  as_prefixes = [
            193.33.56.0/23+, 80.67.183.0/24+
        ];
        else: print "is_net_from_member: The AS number is unknown"; return false;
    }

    return (net ~ as_prefixes);
}

/etc/bird/bird6/bgp.conf:

#
# Member: Rezine
#
template bgp tpl_rezine from tpl {
        description "Livraison Rezine";
        import where bgp_import(65303, "member", 0);
        export where bgp_export(65303, "default", 0);
}

protocol bgp tpl_rezine_phloeme from tpl_rezine {
        neighbor 2001:912:800:202::129 as 65303;
}

protocol bgp tpl_rezine_xyleme from tpl_rezine {
        neighbor 2001:912:800:202::130 as 65303;
}

/etc/bird/bird6/filters.conf:

TODO
  • 172.17.220.129 et 172.17.220.130 sont les ipv4 des routeurs du coté du membre
  • 2001:912:800:202::129 2001:912:800:202::130 sont les ipv6 des routeurs du coté membre
  • 65303 est le numéro d'as local du membre

Coté membre

Si VRRP

Pour le membre il s'agit d'un réseau "classique". Avec deux passerelles flottantes possibles :

  • une qui est de préférence à Lyon : 172.17.<vlan>.1 et fe80::1
  • une qui est de préférence à Grenoble :172.17.<vlan>.2 et fe80::2

Exemple de configuration Debian dans /etc/network/interfaces :

auto eth0
iface eth0 inet static
    address 91.216.110.XX/32
    gateway 172.17.<VLAN>.1

iface eth0 inet6 static
    address 2001:912:410::XX/64
    gateway fe80::1

Note : les versions récentes de Debian gèrent bien le fait d'avoir une gateway dans un autre subnet. Auparavant, il fallait passer par une configuration de type up ip route add default via 172.17.<VLAN>.1 dev $IFACE onlink.

Si BGP

Il faut établir deux sessions BGP par routeur du membres sur les ip non flotantes des routeurs de Grenode.

Ajouter une livraison IP de type xDSL

Les livraisons IP de type collecte DSL de font sur ajut et attrape.

Les différents réseaux sont documentés dans [[Plan_niveau3_IPv4].

Cf ?Collecte DSL

Livraison historique en /32

IPv4

Les livraisons IPv4 sont fournies sur des VLAN distincts dans des réseaux à adresse IP unique. Les membres sont livrés sur des /32. Ainsi une seule adresse IP est nécessaire par livraison.

Dans l'example suivant, la passerelle est batture (91.216.110.6), le vlan du membre est 202, et le bloc 193.33.56.0/27 est routé sur l'adresse de livraison (91.216.110.38).

Configuration sur la passerelle :

auto eth0.202
iface eth0.202 inet manual
    up ip link set $IFACE up
    # "onlink" permet de faire croire à Bird qu'il s'agit d'une route
    # connectée, pour la redistribuer dans OSPF.
    up ip route add 91.216.110.38/32 via 91.216.110.38 onlink dev $IFACE src 91.216.110.6 proto static
    up ip route add 193.33.56.0/27 via 91.216.110.38 onlink dev $IFACE src 91.216.110.6 proto static
    down ip route del 193.33.56.0/27 via 91.216.110.38 onlink dev $IFACE proto static || true
    down ip route del 91.216.110.38/32 via 91.216.110.38 onlink dev $IFACE src 91.216.110.6 proto static || true

    # Workarround: car quagga ne propage pas les routes sur les /32
    up ip route add 193.33.56.0/27 via 91.216.110.97 proto static metric 10
    down ip route del 193.33.56.0/27 via 91.216.110.97 proto static metric 10

Exemple de configuration sur la machine livrée :

auto eth0
iface eth0 inet static
    address 91.216.110.38
    netmask 255.255.255.255
    network 91.216.110.38
    broadcast 91.216.110.38
    # Les routes pour n'utiliser qu'un /32 de livraison
    up ip route add 91.216.110.6 dev $IFACE || true
    up ip route add default via 91.216.110.6 || true
    down ip route del default via 91.216.110.6 || true
    down ip route del 91.216.110.6 dev $IFACE || true

Note : historiquement nous utilisions du proxy arp sur la passerelle et nous n'avions pas besoin d'ajouter des routes sur la machine livrée qui avait comme route par défaut elle même.

IPv6

Les livraisons IPv6 sont faites dans des blocs en /64. La passerelle a une adresse IPv6 dans chacun de ces blocs.

  • À lyon : 2001:912:800:::/64
  • À Grenoble : 2001:912:400:::/64

Dans le bloc de livraison, on construit l'adresse IPv6 de la paserelle ou de la machine livrée en utilisant le dernier octet de sont adresse IPv4. Ansi, sur batture, dans le vlan 202, obtenons la configuration suivante :

iface eth0.202 inet6 static
    address 2001:912:800:202::6
    netmask 64
    up ip -6 route add 2001:913:1000::/36 via 2001:912:800:202::38 src 2001:912::6 proto static
    up ip -6 route del 2001:913:1000::/36 via 2001:912:800:202::38 src 2001:912::6 proto static

Et sur la machine livrée :

iface eth0 inet6 static
    address 2001:912:800:202::38
    gateway 2001:912:800:202::6
    netmask 64