1 Linux2.6路由分析

1.1静态与动态路由

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

1.2开启内核包转发功能

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

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

1.3路由表解读

考虑如图1网络拓扑。

图1网络拓扑

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

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

Kernel IP routing table

DestinationGatewayGenmaskFlags Metric RefUse Iface

192.168.3.0192.168.0.2255.255.255.0UG200 eth1

192.168.2.0*255.255.255.0U000 eth0

192.168.0.0*255.255.255.0U000 eth1

default192.168.2.254 0.0.0.0UG000 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包转发出口。同时,这第一类路由信息也是跨网段转发的基础。

第二类就是跨网段转发。

DestinationGatewayGenmaskFlags Metric RefUse Iface

192.168.3.0192.168.0.2255.255.255.0UG200 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及内部网关协议,常见的包括rip2、ospf等。Zebra是一种开源的路由协议实现源码,支持多种标准的IGP路由协议。本文所指的动态路由的实现就是基于zebra实现的。另外,由于zebra更新较慢,所以出现了基于zebra的quagga,但是下载了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等路由协议,保留了ripd,ospfd等路由协议。具体选项参考zebra手册。

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

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

3.3.3zebra编译结果

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

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

3.3.4zebra的裁剪

ppc_8xx-strip --remove-section=.note

--remove-section=.comment zebra

3.4基于zebra的RIP2实现

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(使密码生效,用于配置zebra时vtysh登录)

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

在zebra启动后,执行如下语句可以登录到zebra的vtysh命令行来配置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是变化的,所以将网段写在固定的配置文件中是不合适的。另外,理论上在修改了eth0或eth1的ip后,RIP2依然能正常运行,至少在一段时间后收敛,但是测试结果却不行。所以在修改了eth0或eth1的ip信息应该立刻重启ripd。

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

telnet localhost 2602

3.4.3RIP2路由协议测试

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

linux 编译配置内核路由功能,嵌入式Linux2.6路由功能的实现相关推荐

  1. linux 编译配置内核路由功能,Linux下多播路由的实现-网管专栏,防火墙和路由

    前言(只是一些废话,不想看的可以略过) ===================================== 多播路由是一个很好的技术,在internet上实现了对数据的"广播&quo ...

  2. LinuX编译显示内核配置无效,配置编译内核(Linux kernel)

    虽然以前也编译过内核,但是关于内核配置选项特别是有关本机驱动这块还是不熟悉,因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件,最近看到一本书<Linux ker ...

  3. linux编译配置过程,make menuconfig/.config/Kconfig的关系

      首先要知道,内核配置跟三类文件有关,包括.config,Kconfig,Makefile,其中.config只有根目录下有, Kconfig和Makefile在根目录和每个子目录都有,先说下他们的 ...

  4. Linux 编译安装内核

    一.简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新.新的内核修 ...

  5. arch linux编译,ArchLinux内核编译与安装

    为什么要编译内核?在Gnome桌面环境下,不知什么原因,nouveau显示驱动总是会出现问题.然而尝试着禁掉它,却都没啥作用,只能从内核层面剔除nouveau. 大致步骤: 获取Linux内核源码 解 ...

  6. linux编译树莓派内核,编译树莓派 4B Linux 5.9 内核

    来自 九年吃菜粥 的发帖. 文中的操作是在 x86 docker 的 Ubuntu 容器中进行操作,因为子系统编译时好像 CPU 吃不满. 文中命令全部用 root 用户执行. 1.首先下载树莓派的内 ...

  7. Linux编译内核的详细配置

    分类: Linux内核 2005-03-12 10:58 4492人阅读 评论(0) 收藏 举报 linux网络idedoswindowsdocumentation 前言之前言:谁是这篇文章的读者? ...

  8. Linux 2.6内核编译与配置安装升级

    Linux系统更新了很多版本更新,我本人认为Linux 2.6内核在Linux系统系列里很好使的文件系统,在此向大家推荐.如今技术不断更新,各种使用文件都已经淘汰.我认为还是有很不错的如Linux 2 ...

  9. linux网卡内核文件在哪里,linux-2.6.35内核配置和网卡驱动添加

    [环境] 1:Ubuntu 10.10 2:u-boot-2010.03 3:linux-2.6.35 4:优龙FS2410 5:交叉编译器:arm-none-linux-gnueabi-gcc ve ...

最新文章

  1. WPF控件textBox多行输入设置
  2. 小米知识图谱团队斩获CCKS 2020实体链指比赛冠军
  3. SELECT COUNT语句
  4. pymssql.OperationalError: (20017 问题解决
  5. 1.gloox开发环境搭建
  6. 计算机表演赛vr创意大赛,计算机表演赛新增VR创意大赛
  7. leetcode题库1314-- 矩阵区域和
  8. UVa 1585 - Score
  9. jena使用 java_【jena】 jena基本使用
  10. JavaScript实战练习——图片裁剪
  11. heur.riskfm.bbx病毒解决方案--www.baoluowanxiang.com
  12. 打印机驱动无法安装到计算机是,打印机驱动在电脑哪个位置 打印机驱动安装不上怎么办【详解】...
  13. 如何创建自己的支付宝收款二维码
  14. 图文并茂,Python轻松生成PDF数据分析报告
  15. 你终将成为你潜意识中想要成为的人
  16. SnapChat明年IPO 创始人为保证控制权改股权结构
  17. elasticsearch安装和使用
  18. EI | 北大温东辉组发现确定性过程驱动工业废水处理系统细菌群落构建
  19. 英国认定人脸识别公司Clearview AI侵犯隐私:罚款750万英镑,删除英国居民信息...
  20. 全国计算机二级vb考试历年真题,全国计算机级考试二级VB历年真题精选.doc

热门文章

  1. Python——Numpy基础教程
  2. win10桌面出现removable storage devices文件夹无法删除
  3. matlab svd降维测试数据集,SVD降维
  4. Elasticsearch 内置分词器
  5. 基于STM32的OLED播放Bad apple
  6. 进阶课程㊳丨Apollo平台的快速入门
  7. 同步Gmail联系人到山狮 (MAC OS X 10.8)
  8. 机器学习——决策树模型:Python实现
  9. oracle怎么值自增长,oracle怎么实现自增长
  10. Java web导出excel文件 - poi