LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4534|回复: 6

Zebra基本配置

[复制链接]
发表于 2004-8-27 09:29:38 | 显示全部楼层 |阅读模式
  1. 前言

  2. Zebra是一个路由软件包,提供基于TCP/IP路由服务,支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4,

  3. 和 BGP-4+等众多路由协议。Zebra还支持BGP特性路由反射器(Route Reflector)。除了传统的 IPv4路由协议

  4. ,Zebra也支持IPv6路由协议。如果运行的SNMP守护进程(需要ucd-snmp)支持SMUX协 议,Zebra还能支持路由

  5. 协议MIBs。

  6. 由以上可见,Zebra的确是一个很不错的路由系统,但比起真正的路由器就简直是小儿科,所以网络高手 就当

  7. 这文章是小孩子过家家吧,而对于象我这样的初学者(特别是没有真实设备或足够设备进行实验) 也不失为一

  8. 个学习和熟悉路由配置、路由协议的好工具。我没有实际的配置经验,对路由的技术细节也 不是十分清晰,完

  9. 全是在扔破砖头。希望路由高手指正概念错误。

  10. 安装

  11. Zebra目前最新的版本是0.92a,它的安装非常简单,我们只需从[url]http://www.zebra.org/下载zebra-[/url]

  12. 0.92a.tar.gz,然后执行以下命令安装(本文环境是RedHat7.2):

  13. shell> tar xzf zebra-0.92a.tar.gz
  14. shell> cd zebra-0.92a
  15. shell> ./configure
  16. shell> make
  17. shell> make install

  18. 这样Zebra就安装好了,安装的执行文件:

  19. shell> ls /usr/local/sbin
  20. bgpd  ospfd  ripd  zebra

  21. 配置文件:

  22. shell> ls /usr/local/etc
  23. bgpd.conf.sample   ospfd.conf.sample  zebra.conf.sample
  24. bgpd.conf.sample2  ripd.conf.sample

  25. 运行

  26. 编译安装完Zebra后,可以看到有4个可执行文件和5个配置样本文件,我们就使用它的配置样本文件:

  27. shell> cd /usr/local/etc
  28. shell> cp zebra.conf.sample zebra.conf

  29. Zebra的各进程有各自的终端接口或VTY,如果我们需要给连接到它们的端口设置别名的话,在/etc/ services

  30. 文件添加如下内容:

  31. zebrasrv      2600/tcp   # zebra service
  32. zebra         2601/tcp   # zebra vty
  33. ripd          2602/tcp   # RIPd vty
  34. ripngd        2603/tcp   # RIPngd vty
  35. ospfd         2604/tcp   # OSPFd vty
  36. bgpd          2605/tcp   # BGPd vty
  37. ospf6d        2606/tcp   # OSPF6d vty

  38. 然后就可以启动Zebra了:

  39. shell> zebra -d

  40. 这样,Zebra就以守护进程启动了,其它的参数请参考zebra -h。

  41. 基本路由配置命令

  42. 直接用telnet连接:

  43. shell> telnet localhost 2601
  44. Trying 127.0.0.1...
  45. Connected to localhost.
  46. Escape character is '^]'.

  47. Hello, this is zebra (version 0.92a).
  48. Copyright 1996-2001 Kunihiro Ishiguro.


  49. User Access Verification

  50. Password:

  51. Zebra会提示输入口令,我们通过/usr/local/etc/zebra.conf可以看到口令是zebra,enable口令也是zebra。

  52. 输 入口令zebra,得到路由器用户模式提示符:

  53. Router>

  54. 进入特权模式:

  55. Router> en
  56. Password:
  57. Router#

  58. 输入一个问号,看看Zebra提供了多少路由命令:

  59. Router# ?
  60.   configure  Configuration from vty interface
  61.   copy       Copy configuration
  62.   debug      Debugging functions (see also 'undebug')
  63.   disable    Turn off privileged mode command
  64.   end        End current mode and change to enable mode.
  65.   exit       Exit current mode and down to previous mode
  66.   help       Description of the interactive help system
  67.   list       Print command list
  68.   no         Negate a command or set its defaults
  69.   quit       Exit current mode and down to previous mode
  70.   show       Show running system information
  71.   terminal   Set terminal line parameters
  72.   who        Display who is on vty
  73.   write      Write running configuration to memory, network, or terminal

  74. 提供的命令很少,实际路由器好多命令都没有,我们只能用有限的命令投入到无限的实验中去。

  75. Router# sh run

  76. Current configuration:
  77. !
  78. hostname Router
  79. password zebra
  80. enable password zebra
  81. !
  82. interface lo
  83. !
  84. interface eth0
  85. !
  86. line vty
  87. !
  88. end

  89. Zebra把操作系统的网络接口当做路由器的接口,所以在做比较复杂的路由实验,会需要比较多的网卡。

  90. 进入全局模式,尽可能把实际可用的配置命令都实验一遍:

  91. Router# conf t
  92. Router(config)#

  93. 自己取一个路由器名字:

  94. Router(config)# hostname r1
  95. r1(config)#

  96. Zebra比较简单,登陆口令不是在line下修改,而是直接在全局模式下用password修改

  97. r1(config)# password {password}

  98. Zebra不支持enable secret {password}这种MD5加密口令,只能使用enable password {password}来修改

  99. enable口令:

  100. r1# conf t
  101. r1(config)# enable password {password}

  102. 在路由器配置中加密所有的口令:

  103. r1(config)# service password-encryption

  104. 回到特权模式:

  105. r1(config)# exit
  106. r1# sh run

  107. Current configuration:
  108. !
  109. hostname r1
  110. password 8 alA5.vcyMAwXQ
  111. enable password 8 ksbxOFN8xcFMc
  112. service password-encryption
  113. !
  114. interface lo
  115. !
  116. interface eth0
  117. !
  118. line vty
  119. !
  120. end

  121. 我们看到刚才的明文密码都进行加密了,给我们的实验机也提高安全性。Zebra有一点比较恶心,如果我 们先

  122. 设置了service password-encryption,然后再修改口令,sh run就发现口令又都是明文的了,但是由 于有

  123. service password-encryption,所以就无法登陆了。

  124. 去掉会话超时,免得10分钟没有动作,就把我们给踢了。但是在实际的路由器配置中,为安全起见我们 最好还

  125. 是设上会话超时。

  126. r1# conf t
  127. r1(config)# line vty
  128. r1(config-line)# exec-timeout 0 0

  129. 设置日志记录,Zebra可以把日志记录到标准输出、syslog、以及指定输出文件:

  130. r1(config-line)# exit
  131. r1(config)# log stdout
  132. r1(config)# no log stdout
  133. r1(config)# log syslog
  134. r1(config)# no log syslog
  135. r1(config)# log file /usr/local/etc/zebra.log

  136. 配置接口IP地址:

  137. r1(config)# int lo
  138. r1(config-if)# ip address 127.0.0.1/8
  139. r1(config-if)# exit
  140. r1(config)# int eth0
  141. r1(config-if)# ip address 192.168.5.121/24

  142. Zebra比较奇怪,不能使用ip address 192.168.5.121 255.255.255.0这种形式设置IP。测试一下,就设置成

  143. 和Linux中使用的一样。

  144. 保存我们刚才的配置:

  145. r1(config-if)# exit
  146. r1(config)# exit
  147. r1# copy run start
  148. Configuration saved to /usr/local/etc/zebra.conf
  149. r1#


  150. 2、用Zebra做简单的RIP实验

  151. RIP是应用较早、使用较普遍的IGP,适用于小型同类网络,是典型的距离向量(distance-vector)协 议。RIP通

  152. 过广播UDP报文来交换路由信息,每30秒发送一次路由信息更新。RIP提供跳跃计数(hop count)作为尺度来衡量

  153. 路由距离,跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同 目标有二个不等速或不同带宽

  154. 的路由器,但跳跃计数相同,则RIP认为两个路由是等距离的。RIP最多支 持的跳数为15,即在源和目的网间所

  155. 要经过的最多路由器的数目为15,跳数16表示不可达。RIPv2支持 验证、密钥管理、路由汇总、无类域间路由

  156. (CIDR)和变长子网掩码(VLSMs)。

  157. Zebra支持RIPv2,使用ripd程序实现RIP路由功能,但ripd程序需要在zebra程序读取接口信息,所以zebra 一

  158. 定要在ripd之前启动。由于条件所限,下面的RIP实验是在两台单网卡的RedHat7.2下做的,所以只是 最简单的

  159. 演示。

  160. 按照上面基本配置的方法初始化第一台机器:

  161. shell_1> cd /usr/local/etc
  162. shell_1> cp zebra.conf.sample zebra.conf
  163. shell_1> cp ripd.conf.sample ripd.conf
  164. shell_1> zebra -d

  165. 进入zebra设置IP

  166. shell_1> telnet localhost 2601
  167. Password:
  168. Router> en
  169. Password:
  170. Router# conf t
  171. Router(config)# hostname r1
  172. r1(config)# int eth0
  173. r1(config-if)# ip address 192.168.5.121/24
  174. r1(config-if)# ctrl+z
  175. r1# copy run start

  176. 进入第一台机器的rip设置

  177. shell_1> ripd -d
  178. shell_1> telnet localhost 2602
  179. Password:
  180. ripd> en
  181. ripd# conf t
  182. ripd(config)# hostname r1_ripd !改个名字好辨认
  183. r1_ripd(config)# router rip !启动rip
  184. r1_ripd(config-router)# network 192.168.5.0/24 !RIPv1是有类别路由协议,RIPv2是无类别路由协议,

  185. Zebra 默认支持RIPv2,指定网络需要子网掩码。

  186. r1的RIP简单配置这样就可用了,下面来检验一下:

  187. r1_ripd# sh ip protocols
  188. Routing Protocol is "rip"
  189.   Sending updates every 30 seconds with +/-50%, next due in 3 seconds
  190.   Timeout after 180 seconds, garbage collect after 120 seconds
  191.   Outgoing update filter list for all interface is not set
  192.   Incoming update filter list for all interface is not set
  193.   Default redistribution metric is 1
  194.   Redistributing:
  195.   Default version control: send version 2, receive version 2
  196.     Interface        Send  Recv   Key-chain
  197.     eth0             2     2
  198.   Routing for Networks:
  199.     192.168.5.0/24
  200.   Routing Information Sources:
  201.     Gateway          BadPackets BadRoutes  Distance Last Update
  202.   Distance: (default is 120)

  203. 我们看到RIP已经起来了,是RIPv2。

  204. r1_ripd# sh ip rip
  205. Codes: R - RIP, C - connected, O - OSPF, B - BGP

  206.    Network            Next Hop         Metric From            Time

  207. 由于就两个接口直连,没有其它网络,所以sh ip rip看不到什么。

  208. Zebra对log处理可能有些问题,使用log stdout不能显示各种debug信息,所以只能记录到文件,在shell下 用

  209. tail命令查看。

  210. r1_ripd# debug rip events
  211. r1_ripd# debug rip packet
  212. r1_ripd(config)# log file /usr/local/etc/ripd.log

  213. 然后我们在shell下查看debug信息

  214. shell_1> tail -f /usr/local/etc/ripd.log
  215. --------------------------------8<---------------------------------------
  216. 2002/04/28 22:17:44 RIP: update timer fire!
  217. 2002/04/28 22:17:44 RIP: SEND UPDATE to eth0 ifindex 2
  218. 2002/04/28 22:17:44 RIP: multicast announce on eth0
  219. 2002/04/28 22:17:44 RIP: update routes on interface eth0 ifindex 2
  220. 2002/04/28 22:18:23 RIP: update timer fire!
  221. 2002/04/28 22:18:23 RIP: SEND UPDATE to eth0 ifindex 2
  222. 2002/04/28 22:18:23 RIP: multicast announce on eth0
  223. 2002/04/28 22:18:23 RIP: update routes on interface eth0 ifindex 2
  224. 2002/04/28 22:19:04 RIP: update timer fire!
  225. 2002/04/28 22:19:04 RIP: SEND UPDATE to eth0 ifindex 2
  226. 2002/04/28 22:19:04 RIP: multicast announce on eth0
  227. 2002/04/28 22:19:04 RIP: update routes on interface eth0 ifindex 2
  228. --------------------------------8<---------------------------------------

  229. RIP每隔30秒发送一次更新,在sh ip prot可以看到Sending updates every 30 seconds with +/-50%

  230. 第二台机器的设置

  231. 前面的初始化和第一台一样,不过这里名字设成r2便于辨认,IP设成了192.168.5.123/24。

  232. 进入第二台机器的rip设置

  233. shell_2> ripd -d
  234. shell_2> telnet localhost 2602
  235. Password:
  236. ripd> en
  237. ripd# conf t
  238. ripd(config)# hostname r2_ripd
  239. r2_ripd(config)# router rip
  240. r2_ripd(config-router)# network 192.168.5.0/24

  241. 执行完network命令,我们看到第一台机器的tail -f /usr/local/etc/ripd.log输出下面的信息:

  242. --------------------------------8<---------------------------------------
  243. 2002/04/28 22:19:15 RIP: RECV packet from 192.168.5.123 port 520 on eth0
  244. 2002/04/28 22:19:15 RIP: RECV REQUEST version 2 packet size 24
  245. 2002/04/28 22:19:15 RIP:   0.0.0.0/0 -> 0.0.0.0 family 0 tag 0 metric 16
  246. 2002/04/28 22:19:15 RIP: update routes to neighbor 192.168.5.123
  247. 2002/04/28 22:19:35 RIP: update timer fire!
  248. 2002/04/28 22:19:35 RIP: SEND UPDATE to eth0 ifindex 2
  249. 2002/04/28 22:19:35 RIP: multicast announce on eth0
  250. 2002/04/28 22:19:35 RIP: update routes on interface eth0 ifindex 2
  251. --------------------------------8<---------------------------------------

  252. r1通过UDP广播接收到192.168.5.123的更新包,并且把192.168.5.123设为neighbor。

  253. 保存一下配置

  254. r1_ripd# copy run start
  255. Configuration saved to /usr/local/etc/ripd.conf
  256. r2_ripd# copy run start
  257. Configuration saved to /usr/local/etc/ripd.conf

  258. Zebra还支持很多RIP功能,如果Filtering RIP Routes, RIP route-map, RIP Authentication等,有条件有时

  259. 间 的话可以做更复杂的实验。

  260. 3、用Zebra做OSPF实验

  261. OSPF(开放最短路径优先)路由协议是一项链路状态型技术,是目前IGP中应用最广、性能最优的一个 协议,

  262. 解决了RIP不能解决的大型、可扩展的网络需求而写的,适用于大规模的网络。

  263. Zebra支持OSPFv2和OSPFv3(用于IPv6的OSPF,CISCO还未对其封装),由于条件所限,下面的OSPF实 验同样是

  264. 在两台单网卡的RedHat7.2下做的。

  265. Zebra使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd

  266. 程序之前运行。ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。

  267. 初始化第一台机器:

  268. shell_1> cd /usr/local/etc
  269. shell_1> cp zebra.conf.sample zebra.conf
  270. shell_1> cp ospfd.conf.sample ospfd.conf
  271. shell_1> zebra -d

  272. 进入zebra设置IP

  273. shell_1> telnet localhost 2601
  274. Password:
  275. Router> en
  276. Password:
  277. Router# conf t
  278. Router(config)# hostname r1
  279. r1(config)# int eth0
  280. r1(config-if)# ip address 192.168.5.121/24
  281. r1(config-if)# ctrl+z
  282. r1# copy run start

  283. 进入第一台机器的ospf设置

  284. shell_1> ospfd -d
  285. shell_1> telnet localhost 2604
  286. Password:
  287. ospfd> en
  288. ospfd# conf t
  289. ospfd(config)# hostname r1_ospfd !改个名字好辨认
  290. r1_ospfd(config)# router ospf !启动ospf
  291. r1_ospfd(config-router)# ospf router-id 192.168.5.121 !设置router-id
  292. r1_ospfd(config-router)# network 192.168.5.0/24 area 0
  293. !最关键的,来标识路由器上哪些IP网络号是OSPF的一部分,对于每个网络,我们必须标识该网络所属 的区域

  294. 。由于我们只有两台机器,当然只有一个网络,所以只需执行一个network命令就够了。

  295. 对于我们的小网络,ospf就算配好了,下面来检验一下:

  296. r1_ospfd(config-router)# ctrl+z
  297. r1_ospfd# sh ip ospf route
  298. ============ OSPF network routing table ============
  299. N    192.168.5.0/24        [10] area: 0.0.0.0
  300.                            directly attached to eth0

  301. ============ OSPF router routing table =============

  302. ============ OSPF external routing table ===========

  303. r1_ospfd# sh ip ospf database

  304.        OSPF Router with ID (192.168.5.121)

  305.                 Router Link States (Area 0.0.0.0)

  306. Link ID         ADV Router      Age  Seq#       CkSum  Link count
  307. 192.168.5.121   192.168.5.121    126 0x80000002 0x8584 1

  308. r1_ospfd# sh ip ospf int eth0
  309. eth0 is up, line protocol is up

  310.   Internet Address 192.168.5.121/24, Area 0.0.0.0
  311.   Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10
  312.   Transmit Delay is 1 sec, State DR, Priority 1
  313.   Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121
  314.   No backup designated router on this network
  315.   Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
  316.     Hello due in 00:00:07
  317.   Neighbor Count is 0, Adjacent neighbor count is 0

  318. 由于网络里没有其它的路由器,r1就把自己选为DR(指定路由器)了。Zebra对log处理可能有些问题,使 用

  319. log stdout不能显示各种debug信息,所以只能记录到文件,在shell下用tail命令查看。而且debug命令和 实

  320. 际路由器也有不同。

  321. r1_ospfd# debug ospf event
  322. r1_ospfd(config)# log file /usr/local/etc/ospfd.log

  323. 然后我们在shell下查看debug信息

  324. shell_1> tail -f /usr/local/etc/ospfd.log
  325. --------------------------------8<---------------------------------------
  326. 2002/04/28 14:24:27 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  327. 2002/04/28 14:24:37 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  328. 2002/04/28 14:24:47 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  329. 2002/04/28 14:24:57 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  330. 2002/04/28 14:25:07 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  331. --------------------------------8<---------------------------------------

  332. 我们错过了最开始的信息,看到路由器每隔10秒发送一个hello数据包。hello数据包通过多目组播地址

  333. 224.0.0.5被发送出去,如果我们打开debug ospf packet all就能很清楚的看到。

  334. 第二台机器的设置

  335. 前面的初始化和第一台一样,不过这里名字设成r2便于辨认,IP设成了192.168.5.123/24。

  336. 进入第二台机器的ospf设置

  337. shell_2> ospfd -d
  338. shell_2> telnet localhost 2604
  339. Password:
  340. ospfd> en
  341. ospfd# conf t
  342. ospfd(config)# hostname r2_ospfd
  343. r2_ospfd(config)# router ospf
  344. r2_ospfd(config-router)# ospf router-id 192.168.5.123
  345. r2_ospfd(config-router)# network 192.168.5.0/24 area 0

  346. 执行完network命令,我们看到第一台机器的tail -f /usr/local/etc/ospfd.log输出下面的信息:

  347. --------------------------------8<---------------------------------------
  348. 2002/04/28 14:25:51 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
  349. 2002/04/28 14:25:51 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start
  350. 2002/04/28 14:25:52 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  351. 2002/04/28 14:25:52 OSPF: couldn't find any VL to associate the packet with
  352. 2002/04/28 14:25:52 OSPF: DR-Election[1st]: Backup 192.168.5.123
  353. 2002/04/28 14:25:52 OSPF: DR-Election[1st]: DR     192.168.5.121
  354. 2002/04/28 14:25:52 OSPF: Packet[DD]: Negotiation done (Slave).
  355. --------------------------------8<---------------------------------------

  356. r1收到r2(192.168.5.123)发过来的hello数据包,交换信息后选举DR,由于本身192.168.5.121是DR了,所以

  357. 只选举了BDR就好了。这时在r1上就能看到r2了。

  358. r1_ospfd# sh ip ospf neig

  359. Neighbor ID     Pri   State           Dead Time   Address         Interface              RXmtL

  360. RqstL DBsmL
  361. 192.168.5.123     1   Full/Backup     00:00:37    192.168.5.123   eth0:192.168.5.121     0     0  

  362.    0

  363. 检验其它信息

  364. r1_ospfd# sh ip ospf database

  365.        OSPF Router with ID (192.168.5.121)

  366.                 Router Link States (Area 0.0.0.0)

  367. Link ID         ADV Router      Age  Seq#       CkSum  Link count
  368. 192.168.5.121   192.168.5.121   1259 0x80000008 0x534e 1
  369. 192.168.5.123   192.168.5.123   1265 0x80000006 0x534a 1

  370.                 Net Link States (Area 0.0.0.0)

  371. Link ID         ADV Router      Age  Seq#       CkSum
  372. 192.168.5.123   192.168.5.123   1265 0x80000001 0x5a5a

  373. r1_ospfd# sh ip ospf int eth0
  374. eth0 is up, line protocol is up

  375.   Internet Address 192.168.5.121/24, Area 0.0.0.0
  376.   Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10
  377.   Transmit Delay is 1 sec, State DR, Priority 1
  378.   Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121
  379.   Backup Designated Router (ID) 192.168.5.123, Interface Address 192.168.5.123
  380.   Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
  381.     Hello due in 00:00:01
  382.   Neighbor Count is 1, Adjacent neighbor count is 1

  383. 和前面的输出信息相比,发生了很多变化,两台路由器已经相互识别了。OSPF不象RIP一样,每隔30秒 给所有

  384. 的邻居广播一次完整的路由表,而是通过IP多目组播地址224.0.0.5每隔10秒发送一个很小的hello 数据包来维

  385. 护邻居关系,当链路发生变化的时候,才重新计算。

  386. 拔掉两台机器连接的网线,看ospfd.log的记录:

  387. --------------------------------8<---------------------------------------
  388. 2002/04/28 16:25:53 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  389. 2002/04/28 16:25:57 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
  390. 2002/04/28 16:26:03 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  391. 2002/04/28 16:26:13 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  392. 2002/04/28 16:26:23 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  393. 2002/04/28 16:26:33 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
  394. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
  395. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
  396. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
  397. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
  398. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
  399. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
  400. 2002/04/28 16:26:37 OSPF: nsm_change_status(): scheduling new router-LSA origination
  401. 2002/04/28 16:26:37 OSPF: DR-Election[1nd]: Backup 0.0.0.0
  402. 2002/04/28 16:26:37 OSPF: DR-Election[1nd]: DR     192.168.5.121
  403. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
  404. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
  405. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
  406. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
  407. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
  408. 2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
  409. 2002/04/28 16:26:37 OSPF: Timer[router-LSA]: (router-LSA Refresh expire)
  410. 2002/04/28 16:26:37 OSPF: counting fully adjacent virtual neighbors in area 0.0.0.0
  411. 2002/04/28 16:26:37 OSPF: there are 0 of them
  412. 2002/04/28 16:26:37 OSPF: SPF: calculation timer scheduled
  413. 2002/04/28 16:26:37 OSPF: SPF: calculation timer delay = 5
  414. 2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering int eth0:192.168.5.121
  415. 2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering nbr 192.168.5.121
  416. 2002/04/28 16:26:42 OSPF: SPF: Timer (SPF calculation expire)
  417. 2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Start
  418. 2002/04/28 16:26:42 OSPF: ospf_spf_calculate: running Dijkstra for area 0.0.0.0
  419. 2002/04/28 16:26:42 OSPF: SPF Result: 0 [R] 192.168.5.121
  420. 2002/04/28 16:26:42 OSPF: ========== OSPF routing table ==========
  421. 2002/04/28 16:26:42 OSPF: ========================================
  422. 2002/04/28 16:26:42 OSPF: ospf_process_stub():processing stubs for area 0.0.0.0
  423. 2002/04/28 16:26:42 OSPF: ospf_process_stub():processing router LSA, id: 192.168.5.121
  424. 2002/04/28 16:26:42 OSPF: ospf_process_stub(): we have 1 links to process
  425. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Start
  426. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): processing route to 192.168.5.0/24
  427. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): calculated cost is 0 + 10 = 10
  428. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): installing new route
  429. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): this network is on this router
  430. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): the interface is eth0:192.168.5.121
  431. 2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Stop
  432. 2002/04/28 16:26:42 OSPF: children of V:
  433. 2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Stop
  434. 2002/04/28 16:26:42 OSPF: ospf_ia_routing():start
  435. 2002/04/28 16:26:42 OSPF: ospf_ia_routing():not ABR, considering all areas
  436. 2002/04/28 16:26:42 OSPF: Pruning unreachable networks
  437. 2002/04/28 16:26:42 OSPF: Pruning unreachable routers
  438. 2002/04/28 16:26:42 OSPF: Route: Router Routing Table free
  439. 2002/04/28 16:26:42 OSPF: SPF: calculation complete
  440. --------------------------------8<---------------------------------------

  441. 我们看到r1生成一个LSA包,通知其它路由器,由于网络里只有自己了,又选自己为DR。r2也是一样。 我们再

  442. 插上网线,查看ospfd.log:

  443. --------------------------------8<---------------------------------------
  444. 2002/04/28 16:52:08 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
  445. 2002/04/28 16:52:08 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start
  446. 2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 192.168.5.123
  447. 2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR     192.168.5.121
  448. 2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 0.0.0.0
  449. 2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR     192.168.5.123
  450. 2002/04/28 16:52:08 OSPF: DR-Election[2nd]: Backup 192.168.5.121
  451. 2002/04/28 16:52:08 OSPF: DR-Election[2nd]: DR     192.168.5.123
  452. --------------------------------8<---------------------------------------

  453. 由于拔了网线,r1和r2都把自己选为DR,一个网络只能有一个DR,所以恢复连接后它们重新进行了DR选 举,由

  454. 于192.168.5.123的router id大,所以它被选为DR。

  455. 保存一下配置

  456. r1_ospfd# copy run start
  457. Configuration saved to /usr/local/etc/ospfd.conf
  458. r2_ospfd# copy run start
  459. Configuration saved to /usr/local/etc/ospfd.conf

  460. 以上只是演示了最简单的OSPF的配置,而OSPF在大型网络才广泛的使用,配置也复杂多很多。即使是 Zebra,

  461. 也还可用做复杂的多的OSPF实验。

  462. 4、用Zebra做BGP实验

  463. RIP和OSPF都是内部网关协议(IGP),BGP属于外部网关协议(EGP)。BGP广泛用于Internet以连接 ISP,并将

  464. 企业与ISP互连。

  465. 当BGP的影响被完全了解,并且至少下列情况之一存在时,在AS中使用BGP才是最恰当的:
  466.   1 AS允许数据包穿过它到达其它自治系统(例如,某个服务提供商)。
  467.   2 AS有到其它自治系统的多条连接。
  468.   3 必须对进入和离开AS的数据流进行控制。

  469. 对于互连的自治系统来说,BGP并不总是恰当的解决方案,如果有如下情况中的一个或多个时,不要使 用BGP:
  470.   1 只有到Internet或另一AS的单一连接。
  471.   2 无需考虑路由策略或路由选择。
  472.   3 路由器缺乏经常性的BGP更新的内存或处理器。
  473.   4 对路由过滤和BGP路径选择过程的了解十分有限。
  474.   5 在自治系统间的带宽较低。
  475. 在这些情况下,应该使用静态路由。

  476. Zebra支持BGP-4和BGP-4+,下面实验只是演示BGP的基本命令,以及debug的一些信息。一个比较复杂 的用

  477. Zebra做BGP实验见http://www.unixreview.com/print/documentID=15977,有条件可以做一下。

  478. Zebra使用bgpd程序实现BGP路由功能,但bgpd需要从zebra程序获得接口信息,所以zebra程序必须在 bgpd程序

  479. 之前运行。

  480. 初始化第一台机器:

  481. shell_1> cd /usr/local/etc
  482. shell_1> cp zebra.conf.sample zebra.conf
  483. shell_1> cp bgpd.conf.sample bgpd.conf
  484. shell_1> zebra -d

  485. 还有一个bgpd.conf.sample2配置样例是用于IPv6的。

  486. 进入zebra设置IP

  487. shell_1> telnet localhost 2601
  488. Password:
  489. Router> en
  490. Password:
  491. Router# conf t
  492. Router(config)# hostname r1
  493. r1(config)# int eth0
  494. r1(config-if)# ip address 192.168.5.121/24
  495. r1(config-if)# ctrl+z
  496. r1# copy run start

  497. 进入第一台机器的bgp设置

  498. shell_1> bgpd -d

  499. 启动bgpd,我们看到TCP端口179已经打开。两台BGP路由器相互间建立一条TCP连接,交换消息以打开 和确认连

  500. 接参数。这两台路由器被称为对等路由器,或者邻居。

  501. shell_1> telnet localhost 2605
  502. Password:
  503. bgpd> en
  504. bgpd# conf t
  505. bgpd(config)# hostname r1_bgpd
  506. r1_bgpd(config)# router bgp 7675

  507. 配置样例里已经指定了AS为7675,我们懒的改就拿来用。AS是一个16bit的数字,其范围从1到 65535。RFC

  508. 1930给出了AS编号使用指南。从64512到65535的AS编号范围是留作私用的,类似私有IP。

  509. r1_bgpd(config-router)# network 192.168.5.0/24
  510. r1_bgpd(config-router)# neighbor 192.168.5.121 remote-as 7676

  511. 查看bgp信息:

  512. r1_bgpd# sh ip bgp
  513. BGP table version is 0, local router ID is 192.168.5.123
  514. Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
  515. Origin codes: i - IGP, e - EGP, ? - incomplete

  516.    Network          Next Hop            Metric LocPrf Weight Path
  517. *> 192.168.5.0      0.0.0.0                            32768 i

  518. Total number of prefixes 1

  519. 把log记录到文件:

  520. r1_bgpd# conf t
  521. r1_bgpd(config)# log file /usr/local/etc/bgpd.log

  522. 打开debug选项:

  523. r1_bgpd(config)# exit
  524. r1_bgpd debug bgp events
  525. r1_bgpd debug bgp keepalives
  526. r1_bgpd debug bgp updates

  527. 然后在shell下用tail查看log记录:

  528. shell_1> tail -f /usr/local/etc/bgpd.log
  529. --------------------------------8<---------------------------------------
  530. 2002/04/29 19:13:08 BGP: 192.168.5.121 [Event] Connect start to 192.168.5.121 fd 10
  531. 2002/04/29 19:13:11 BGP: 192.168.5.121 [Event] Connect failed (Operation now in progress)
  532. --------------------------------8<---------------------------------------

  533. r1不能连接邻居192.168.5.121。

  534. 第二台机器的设置

  535. 前面的初始化和第一台一样,不过这里名字设成r2便于辨认,IP设成了192.168.5.123/24。

  536. 进入第二台机器的bgp设置

  537. shell_2> bgpd -d
  538. shell_2> telnet localhost 2605
  539. Password:
  540. bgpd> en
  541. bgpd# conf t
  542. bgpd(config)# hostname r2_bgpd

  543. AS要设成不一样,所以修改一下:

  544. r2_bgpd(config)# no router bgp 7675
  545. r2_bgpd(config)# router bgp 7676
  546. r2_bgpd(config-router)# network 192.168.5.0/24
  547. r2_bgpd(config-router)# neighbor 192.168.5.123 remote-as 7675

  548. 这时第一台机器的log出现如下信息:

  549. --------------------------------8<---------------------------------------
  550. 2002/04/29 19:16:35 BGP: [Event] BGP connection from host 192.168.5.121
  551. 2002/04/29 19:16:35 BGP: [Event] Make dummy peer structure until read Open packet
  552. 2002/04/29 19:16:35 BGP: 192.168.5.121 [Event] Transfer temporary BGP peer to existing one
  553. 2002/04/29 19:16:35 BGP: 192.168.5.121 [Event] Accepting BGP peer delete
  554. 2002/04/29 19:16:35 BGP: 192.168.5.121 send UPDATE 192.168.5.0/24 nexthop 192.168.5.123, origin

  555. i, path
  556. 2002/04/29 19:16:35 BGP: 192.168.5.121 rcvd UPDATE w/ attr: nexthop 192.168.5.121, origin i, path

  557. 7676
  558. 2002/04/29 19:16:35 BGP: 192.168.5.121 rcvd 192.168.5.0/24
  559. --------------------------------8<---------------------------------------

  560. 两台bgp已经互连了。再看一下第一台机器的bgp信息:

  561. r1_bgpd# sh ip bgp
  562. BGP table version is 0, local router ID is 192.168.5.123
  563. Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
  564. Origin codes: i - IGP, e - EGP, ? - incomplete

  565.    Network          Next Hop            Metric LocPrf Weight Path
  566. *  192.168.5.0      192.168.5.121                          0 7676 i
  567. *>                  0.0.0.0                            32768 i

  568. Total number of prefixes 1

  569. r1_bgpd# sh ip bgp neighbors
  570. BGP neighbor is 192.168.5.121, remote AS 7676, local AS 7675, external link
  571.   BGP version 4, remote router ID 192.168.5.121
  572.   BGP state = Established, up for 00:01:13
  573.   Last read 00:00:13, hold time is 180, keepalive interval is 60 seconds
  574.   Neighbor capabilities:
  575.     Route refresh: advertised and received (old and new)
  576.     Address family IPv4 Unicast: advertised and received
  577.   Received 98 messages, 0 notifications, 0 in queue
  578.   Sent 103 messages, 0 notifications, 0 in queue
  579.   Route refresh request: received 0, sent 0
  580.   Minimum time between advertisement runs is 0 seconds

  581. For address family: IPv4 Unicast
  582.   Community attribute sent to this neighbor (both)
  583.   1 accepted prefixes

  584.   Connections established 2; dropped 1
  585. Local host: 192.168.5.123, Local port: 179
  586. Foreign host: 192.168.5.121, Foreign port: 1029
  587. Nexthop: 192.168.5.123
  588. Read thread: on  Write thread: off

  589. Zebra还支持很多BGP的特性,请参考GNU Zebra Manual,有条件的可以做一下那些实验。

  590. Zebra的Mailing List比较活跃,有许多人在那里讨论Zebra的开发和配置等等,有问题的话,在那里应该 能得

  591. 到解答。

  592. Reference

  593. GNU Zebra Manual
  594. http://www.pointless.net/~jasper/zebra-html/zebra_toc.html#SEC_Contents
  595. 组建可扩展的Cisco网络
  596. http://www.unixreview.com/print/documentID=15977]
复制代码
发表于 2004-8-27 20:24:20 | 显示全部楼层
AMD-K6
我在用红帽AS3  我怎么没有发现这个软件在系统上啊
请问AS3上有这个吗?
发表于 2004-8-27 20:28:24 | 显示全部楼层
好贴。如果AS3上没有可以考虑下源码编译。
发表于 2004-8-27 21:14:01 | 显示全部楼层
好贴。如果AS3上没有可以考虑下源码编译。
我好痛苦.......
 楼主| 发表于 2004-8-27 22:02:51 | 显示全部楼层
最初由 txkss 发表
好贴。如果AS3上没有可以考虑下源码编译。
我好痛苦.......


Slackware 下也没有的哦,我是源码编译的。
发表于 2004-8-27 22:17:38 | 显示全部楼层
AMD-K6
给个能在AS3顺利编译的下载链接吧
照顾一下我这个菜鸟吧
大师们....
谢谢
发表于 2007-8-1 17:28:03 | 显示全部楼层
Zebra绝对不是小儿科,过去韩国茶山生产的三层交换机就是用的这个系统,在国内卖了很多。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表