本文主要介绍如何用Linux做一个功能完备的路由器,这里将主要介绍静态路由器和动态路由器的配置,但不包括IP伪装或者说公用一个IP地址访问外面网络等问题。其已经不属于本主题讨论的范围,请参考其他如防火墙的配置等的内容。
LRP(Linux Router Project)已经成立了有好几年的时间了。这个计划的目的是利用Linux操作系统将老旧的个人电脑如486当成网络的路由器使用。利用Linux低成本建立的路由器可能引起企业界广泛的注意。正如StoneFly Technology的系统整合工程师Bret Berger所说的,对无法负担两千(美元)思科(Cisco)路由器的使用者来说,利用486加上几张以太网卡,当成路由器使用,是另一个选择。而对于一些小型企业、小型ISP ,甚至是政府机构,这是一个很好的解决方案。事实上目前国内高校很多场合正是利用了这一解决方案。
由于LRP计划已经把Linux的源代码精简化,LRP软件可以少于2MB ,同时也可以将LRP软件放入一张软盘内。也就是说在没有硬盘的情况下,LPR也可以利用软盘,载入电脑中使用。Virtual Design Group的软件工程师Michael Kornegay则表示,他们已经将Linux路由器软件安装在一架老旧的x86个人电脑上,再加上两张以太网卡,没有使用硬盘的设备,只是使用软盘启动,便当成阳春型的路由器与防火墙使用。
我们在这一章里不是教大家如何制作小于2MB的LRP软件包,而是告诉大家如何利用Linux来获得一个性能良好、价格低廉的路由器。利用Linux构建路由器使用的成本虽然便宜,可是在性能与效率上与真正的路由器相比,却还是有一段距离。对于玩家们或是一些要求不高的使用者来说,这是一个不错的选择。
什么是路由器?
简单的说:路由器的功能就是寻路――给IP包寻找正确的路径以通往目的地。下面是比较详细的介绍:
原理与作用
路由器(Router)用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器来完成。因此,路由器具有判断网络地址和选择路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。它不关心各子网使用的硬件设备,但要求运行与网络层协议相一致的软件。
一般说来,异种网络互联与多个子网互联都应采用路由器来完成。 路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据--路径表(RoutingTable),供路由选择时使用。路径表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。
静态路径表
由系统管理员事先设置好固定的路径表称之为静态(static)路径表,一般是在系统安装时就根据网络的配置情况预先设定的,当网络结构的改变时需管理员手工改动相应的表项。
动态路径表
动态(Dynamic)路径表是路由器根据网络系统的运行情况而自动调整的路径表。路由器根据路由选择协议(RoutingProtocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
路由器的功能
(1) 协议转换:能对网络层及其以下各层的协议进行转换。
(2) 路由选择:当分组从互联的网络到达路由器时,路由器能根据分组的目的地址按某种路由策略,选择最佳路由,将分组转发出去,并能随网络拓扑的变化,自动调整路由表。
(3) 能支持多种协议的路由选择:路由器与协议有关,不同的路由器有不同的路由器协议,支持不同的网络层协议。如果互联的局域网采用了两种不同的协议,例如,一种是TCP/IP协议,另一种是SPX/IPX协议(即Netware的传输层/网络层协议),由于这两种协议有许多不同之处,分布在互联网中的TCP/IP(或SPX/IPX)主机上,只能通过TCP/IP(或SPX/IPX)路由器与其他互联网中的TCP/IP(或SPX/IPX)主机通信,但不能与同一局域网中的SPX/IP(或TCP/IP)主机通信。多协议路由器能支持多种协议,如IP,IPX及X.25协议,能为不同类型的协议建立和维护不同的路由表。这样不仅能连接同一类型的网络,还能用它连接不同类型的网络。这种功能虽然使路由器的适应性变强,但同时也使得路由器的整体性能降低,现在IP协议在网络中越来越占主导地位,因此在下一代路由器(如交换式路由器)只需要支持IP协议。
(4) 流量控制:路由器不仅具有缓冲区,而且还能控制收发双方数据流量,使两者更加匹配。
(5) 分段和组装功能:当多个网络通过路由器互联时,各网络传输的数据分组的大小可能不相同,这就需要路由器对分组进行分段或组装。即路由器能将接收的大分组分段并封装成小分组后转发,或将接收的小分组组装成大分组后转发。如果路由器没有分段组装功能,那么整个互联网就只能按照所允许的某个最短分组进行传输,大大降低了其他网络的效能。
(6) 网络管理功能:路由器是连接多种网络的汇集点,网间分组都要通过它,在这里对网络中的分组、设备进行监视和管理是比较方便的。因此,高档路由器都配置了网络管理功能,以便提高网络的运行效率、可靠性和可维护行。
一个路由器必然有大于或者等于2的网络接口,这样它才存在路由的功能,否则,如果只有一个接口的话,也就无所谓"寻路"了!这里说的网络接口不一定是物理上的接口,例如网卡或其他,也可以是虚拟的接口,例如隧道入口等。
如前面所描述的,一个路由器上运行的路由信息可以是静态配置的,也可以是动态产生。前者通过手工配置完成、而后者则通过在路由器上运行跑相关路由协议的程序来根据网络状态动态改变内核中的路由表。下面我们仔细介绍一些这两类路由器的配置。通常,一个路由器既有静态配置的部分,又有动态配置的部分,二者结合起来。