URL: https://linuxfr.org/users/becket/journaux/routeur-vrf-lite-ospf-libre Title: Routeur VRF-Lite + OSPF Libre Authors: Frederic Brugmans Date: 2010年11月02日T19:15:12+01:00 Tags: Score: 5 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 { £spaces£ £/spaces£interface vlan100 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan125 { £spaces£ £/spaces£} } Rdomain20 # FICHIER /etc/ospf_rdomain20.conf £spaces£ £/spaces£router-id 20.20.20.2 rdomain 20 area 0.0.0.0 { £spaces£ £/spaces£interface vlan200 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan225 { £spaces£ £/spaces£} } Rdomain30 # FICHIER /etc/ospf_rdomain20.conf £spaces£ £/spaces£router-id 30.30.30.2 rdomain 30 # areas area 0.0.0.0 { £spaces£ £/spaces£interface vlan300 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan325 { £spaces£ £/spaces£} } [B]R2[/B] Rdomain10 # FICHIER /etc/ospf_rdomain10.conf router-id 10.10.10.1 rdomain 10 area 0.0.0.0 { £spaces£ £/spaces£interface vlan100 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan1 { £spaces£ £/spaces£} } Rdomain20 # FICHIER /etc/ospf_rdomain20.conf router-id 20.20.20.1 rdomain 20 # areas area 0.0.0.0 { £spaces£ £/spaces£interface vlan200 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan2 { £spaces£ £/spaces£} } Rdomain30 #FICHIER /etc/ospf_rdomain30.conf router-id 30.30.30.1 rdomain 30 area 0.0.0.0 { £spaces£ £/spaces£interface vlan300 { £spaces£ £/spaces£} £spaces£ £/spaces£interface vlan3 { £spaces£ £/spaces£} } 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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 £spaces£ £/spaces£> 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