• Linux下配置OSPF


    Zebra支持OSPFv2和OSPFv3(用于IPv6的OSPF,CISCO还未对其封装),由于条件所限,下面的OSPF实 验同样是在两台单网卡的RedHat7.2下做的。

    Zebra使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd程序之前运行。ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。

    初始化第一台机器:

    shell_1> cd /usr/local/etc
    shell_1> cp zebra.conf.sample zebra.conf
    shell_1> cp ospfd.conf.sample ospfd.conf
    shell_1> zebra -d

    进入zebra设置IP

    shell_1> telnet localhost 2601
    Password:
    Router> en
    Password:
    Router# conf t
    Router(config)# hostname r1
    r1(config)# int eth0
    r1(config-if)# ip address 192.168.5.121/24
    r1(config-if)# ctrl+z
    r1# copy run start

    进入第一台机器的ospf设置

    shell_1> ospfd -d
    shell_1> telnet localhost 2604
    Password:
    ospfd> en
    ospfd# conf t
    ospfd(config)# hostname r1_ospfd            !改个名字好辨认
    r1_ospfd(config)# router ospf                      !启动ospf
    r1_ospfd(config-router)# ospf router-id 192.168.5.121                 !设置router-id
    r1_ospfd(config-router)# network 192.168.5.0/24 area 0
    最关键的,来标识路由器上哪些IP网络号是OSPF的一部分,对于每个网络,我们必须标识该网络所属 的区域。由于我们只有两台机器,当然只有一个网络,所以只需执行一个network命令就够了。

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

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

    ============ OSPF router routing table =============

    ============ OSPF external routing table ===========

    r1_ospfd# sh ip ospf database

    OSPF Router with ID (192.168.5.121)

    Router Link States (Area 0.0.0.0)

    Link ID ADV Router Age Seq# CkSum Link count
    192.168.5.121 192.168.5.121 126 0×80000002 0×8584 1

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

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

    由于网络里没有其它的路由器,r1就把自己选为DR(指定路由器)了。Zebra对log处理可能有些问题,使 用log stdout不能显示各种debug信息,所以只能记录到文件,在shell下用tail命令查看。而且debug命令和 实际路由器也有不同。

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

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

    shell_1> tail -f /usr/local/etc/ospfd.log
    ——————————–8<—————————————
    2002/04/28 14:24:27 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 14:24:37 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 14:24:47 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 14:24:57 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 14:25:07 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    ——————————–8<—————————————

    我们错过了最开始的信息,看到路由器每隔10秒发送一个hello数据包。hello数据包通过多目组播地址 224.0.0.5被发送出去,如果我们打开debug ospf packet all就能很清楚的看到。

    第二台机器的设置

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

    进入第二台机器的ospf设置

    shell_2> ospfd -d
    shell_2> telnet localhost 2604
    Password:
    ospfd> en
    ospfd# conf t
    ospfd(config)# hostname r2_ospfd
    r2_ospfd(config)# router ospf
    r2_ospfd(config-router)# ospf router-id 192.168.5.123
    r2_ospfd(config-router)# network 192.168.5.0/24 area 0

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

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

    r1收到r2(192.168.5.123)发过来的hello数据包,交换信息后选举DR,由于本身192.168.5.121是DR了,所以 只选举了BDR就好了。这时在r1上就能看到r2了。

    r1_ospfd# sh ip ospf neig

    Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL
    192.168.5.123 1 Full/Backup 00:00:37 192.168.5.123 eth0:192.168.5.121 0 0 0

    检验其它信息

    r1_ospfd# sh ip ospf database

    OSPF Router with ID (192.168.5.121)

    Router Link States (Area 0.0.0.0)

    Link ID ADV Router Age Seq# CkSum Link count
    192.168.5.121 192.168.5.121 1259 0×80000008 0x534e 1
    192.168.5.123 192.168.5.123 1265 0×80000006 0x534a 1

    Net Link States (Area 0.0.0.0)

    Link ID ADV Router Age Seq# CkSum
    192.168.5.123 192.168.5.123 1265 0×80000001 0x5a5a

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

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

    和前面的输出信息相比,发生了很多变化,两台路由器已经相互识别了。OSPF不象RIP一样,每隔30秒 给所有的邻居广播一次完整的路由表,而是通过IP多目组播地址224.0.0.5每隔10秒发送一个很小的hello 数据包来维护邻居关系,当链路发生变化的时候,才重新计算。

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

    ——————————–8<—————————————
    2002/04/28 16:25:53 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 16:25:57 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
    2002/04/28 16:26:03 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 16:26:13 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 16:26:23 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 16:26:33 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
    2002/04/28 16:26:37 OSPF: nsm_change_status(): scheduling new router-LSA origination
    2002/04/28 16:26:37 OSPF: DR-Election[1nd]: Backup 0.0.0.0
    2002/04/28 16:26:37 OSPF: DR-Election[1nd]: DR 192.168.5.121
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
    2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
    2002/04/28 16:26:37 OSPF: Timer[router-LSA]: (router-LSA Refresh expire)
    2002/04/28 16:26:37 OSPF: counting fully adjacent virtual neighbors in area 0.0.0.0
    2002/04/28 16:26:37 OSPF: there are 0 of them
    2002/04/28 16:26:37 OSPF: SPF: calculation timer scheduled
    2002/04/28 16:26:37 OSPF: SPF: calculation timer delay = 5

    2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering int eth0:192.168.5.121
    2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering nbr 192.168.5.121
    2002/04/28 16:26:42 OSPF: SPF: Timer (SPF calculation expire)
    2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Start
    2002/04/28 16:26:42 OSPF: ospf_spf_calculate: running Dijkstra for area 0.0.0.0
    2002/04/28 16:26:42 OSPF: SPF Result: 0 [R] 192.168.5.121
    2002/04/28 16:26:42 OSPF: ========== OSPF routing table ==========
    2002/04/28 16:26:42 OSPF: ========================================
    2002/04/28 16:26:42 OSPF: ospf_process_stub():processing stubs for area 0.0.0.0
    2002/04/28 16:26:42 OSPF: ospf_process_stub():processing router LSA, id: 192.168.5.121
    2002/04/28 16:26:42 OSPF: ospf_process_stub(): we have 1 links to process
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Start
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): processing route to 192.168.5.0/24
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): calculated cost is 0 + 10 = 10
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): installing new route
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): this network is on this router
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): the interface is eth0:192.168.5.121
    2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Stop
    2002/04/28 16:26:42 OSPF: children of V:
    2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Stop
    2002/04/28 16:26:42 OSPF: ospf_ia_routing():start
    2002/04/28 16:26:42 OSPF: ospf_ia_routing():not ABR, considering all areas
    2002/04/28 16:26:42 OSPF: Pruning unreachable networks
    2002/04/28 16:26:42 OSPF: Pruning unreachable routers
    2002/04/28 16:26:42 OSPF: Route: Router Routing Table free
    2002/04/28 16:26:42 OSPF: SPF: calculation complete
    ——————————–8<—————————————

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

    ——————————–8<—————————————
    2002/04/28 16:52:08 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
    2002/04/28 16:52:08 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start
    2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 192.168.5.123
    2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR 192.168.5.121
    2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 0.0.0.0
    2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR 192.168.5.123
    2002/04/28 16:52:08 OSPF: DR-Election[2nd]: Backup 192.168.5.121
    2002/04/28 16:52:08 OSPF: DR-Election[2nd]: DR 192.168.5.123
    ——————————–8<—————————————

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

    保存一下配置

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

  • 相关阅读:
    json取值(key是中文或者数字)方式详解
    快速排序
    百度地图 获取矩形point
    ArcGIS
    天眼
    shapefile文件
    SQL Server 2008 的gis函数
    查看某一个点是否在某个多边形内 使用ST_Contains函数
    PostgreSQL+PostGIS的使用 函数清单
    地理坐标计算
  • 原文地址:https://www.cnblogs.com/hbgzy/p/4001134.html
Copyright © 2020-2023  润新知