Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222307
  • 博文数量: 49
  • 博客积分: 2101
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-07 10:38
文章分类

全部博文(49)

文章存档

2010年(49)

我的朋友

分类: 嵌入式

2010-09-07 15:17:58

1 Linux2.6路由分析

1.1 静态与动态路由

       静态路由是网络管理员再已知网络拓扑情况下手动添加的路由信息;而动态路由则是路由器根据对网络拓扑变化的检测动态改变路由信息。静态路由,linux2.6内核提供了route命令来修改系统路由信息;动态路由,必须添加相应的路由协议如RIPOSPF等等。

1.2 开启内核包转发功能

       无论是静态还是动态路由,都只是更改系统路由表而已;虽然方式不同,但是结果相同。而IP包的转发是Linux2.6内核根据路由表来完成的,必须打开内核的包转发功能,否则再正确的路由表也没有用。

echo "1" > /proc/sys/net/ipv4/ip_forward

1.3 路由表解读

       考虑如图1网络拓扑。

1 网络拓扑

       在这里必须明确一点:在数据链路层上相互连接的两个网络接口必然处于同一网段。这个概念对于解读路由表时非常重要。

       如图2所示,路由器1使用linuxroute命令得到的内核路由表。

Kernel IP routing table

Destination   Gateway     Genmask     Flags  Metric   Ref   Use Iface

192.168.3.0  192.168.0.2   255.255.255.0   UG    2      0     0  eth1

192.168.2.0   *           255.255.255.0   U     0      0     0  eth0

192.168.0.0   *           255.255.255.0   U     0      0     0  eth1

default      192.168.2.254  0.0.0.0        UG    0      0     0  eth0

2 路由信息

      

其中各个字段的解释如表1所示。

1 路由信息字段解释

字段

含义

Destination

目的网络或目的主机

Gateway

网关即下一跳地址,若无则用“*”表示,

Genmask

子网掩码

Flags

见表2

Metric

路由距离

Ref

路由项引用次数。Linux内核没使用

Use

查找路由项的次数

Iface

该路由表项对应的网络接口,即转发出口

       Flags的意义如表2所示。

2 Flags意义解释

Flag

含义

D

由路由的后台进程动态安装

H

目的是一个主机

G

使用网关

M

由路由的后台进程修改

R

恢复动态路由产生的表项

U

路由是活动的

!

拒绝路由

       在路由器1中的路由主要分为三类。第一类是访问与本路由器网络接口在数据链路层相连的同一网络的主机。如果是同一网络,则路由的IP包直接从相应的网络接口转发,没有下一跳的概念。主要最后一个Iface就代表了IP包转发出口。同时,这第一类路由信息也是跨网段转发的基础。

       第二类就是跨网段转发。

Destination   Gateway     Genmask     Flags  Metric   Ref   Use Iface

192.168.3.0  192.168.0.2   255.255.255.0   UG    2      0     0  eth1

       注意,跨网段时,下一跳地址是192.168.0.2,而至于如果到达192.168.0.2,就是上述第一类路由所管辖的事情了。这里的下一跳地址必然不是路由器自身的网络接口,这一点要注意,这也是我一开始的错误观念。

       第三类就是默认路由信息了,该信息同第一类类似,对于在路由表中找不到路由信息的IP包,使用默认路由信息。

 

2 静态路由的实现

2.1 静态路由工具route

       route命令可以查看内核路由表,静态添加、删除路由信息。使用man route命令可以看到route的说明。使用man route|col –b > route.txt可以导出txt格式的说明文件。

2.2  route命令举例

1)查看路由表

route

2)添加到一个网络的路由

route add -net 192. 168.2.0 netmask 255.255.255.0 dev eth0

3)添加到一个主机的路由

route add –host 192.168.2.1 netmask 255.255.255.0 dev eth0

4)删除一条路由

route del -net 192.168.2.0 netmask 255.255.255.0 dev eth0

route del –host 192.168.2.1 netmask 255.255.255.0 dev eth0

5)添加默认路由

route add default gw 192.168.2.254

6)删除默认路由

route del default gw 192.168.2.254

 

 

 

 

 

 

 

 

 

 

 

3 基于zebra的动态路由的实现

3.1 动态路由实现方法

       这里讨论的动态路由都是指IGP及内部网关协议,常见的包括rip2ospf等。Zebra是一种开源的路由协议实现源码,支持多种标准的IGP路由协议。本文所指的动态路由的实现就是基于zebra实现的。另外,由于zebra更新较慢,所以出现了基于zebraquagga,但是下载了quagga编译一下,没过,所以依然使用zebra了。不过quagga的手册写的不错。

3.2 zebra动态路由对系统的要求

1 内核配置选项

       zebra的手册中,明确要求以下三项必须选中,具体原因参考手册。

CONFIG_NETLINK

CONFIG_RTNETLINK

CONFIG_IP_MULTICAST

2 网络接口的多播地址

       由于路由协议使用多播地址来交换路由信息,所以网络接口必须支持多播帧的传输。调试初期,我们曾经犯过这个错误。如果网络接口驱动程序提供了设置多播地址的接口,那么使用如下语句可以打开所有多播地址。

ifconfig eth0 allmulti

       如果网络接口驱动没有提供相关接口,就只有修改驱动程序直接支持多播地址了。

3.3 zebra的编译

3.3.1 下载zebra

从官方网站 上下载最新的zebra版本zebra-0.95a.tar.gz

3.3.2 编译zebra

       第一步,使用configure配置zebra

./configure --host=i686-pc-linux --build=ppc CC=ppc_8xx-gcc --enable-vtysh --disable-ipv6 --prefix=/usr/zebra --disable-ripngd --disable-ospf6d --disable-bgp-announce

       上述配置指明了交叉编译链,指明了关闭ospf6d等路由协议,保留了ripdospfd等路由协议。具体选项参考zebra手册。

       第二步,使用make命令编译;

       第三步,使用make install命令安装。这样在prefix中指定的目录下就出现了zebra的编译结果。

3.3.3 zebra编译结果

       在安装目录下,sbin目录里是zebra的主程序,分为两类,一类是zebra可执行文件,该程序负责同内核交换,修改内核路由信息;另一类是各种路由协议如ripdospfd等。这些路由协议运行后,通过技术网络拓扑并告知zebra如何修改内核路由表。所以,zebra必须在ripd等之前运行。

       另外,zebraripd等的运行是需要配置文件的,在安装目录下的etc目录下,给出了配置文件示例。

3.3.4 zebra的裁剪

ppc_8xx-strip --remove-section=.note --remove-section=.comment zebra

 

3.4 基于zebraRIP2实现

3.4.1 启动zebra进程

       Zebra使用netlink socket接口与内核通信,维护路由表,所以zebra必须首先运行。zebra的运行依赖于配置文件。

/sbin/zebra -f /etc/zebra.conf -d

       zebra.conf文件内容示例如下。

! -*- zebra -*-

! zebra sample configuration file

! $Id: zebra.conf.sample,v 1.14 1999/02/19 17:26:38 developer Exp $

hostname Router      (为路由器指定名称)

password zebra       (指定路由器密码)

enable password zebra (使密码生效,用于配置zebravtysh登录)

log file zebra.log       (记录zebra行为的文件)

      

 

zebra启动后,执行如下语句可以登录到zebravtysh命令行来配置zebra。由于一般我们的设备不会给用户命令行,所以基本不会用到vtysh。详细的命令格式见zebra手册。

telnet localhost 2601

3.4.2 启动RIP进程

       zebra类似,ripd进程的运行同样依赖于配置文件。

/sbin/ripd -f /etc/ripd.conf -d

       Ripd.conf文件内容示例如下。

! -*- rip -*-

! RIPd sample configuration file

! $Id: ripd.conf.sample,v 1.11 1999/02/19 17:28:42 developer Exp $

hostname ripd (设定用户名)

password zebra (设定密码用于vtysh登录)

router rip (打开rip路由协议)

 

network eth0 (监听eth0

!network 11.0.0.0/8(监听网络)

network eth1 (监听eth1

version 2 (运行rip版本2

 

log file ripd.log

log stdout

       注意,监听网络时除了指定网络接口还可以直接指定网段,但是由于我们的系统ip是变化的,所以将网段写在固定的配置文件中是不合适的。另外,理论上在修改了eth0eth1ip后,RIP2依然能正常运行,至少在一段时间后收敛,但是测试结果却不行。所以在修改了eth0eth1ip信息应该立刻重启ripd

       登录ripdvtysh方式如下,不过这种配置方法目前不使用。

telnet localhost 2602

 

 

3.4.3 RIP2路由协议测试

       CISCO 2611路由器联合测试通过。

阅读(1889) | 评论(0) | 转发(0) |
0

上一篇:linux下使用msntp

下一篇:Jffs2文件系统制作

给主人留下些什么吧!~~