On m’a recemment rappelle l’existence de Quagga qui est une solution OpenSource de routeur supportant RIP/OSPF/BGP/ISIS et peux se connecter gentillement aux routeurs Cisco/Juniper. Ayant travaille un peu avec BGP sur des routeurs Cisco/Juniper, je me suis dit que ce serait amusant d’essayer Quagga.
BON GROS AVERTISSEMENT: Cet exemple ne prends en compte aucune securite, si vous comptez deployer dans la vie reelle, je suggere un peu plus de lecture auparavant.
Mon exemple ici est compose de deux machines virtuelles sous Debian Squeeze avec tous les derniers patches et quagga installe par apt. La topologie est simple, j’utilise deux interfaces reseau, eth0 sur les deux machine en bridge et la seconde attachee directement a la VM. Ma topologie est :
- VM #1: isis – eth0 – 192.168.0.50/255.255.255.0 – eth1 – 10.10.0.1/255.255.0.0
- VM #2: osiris – eth0 – 192.168.0.52/255.255.255.0 – eth1 – 10.20.0.1/255.255.0.0
En premier, il vous faudra activer IP forward : sysctl -w net.ipv4.ip_forward=1. Vous pouvez editer le fichier /etc/sysctl.conf. Ensuite, vous devez creer les fichiers de configuration pour Quagga. Editez la premiere VM et ajoutez le contenu suivant dans ce fichier : /etc/quagga/Quagga.conf:
log stdout ! password awesome_pass enable password awesome_pass ! router bgp 7675 bgp router-id 192.168.0.50 network 10.10.0.0/16 route-map v4-bgp neighbor 192.168.0.52 remote-as 7676 ! route-map v4-bgp permit 10 set originator-id 192.168.0.50 set community 7675:1 additive set extcommunity rt 7675:1 set aggregator as 7676 192.168.0.52 set as-path prepend 192.168.0.52 set atomic-aggregate set metric 20 ! line vty !
Editez /etc/quagga/zebra.conf et ajoutez :
hostname isis password awesome_password enable password awesome_password interface eth1
Editez ensuite /etc/quagga/daemons.conf et activez zebra et bgpd en YES. Redemarrez ensuite le service: service quagga restart.
Editez le second routeur en commencant par ce fichier : /etc/quagga/Quagga.conf:
log stdout ! password awesome_pass enable password awesome_pass ! router bgp 7676 bgp router-id 192.168.0.52 network 10.20.0.0/16 route-map v4-bgp neighbor 192.168.0.50 remote-as 7675 ! route-map v4-bgp permit 10 set aggregator as 7675 192.168.0.50 set atomic-aggregate set community 7676:1 additive set extcommunity rt 7676:1 set metric 20 set originator-id 192.168.0.52 ! line vty
Editez aussi /etc/quagga/zebra.conf et ajoutez :
hostname osiris password awesome_password enable password awesome_password interface eth1
Redemarrez ensuite le service du routeur. Il ne reste plus qu’a tester le tout, depuis isis, nous allons verifier la connexion vers osiris, tapez vtysh pour utiliser la ligne de commande du routeur.
Nous verifions en premier BGP, la seconde ligne next-hop 192.168.0.52 veux dire que nous obtenons des routes de l’autre routeur.
isis# sh ip bgp BGP table version is 0, local router ID is 192.168.0.50 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.10.0.0/16 0.0.0.0 20 32768 i *> 10.20.0.0/16 192.168.0.52 20 0 7676 i Total number of prefixes 2
En second, nous verifions le routeur voisin, si cette commande mentionne un hote foreign, ils se parlent correctement.
isis# sh ip bgp neigh BGP neighbor is 192.168.0.52, remote AS 7676, local AS 7675, external link BGP version 4, remote router ID 192.168.0.52 BGP state = Established, up for 01:35:05 Last read 09:31:26, hold time is 180, keepalive interval is 60 seconds Neighbor capabilities: 4 Byte AS: advertised and received Route refresh: advertised and received(old & new) Address family IPv4 Unicast: advertised and received Message statistics: Inq depth is 0 Outq depth is 0 Sent Rcvd Opens: 2 0 Notifications: 0 0 Updates: 1 1 Keepalives: 97 96 Route Refresh: 0 0 Capability: 0 0 Total: 100 97 Minimum time between advertisement runs is 30 seconds For address family: IPv4 Unicast Community attribute sent to this neighbor(both) 1 accepted prefixes Connections established 1; dropped 0 Last reset never Local host: 192.168.0.50, Local port: 179 Foreign host: 192.168.0.52, Foreign port: 36249 Nexthop: 192.168.0.50 BGP connection: non shared network Read thread: on Write thread: off
Vous pouvez enfin verifier votre connexion, cela demontre que les routeurs sont connectes, si vous voyez Active au lieu d’Establised, quelque chose ne marche pas correctement.
# check the connection isis# sh ip bgp sum BGP router identifier 192.168.0.50, local AS number 7675 RIB entries 3, using 288 bytes of memory Peers 1, using 4560 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.0.52 4 7676 98 101 0 0 0 01:36:52 1 Total number of neighbors 1
Un ping depuis le premier routeur pour confirmer que tout marche :
isis# ping 10.20.0.1 PING 10.20.0.1 (10.20.0.1) 56(84) bytes of data. 64 bytes from 10.20.0.1: icmp_req=1 ttl=64 time=0.255 ms 64 bytes from 10.20.0.1: icmp_req=2 ttl=64 time=0.241 ms 64 bytes from 10.20.0.1: icmp_req=3 ttl=64 time=0.217 ms 64 bytes from 10.20.0.1: icmp_req=4 ttl=64 time=0.301 ms ^C --- 10.20.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.217/0.253/0.301/0.034 ms
C’est tout pour le moment, je ferais bientot une mise a jour avec IPv6.