À 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
etfe80::/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
etfe80::1
- une qui est de préférence à Grenoble :
172.17.<vlan>.2
etfe80::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