对OpenBSD中的OSPF和BGP路由协议的探索
2012-01-12 16:27:40
标签:
版权声明:原创作品,谢绝转载!否则将追究法律责任。
在开始以前,我们先提出几个问题做一下思考。

什么是路由?什么是OSPF和BGP?他们是做什么用的?各自的应用场景是怎样的?OpenBSD的这俩个路由协议与硬件路由器如Cisco/Huawei的相比,优势在何处?如何用OpenBSD降低网络成本?

一、什么是路由?

简单的说,路由就像十字路口的指示牌,IP数据包就像路上的车,当汽车到达十字路口的时候,需要有指示牌指示方向,告诉车辆应该往哪个方向行进可以到达目的地。这就是路由的作用。如果没有标记牌,小汽车将不知道该往哪里行进可以到达目的地。当你的数据达到目的地后,目的地会再发一辆车回来,通过各个十字路口的标识,告诉你家,你已经安全到达了。家就是你的电脑,目的地则是世界上成千上万台电脑,通过走各种各样的十字路口最终达到目的地。

二、什么是OSPF和BGP

OSPF和BGP都是路由协议的一种,名称分别是开放最短路径优先和边界网关协议。比他们更早的是RIP和RIPv2协议,叫做距离矢量协议。这三种协议,和EIGRP一起成为应用范围最广的动态路由协议。RIP的全称是Routing Information Protocol,他的最大跳数只有16跳,超过16个路由跳转,RIP将认为路由不可达,所以在现在网络规模逐渐庞大的情况下,RIP协议慢慢就被淘汰,或者只应用在小型网络内。所以我管这个协议叫做Rest In Peace(安息吧)协议。而OSPF和BGP和EIGRP以其路径速度和适应中大型网络乃至广域网而逐渐被应用在大型网络和互联网上。其中,EIGRP是思科私有的路由协议,因此能够被x86系统用上的,开源的协议,就只有OSPF和BGP了,不过,这已经足够应付包含几千台甚至几万台电脑网络的路由需要了。

三、协议的应用范围如何?

OSPF主要用在中型公司的局域网建设内,从2台到2000台设备的网络划分。当然这不仅仅限于2000台,也可以做更多。BGP则应用在更大型的范围内,通常是某个数据中心对整个互联网的对接上。相关的资料可以参阅Cisco的CCNA和CCNP。

四、我为什么要使用OpenBSD来取代Cisco和华为的路由器?思科和华为的设备我玩的很熟,并且我觉得很好用。

从老板的角度说,最大的好处就是省钱,OpenBSD是免费开源的操作系统,只要给他一台64M的奔腾服务器,就可以用了。现在的PC都很便宜,网卡就更便宜了。2000块钱的硬件成本就可以实现2万块钱的专业设备的功能和稳定性,节省90%的费用,何乐而不为呢。就算坏了,你只需要单独换一个硬件就可以了,而专业设备坏了,则必须送回原厂,花一大笔费用维修,不啻于买一个新的设备。

从技术人员的角度上说,OpenBSD是这个星球上最安全和最稳定的操作系统,要知道,思科和华为设备里的IOS,从路由器到交换机再到防火墙,其核心代码就是基于BSD系统的。

省钱,维护成本低,相同或近似的协议实现方法,以至于直观方便的配置方式,我认为都可以选择OpenBSD作为昂贵设备的替代品。这就是OpenBSD相比专业设备的优势所在。但并不是说专业的路由器不好,专业的路由器专门做过嵌入式开发,去掉了对路由无用的部分,执行效率更高。当然,也更贵。所以,在你不涉及到必须使用专业设备的场景下,用OpenBSD代替,无疑是节省成本和维护安全的最好的办法。所以,这篇文章并不是让你把专业设备立刻处理掉,而是给你一个更大的选择空间。

五、那我们可以开始来看看OpenBSD对这两个路由协议的实现了

1.OpenBGPD,也就是开源的BGP Daemon。在OpenBSD中,BGPD一旦启动,会自动扩展成3个进程,其作用分别是父进程,处理会话进程和负责路由计算进程。其中父进程以root方式运行,而其他进程则不是。
162320508.jpg
从上图中,可以看到,父进程负责与对端路由器通信,并查询更新路由表,处理会话进程SE负责处理路由器间的通讯,对路由表的更新,是先进入RDE,也就是路由判定引擎,作用是将过滤过的路由表计算信息,放入RIB,也就是路由信息表,由bgpctl做计算后返回给SE进程,再返回给RDE和父进程,并向父进程发送更新路由表的请求,父进程通知SE进程将更新的路由表发送给相邻路由器。

2.OpenOSPFD

OSPF在系统进程上的处理与BGP相似
162354585.jpg
在处理过程上与BGP相同。唯一不同的是,OSPF是以泛洪的形式进行更新通告。

六、基本配置

要做路由转发,最基本要实现IP转发,所以,要在sysctl.conf中加入如下定义

net.inet.ip.forwarding=1

另外,还需要在hostname.em0hostname.em1中配置正确的IP和子网掩码。

1.OpenBGPD

# 全局配置
AS 123
#相当于在思科路由器#router bgp 123
router-id 192.168.1.1
#相当于bgp router-id 192.168.1.1
# 声明IP空间
network 192.168.1/24
#邻居设置
neighbor 192.168.2.1 {
 descr "ISP A"
 remote-as 124
}
neighbor 192.168.3.1 {
 descr "ISP B"
 remote-as 125
 #对端密码
 tcp md5sig password "74#senEjTYmhQ/f"
}
然后编辑/etc/rc.conf,找到bgpd_flags=NO改为bgpd_flags="",同时为了下面配置ospfd,将ospfd_flags=NO改为ospfd_flags="",保存退出并重启。

重启后用#bgpctl show 查看BGPD的状态和邻居情况,是不是很简单,也很直观。这里设置了两个邻居,remote-as分别是124125

#这是我虚拟机上查询bgp的结果
#bgpctl show
Neighbor                                     AS        MsgRcvd        MsgSent    OutQ Up/Down    State/PrfRcvd
10.2.1.1                                65023                    0                    0         0 Never        Active
template for local p                0                    0                    0         0 Never        Template
upstream2                             65004                    0                    0         0 Never        Active
upstream                                65003                    0                    0         0 Never        Active
peering AS 65042                        0                    0                    0         0 Never        Active
peering AS 65042                        0                    0                    0         0 Never        Active
AS 65001 peer 2                 65002                    0                    0         0 Never        Active
AS 65001 peer 1                 65002                    0                    0         0 Never        Active
2.OpenOSPFD

# 全局配置
router-id 0.0.0.2
#允许路由重分发
redistribute connected
#区域,area,这个学过Cisco应该不难明白
area 0.0.0.0 {
 auth-type crypt
 auth-md 1 "L&Y6)@Vc(6I4=Gq"
 auth-md 2 "IsJ_-LE:al17a"
 auth-md-keyid 1
 # 主链路
 interface em1 { metric 10 }
 # 备份链路
 interface em0 { metric 100 }
}
本机的编号为0.0.0.2,区域为0.0.0.0,使用两个网卡连接对端,作为主备。我们看到,em1的距离是10,而em0的距离是100,要注意,OSPF最大管理距离支持到110作为最短路径协议,一定是优先使用metric数较小的,除非链路断掉。

如何,是不是并不比Cisco的配置复杂?其实用好了,还是非常轻松的,另外,OpenBSD使用pf,可以在网络层进行过滤,允许或拒绝来自其他地方的数据包,安全性非常有保障。另外,OpenBSD原生支持Vlan,IPSec,Tunnel,carp,和trunk(链路聚合,相当于Linux的bonding或FreeBSD中的netgraph)。
pf是OpenBSD中的一个包控工具,叫做packet filter吧,可以对OSPF和BGP的数据包进行过滤,也可以对其他的tcp/ip连接进行过滤,是个很强大的防火墙软件,一台OpenBSD可以兼任路由器和防火墙的全部功用,比起动辄上万的设备,OpenBSD不超过3000就可以完成全部事情,且不比那些设备做的差,是不是很诱人呢?
<span yes';="" font-size:10.5000pt;="" font-family:'宋体';="" "="" style="padding: 0px; margin: 0px;">

本文出自 “” 博客,谢绝转载!