Journal Routeur VRF-Lite + OSPF Libre

Posté par .
Tags : aucun
5
2
nov.
2010
Cher journal,

Je ne sais pas comment je pourrais présenter ce tutoriel/aide mémoire car c'est relativement spécifique mais le problème qui posé était de construire une topologie avec plusieurs réseaux indépendant qui ne pouvaient pas être interconnectés et qui utilisaient chacun une passerelle par défaut.

Ces deux réseaux ne pouvant en aucun cas communiquer entre eux mais rien n'empêchait qu'ils puissent utiliser la même infrastructure ( cable / vlan / routeur ). La séparation à travers des vlan ne posait pas de problème car elle est implémenté ( 802.1q ) de manière massive dans le matériel PME / PRO. La solution la plus évidente est forcément d'utiliser plusieurs routeurs différents mais cette solution a un côut. Des solutions sont intégrées dans le matériel moderne ( CISCO, JUNIPER, ALCATEL ) mais a des prix peu accessible pour le grand public.

J'ai donc commencé par chercher une solution dans les solutions de type "routeur libre" mais ces solutions ne sont pas adaptées et dans les tutoriels sur le routage avancé. J'ai découvert que l'on pouvait avec linux obtenir via iproute2 plusieurs tables de routage mais malheureusement il est très facile d'une table de routage a une autre ( en intégrant par exemple une interface dans plusieurs tables ). J'ai continué mes recherches du coté de la famille BSD et c'est uniquement dans OpenBSD que j'ai trouvé mon bonheur. Puisque dans la topologie réelle, il existe un grand nombre de site, une solution de routage dynamique a été choisie : OSPF.



R1

# Le numero des RDOMAIN n'a qu'une portée locale sur le routeur.
# vic0, vic1 sont les nom des interfaces réseaux
ifconfig vic0 up
ifconfig vic1 up

# Le vlan de routage de la VRF/rdomain 30
ifconfig vlan300 create # on cree une interface vlan300
ifconfig vlan300 vlan 300 vlandev vic0 # on associe l'interface avec un tag ( 300 ) et on l'associe avec un e interface physique
ifconfig vlan300 10.10.30.1/24 rdomain 30 # on donne une ip et on l'associe avec une VRF/rdomain
# Le vlan de la VRF 30 sur le site
ifconfig vlan325 create
ifconfig vlan325 vlan 325 vlandev vic1
ifconfig vlan325 192.168.25.3/24 rdomain 30

# le vlan de routage de la VRF/rdomain 20
ifconfig vlan200 create
ifconfig vlan200 vlan 200 vlandev vic0
ifconfig vlan200 10.10.20.1/24 rdomain 20
# le vlan de la VRF 20 sur le site
ifconfig vlan225 create
ifconfig vlan225 vlan 225 vlandev vic1
ifconfig vlan225 192.168.25.2/24 rdomain 20



# le vlan de routage de la VRF/rdomain 20
ifconfig vlan100 create
ifconfig vlan100 vlan 100 vlandev vic0
ifconfig vlan100 10.10.10.1/24 rdomain 10
# le vlan de la VRF sur le site
ifconfig vlan125 create
ifconfig vlan125 vlan 125 vlandev vic1
ifconfig vlan125 192.168.25.1/24 rdomain 10



R2

ifconfig vic0 up
ifconfig vlan300 create
ifconfig vlan300 vlan 300 vlandev vic0
ifconfig vlan300 10.10.30.2/24 rdomain 30


ifconfig vlan200 create
ifconfig vlan200 vlan 200 vlandev vic0
ifconfig vlan200 10.10.20.2/24 rdomain 20


ifconfig vlan100 create
ifconfig vlan100 vlan 100 vlandev vic0
ifconfig vlan100 10.10.10.2/24 rdomain 10


ifconfig vic1 up
ifconfig vlan3 create
ifconfig vlan3 vlan 3 vlandev vic1
ifconfig vlan3 192.168.1.3/24 rdomain 30

ifconfig vlan2 create
ifconfig vlan2 vlan 2 vlandev vic1
ifconfig vlan2 192.168.1.2/24 rdomain 20


ifconfig vlan1 create
ifconfig vlan1 vlan 1 vlandev vic1
ifconfig vlan1 192.168.1.1/24 rdomain 10


L'inter-réseau est maintenant fonctionnel, il faut soit configurer des routes statiques, soit utiliser un protocole de routage dynamique comme OSPF.
L'implémentation d'ospf dans le demon d'OpenBSD permet l'utilisation de plusieurs instances et le rattachement à des rdomain/VRF. Ce que ne permet pas quagga.

On cree donc un fichier de config par VRF

[b]R1[/b]
Rdomain10

# FICHIER /etc/ospf_rdomain10.conf
router-id 10.10.10.2

rdomain 10
# areas
area 0.0.0.0 {
interface vlan100 {
}
interface vlan125 {
}
}


Rdomain20

# FICHIER /etc/ospf_rdomain20.conf
router-id 20.20.20.2

rdomain 20
area 0.0.0.0 {
interface vlan200 {
}
interface vlan225 {
}
}


Rdomain30


# FICHIER /etc/ospf_rdomain20.conf
router-id 30.30.30.2
rdomain 30
# areas
area 0.0.0.0 {
interface vlan300 {

}
interface vlan325 {
}
}



[B]R2[/B]
Rdomain10

# FICHIER /etc/ospf_rdomain10.conf
router-id 10.10.10.1

rdomain 10

area 0.0.0.0 {
interface vlan100 {
}
interface vlan1 {
}
}



Rdomain20

# FICHIER /etc/ospf_rdomain20.conf

router-id 20.20.20.1
rdomain 20
# areas
area 0.0.0.0 {
interface vlan200 {
}
interface vlan2 {
}
}


Rdomain30

#FICHIER /etc/ospf_rdomain30.conf

router-id 30.30.30.1
rdomain 30
area 0.0.0.0 {
interface vlan300 {
}
interface vlan3 {
}
}


Il ne reste plus qu'a lancer les 3 démons et a activer le routage

Sur R1 ET R2

sysctl net.inet.ip.forwarding=1
# -s fichier socket
ospfd -f /etc/ospf_rdomain10.conf -s /var/run/ospfd_r10.sock
ospfd -f /etc/ospf_rdomain20.conf -s /var/run/ospfd_r20.sock
ospfd -f /etc/ospf_rdomain30.conf -s /var/run/ospfd_r30.sock



Maintenant on peut constater que les deux OSPF se voient


> ospfctl -s /var/run/ospfd_r10.sock show neighbor
ID Pri State DeadTime Address Iface Uptime
10.10.10.1 1 FULL/BCKUP 00:00:32 10.10.10.2 vlan100 00:39:49


> ospfctl -s /var/run/ospfd_r20.sock show neighbor
ID Pri State DeadTime Address Iface Uptime
20.20.20.1 1 FULL/BCKUP 00:00:36 10.10.20.2 vlan200 00:39:55


> ospfctl -s /var/run/ospfd_r30.sock show neighbor
ID Pri State DeadTime Address Iface Uptime
30.30.30.1 1 FULL/BCKUP 00:00:31 10.10.30.2 vlan300 00:40:00




Et que les tables de routages sont indépendantes


> route -T 10 show
Routing tables

Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
10.10.10/24 link#8 UC 2 0 - 4 vlan100
10.10.10/24 10.10.10.1 UG 0 0 - 32 vlan100
10.10.10.1 00:0c:29:c1:a0:51 UHLc 1 0 - 4 lo0
10.10.10.2 00:0c:29:b2:d3:dd UHLc 1 7 - 4 vlan100
192.168.1/24 10.10.10.2 UG 0 4 - 32 vlan100
192.168.25/24 link#11 UC 0 0 - 4 vlan125

> route -T 20 show
Routing tables

Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
10.10.20/24 link#7 UC 2 0 - 4 vlan200
10.10.20/24 10.10.20.1 UG 0 0 - 32 vlan200
10.10.20.1 00:0c:29:c1:a0:51 UHLc 1 0 - 4 lo0
10.10.20.2 00:0c:29:b2:d3:dd UHLc 1 7 - 4 vlan200
192.168.1/24 10.10.20.2 UG 0 2 - 32 vlan200
192.168.25/24 link#10 UC 0 0 - 4 vlan225

> route -T 30 show
Routing tables

Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
10.10.30/24 link#6 UC 2 0 - 4 vlan300
10.10.30/24 10.10.30.1 UG 0 0 - 32 vlan300
10.10.30.1 00:0c:29:c1:a0:51 UHLc 1 0 - 4 lo0
10.10.30.2 link#6 UHLc 1 7 - 4 vlan300
192.168.1/24 10.10.30.2 UG 0 0 - 32 vlan300
192.168.25/24 link#9 UC 0 0 - 4 vlan325


Et que les tables sont indépendantes

> ping -V 10 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=0.307 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.239 ms
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.239/0.273/0.307/0.034 ms

> ping -V 20 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss

> ping -V 20 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=0.263 ms
--- 192.168.1.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.263/0.263/0.263/0.000 ms

  • # Fichiers rdomain

    Posté par . Évalué à 1.

    Il n'y aurai pas comme une petite erreur sur les fichiers rdomain_ospf de la VRF 20 et 30 ?

    En effet, les plages d'adresses IP côté Interco se transforment de 10.10.20.x en 20.20.20.x (idem avec la VRF 30).

    Sinon, super tuto !
  • # Excellent

    Posté par (page perso) . Évalué à 1.

    Est ce que tu as fait des tests de routage inter domaine ? genre rajouter une route sur l'un des deux routeurs vers une autre VRF ?
    est ce que tu as testé avec pf ? openbgpd ?

    En tout les cas Openbsd est sur la bonne voie.
    Avec le MPLS qui arrive bientôt, on aura bientôt un OS qui as a peu près toutes les fonctions d'un routeur hard.
    • [^] # Re: Excellent

      Posté par . Évalué à 1.

      Je n'ai pas fait de rajout de route d'une vrf vers l'autre mais j'ai utilisé des plages réseaux communes ( 192.168.1.x ) dans toutes les vrf et j'ai fait quelques tests via des ping pour montrer que l'on ne passait pas d'une VRF a une autre.

      Pour ce qui est de PF, il faut que je me document sur le firewall d'OpenBSD et faire le lien avec NetFilter/iptables que je connais. Je n'ai pas encore testé mais c'est la prochaine étape avec l'implémentation du QOS.

      N'utilisant que des protocoles IGP, je n'ai pas les bases pour tester avec BGP.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.