最近需要用Quagga连接SDN controller运行路由协议,代替TOR跑ospf,其实这个在一个TOR的状态下是一点问题都没有的,参考一下官网文档就能很快搞定。但问题的关键是我有两个TOR,然后问题就出现了,如何在Quagga上运行两个ospfd进程?方法如下:
- 找另外一台机器,无论是本地启动虚拟机也好,或者找一台物理机器也好,运行两个Quagga,然后做RPC通信。
- 做Namespace隔离,隔离出两个ospfd进程
方法一比较曲折,这对于两台TOR来说或许是个缓兵之计,但当我们以后TOR数量增加的时候这个缺陷就暴露了,明显我们不可能为每台TOR搞个物理机器或者虚拟机。然后想着想着想到了docker,搞个轻量级虚拟机;再然后我仔细一想,直接自己做隔离好了。想法不错,动手开搞,调查了好久发现这个方法也太困难了,关于linux namespace大家可以参考我这篇博客,linux下包括6种不同的namespace,不但需要做net隔离,还要考虑进程隔离,调研好久发现单独不小。因为Quagga当初的设计就是一个zebra对应一个ospfd,硬要在之上隔离还得考虑zebra的隔离或者修改zebra代码。
这么看来两个方法都不太好搞,方法一不现实,方法二开发难度较大。然后我在查看Quagga mailing list的时候发现还真有人有同样的需求,只不过他们的需求是VRF,需要router/switch起多个ospfd,这恰好符合我目前的需求。然后我看到最近这个需求很强烈,有两个团队/公司在开始搞这个,一个是6WIND项目,另外一个是CumulusNetworks公司,目前我用的是后者,这个也是目前正在开发的支持VRF的补丁,以后也将会被加入到Quagga主分支中,代码补丁链接。
代码下下来后编译有不少问题,比如我机器内核禁止掉了ipv6/inet6,编译就给挂了。然后这个补丁还必须得有ipv6的支持,作者给我的回复是--disable-ipv6
这种编译在以后的主版本中将不会被支持,具体可以查看这里。关键是不支持还真不行,于是我就自己手动修改了部分源码+make文件搞定了。
以下是具体如何配置Quagga。
- 运行zebra
- 运行ospfd:
./ospfd -A --127.0.0.1 -n 1 -P 8878
-n开启多个instance模式 telnet localhost 8878
- 加入端口配置如下,配置和单个ospfd稍有差异:
interface eth1
!
interface lo
!
interface tap_20_2
ip ospf 1 area 0.0.0.0
!
interface tap_20_6
ip ospf 1 area 0.0.0.0
!
interface tap_200_251
ip ospf 1 area 0.0.0.0
!
interface xgbe0
!
router ospf 1
ospf router-id 3.3.3.20
passive-interface default
no passive-interface tap_20_2
no passive-interface tap_20_6
no passive-interface tap_200_251
!
line vty
ok,基本就如此了,剩下的都是ospf的事情了,另外一个ospfd instance和这个配置一样。关于zebra部分可能还会存在一些问题,这个补丁目前还不是特别稳定,以后加入到主分支中会稳定下来,不过Quagga的版本迭代最近比较慢,可能会需要一段时间。
参考:
https://github.com/CumulusNetworks/quagga
http://www.gossamer-threads.com/lists/quagga/dev/27097
https://github.com/CumulusNetworks/quagga/issues/8
https://www.mail-archive.com/[email protected]/msg00078.html
http://cyruslab.net/2012/05/12/configuration-examples-with-quagga/
http://openmaniak.com/quagga_case2.php
说明:
装载请注明地址:http://vinllen.com/quaggaduo-ge-ospfdjin-cheng-shi-yong/