首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Quagga动态路由软件学习(2)

Quagga动态路由软件学习(2)

#给接口配置IP地址:Router(config)# interface eth0Router(config-if)# ip address 192.168.2.1/24配置一个路由器的常用方法:Router(config)# hostname R1R1(config)# int em1R1(config-if)# ip address 172.18.186.107/23R1(config-if)# no shutdownR1(config-if)# exit3 开启RIP/OSPF内部动态路由协议sudo mv /etc/guagga/ripd.conf.sample /etc/guagga/ripd.confsudo ripd -d例子:三台虚机,一台做路由,两台做客户端路由器所在的Linux分别有两个网卡,eth0:192.168.1.1和eth1:192.168.10.1。客户端A 所在网段为192.168.1.0/24,IP为192.168.1.2。客户端B所在网段为192.168.10.0/24,IP为192.168.10.2。在路由器的虚机上安装guagga,并开启zebma及rip两个协议,这时候是可以从192.168.1.2 ping 通 192.168.10.2的。查看RIP路由表:ripd> router rip       OSPF也是一个内部动态路由协议,它是基于状态的,一个路由器上知道全自治区域的所有路由信息。而RIP是基于最短路径的,只能有一个最短的路由。sudo mv /etc/guagga/ospfd.conf.sample /etc/guagga/ospfd.confsudo ospfd -dospf的手工配置界面是:telnet 0 2604指定在172.18.186.0/23和192.168.3.0/24两个网络之间使用rip协议ripd> enripd# conf tripd(config)# router ripripd(config-router)# network 172.18.186.0/23ripd(config-router)# network 192.168.3.0/24ripd(config-router)# endripd#如果OSPF,则应该指定哪些网络位于同一个区域,因为它是面向状态的内部路由协议:network 172.18.186.0/23 area 0network 192.168.3.0/24 area 04 开启BGP外部动态路由协议 sudo mv /etc/guagga/bgpd.conf.sample /etc/guagga/bgpd.confsudo bgpd -d手工配置界面是:telnet 0 2605例子:下面只显示R1的Zebra配置过程,R2请自行配置:Router> enPassword: R1# conf tR1(config)# hostname r1r1(config)# int em1r1(config-if)# ip address 172.18.186.100/23下面只显示R1的BGP配置过程,R2请自行配置:[hua@laptop nova]$ telnet 0 2605Trying 0.0.0.0...Connected to 0.Escape character is '^]'.Hello, this is Quagga (version 0.99.22).Copyright 1996-2005 Kunihiro Ishiguro, et al.User Access VerificationPassword: bgpd> enbgpd# conf tbgpd(config)# hostname r1_bgpd#指定自治系统号7675(自治系统号是一个16bit的数字,从1-65535,其中64512-65535保留为私有)r1_bgpd(config)# router bgp 7675r1_bgpd(config-router)# network 172.18.186.0/23r1_bgpd(config-router)# neighbor 172.18.186.101 remote-as 7676r1_bgpd(config-router)# exitr1_bgpd(config)# exitr1_bgpd# sh ip bgp neighborsr1_bgpd# show ip bgpBGP table version is 0, local router ID is 0.0.0.0Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,              r RIB-failure, S Stale, R RemovedOrigin codes: i - IGP, e - EGP, ? - incomplete   Network          Next Hop            Metric LocPrf Weight Path*> 172.18.186.0/23  0.0.0.0                  0         32768 iTotal number of prefixes 1r1_bgpd# Total number of prefixes 1开启debug功能,将日记保存到/tmp/bgpd.log文件中。r1_bgpd# debug bgp eventsBGP events debugging is onr1_bgpd# debug bgp keepalivesBGP keepalives debugging is onr1_bgpd# debug bgp updatesBGP updates debugging is onr1_bgpd# conf tr1_bgpd(config)# log file /tmp/bgpd.logr1_bgpd(config)# exit5 路由的获取     Linux下的路由可以通过netlink包编程获取。Quagga不直接使用底层的路由表或者硬件转发表,它自己维护的路由表是RIB表,包含除主机路由以外的所有路由(因为主机路由是通过ARP学到的,而ARP是OS底层实现的)。RIB表包括直连路由,静态路由,动态路由。而OS维护的表是转发表,即FIB表,Quagga负责维护RIB与FIB间的同步,也负责各种路由协议的路由表与RIB间的同步;Quagga提供了几种方式与内核通信,类UNIX系统下的常见方式ioctl, sysctl, proc, netlink都有支持。RIB表是radix树结构,而FIB表是hash table结构。radix是一个二叉树,如下图所示: 该radix二叉树用结构休route_table表示, 根节点用结构体route_node表示,包括四个成员,表示前缀的prefix结构体,左孩子、右孩子和表示下一路的info指针,info可以是下一跳的接口,或者IP,也可以是黑洞,分别对应着三种路由目标的类型:IFNAME, GATEWAY, BLACKHOLE。
继承事业,薪火相传
返回列表