You are on page 1of 18

Lesson5 Linux 下的路由器和防火墙

Lesson5 Linux 下的路由器和防火墙

路由概述

• 路由器的原理和作用
• 路由器的优缺点
• 路由器的功能
• 路由算法
• 路由就是路径(route),是数据包从源地址发送到目标地址的线路。
• 当客户机申请了一个主机地址之后,系统首先进行域名解析,解析到 IP 地址之后,再发送
数据包,如果发现目的地址是本子网的成员,则直接按照 ARP 协议把数据包发送到该地址。
如果发现目的地址不是同一子网内的计算机,则把整个数据包发送到默认网关,再由网关把
数据包发送到目标地址,这称为转发。具有转发功能的计算机通常称为路由器。
• 路由器是在网络层进行协议转换,并且按照到达目的地址的路径进行报文转发的设备。
• 在互联网络上,拥有直接物理连接的两台机器(即处于同一网络上)可以直接通信。不同网
络上的两台机器进行通信时,必须沿着一定的路径才能到达,这条路径就称为 IP 路由。

路由器的原理与作用

• 路由器(Router)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络
或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器来完成。因此,路由
器具有判断网络地址和选择路径的功能,它能在多网络互联环境中,建立灵活的连接,可用
完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信
息,属网络层的一种互联设备。它不关心各子网使用的硬件设备,但要求运行与网络层协议
相一致的软件。
• 一般说来,异种网络互联与多个子网互联都应采用路由器来完成。
• 路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效
地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了
完成这项工作,在路由器中保存着各种传输路径的相关数据——路径表(Routing Table),供
路由选择时使用。路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名
字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由
器自动调整,也可以由主机控制。

1 -- 1
Lesson5 Linux 下的路由器和防火墙

• 路由表一共有两类:
• 1.静态路由表:由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般
是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。
• 2.动态路由表:动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路
由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行
情况,在需要时自动计算数据传输的最佳路径。
• 通过动态路由,路由器彼此通信,交换路由信息并维护其路由表,路由更新信息通常包含全
部或部分路由表,通过分析来自其它路由器的路由更新信息,该路由器可以建立网络拓扑细
图。路由器间发送的另一个信息例子是链接状态广播信息,它通知其它路由器发送者的链接
状态,链接信息用于建立完整的拓扑图,使路由器可以确定最佳路径。
• IP 数据报在互联网络中的传送可以形象地比喻为“传送接力棒”。每台机器,每个路由器(网
关)将 IP 数据报转发至下一个节点(next hop)。下一个节点可能是主机或网关,至于下一
个节点以后沿什么路径传送,则由下一节点决定。
• 寻找 IP 路由的过程,称为 IP 寻径,在互联网上的主机或网关中,寻径是通过路由表实现的,
路由表具有如下基本结构(实际上还有其它一些信息):目的 下一节点(nex thop)
• 目的/下一节点地址对告知路由器到达该目的最佳方式是把分组发送给代表“下一节点”的路
由器,当路由器收到一个分组,它就检查其目标地址,尝试将此地址与其“下一节点”相联系。
寻径表中指明了要到达目的网络的 IP 数据报转发到哪一个节点,如果在寻径表中未指定这
条路径,则 IP 数据报将无法转发。

路由器的优缺点

• 路由器的优点有如下几个方面
适用于大规模的网络;
复杂的网络拓扑结构,负载共享和最优路径;
能更好地处理多媒体;
安全性高;
隔离不需要的通信量;
节省局域网的频宽;
减少主机负担。
• 路由器同样有缺点,例如
它不支持非路由协议;
安装复杂;
价格高。

路由器的功能

• 路由器的主要功能有如下几点:
在网络间截获发送到远地网段的报文,起转发的作用。
选择最合理的路由,引导通信。为了实现这一功能,路由器要按照某种路由通信协
议,查找路由表,路由表中列出整个互联网络中包含的各个节点,以及节点间的路

2 -- 2
Lesson5 Linux 下的路由器和防火墙

径情况和与它们相联系的传输费用。如果到特定的节点有一条以上路径,则基于预
先确定的准则选择最优(最经济)的路径。由于各种网络段和其相互连接情况可能
发生变化,因此路由情况的信息需要及时更新,这是由所使用的路由信息协议规定
的定时更新或者按变化情况更新来完成。网络中的每个路由器按照这一规则动态地
更新它所保持的路由表,以便保持有效的路由信息。
多协议的路由器可以连接使用不同通信协议的网络段,作为不同通信协议网络段通
信连接的平台。
路由器的主要任务是把通信引导到目的地网络,然后到达特定的节点站地址。后一
个功能是通过网络地址分解完成的。例如,把网络地址部分的分配指定成网络、子
网和区域的一组节点,其余的用来指明子网中的特别站。分层寻址允许路由器对有
很多个节点站的网络存储寻址信息。
路由器在转发报文的过程中,为了便于在网络间传送报文,按照预定的规则把大的
数据包分解成适当大小的数据包,到达目的地后再把分解的数据包包装成原有形式。

路由算法

• 路由算法就是寻找路由的计算方法。一个好的路由算法必须具有如下的特征:
最优化:指路由算法选择最佳路径的能力。
简洁性:算法设计简洁,利用最少的软件和开销,提供最有效的功能。
坚固性:路由算法处于非正常或不可预料的环境时,如硬件故障、负载过高或操作
失误时,都能正确运行。由于路由器分布在网络联接点上,所以在它们出故障时会
产生严重后果。最好的路由器算法通常能经受时间的考验,并在各种网络环境下被
证实是可靠的。
快速收敛:收敛是在最佳路径的判断上所有路由器达到一致的过程。当某个网络事
件引起路由可用或不可用时,路由器就发出更新信息。路由更新信息遍及整个网络,
引发重新计算最佳路径,最终达到所有路由器一致公认的最佳路径。收敛慢的路由
算法会造成路径循环或网络中断。
灵活性:路由算法可以快速、准确地适应各种网络环境。例如,某个网段发生故障,
路由算法要能很快发现故障,并为使用该网段的所有路由选择另一条最佳路径。

• 路由算法的实施过程如下:
在本地局域网中查找目标主机:系统核心从 IP 数据包里提取目标主机的 IP 地址并计
算目标主机的网络号码,然后把该目标网络号与所有本地接口的网络号码相比较。
如果目标网络号码与本地网络号码相匹配,核心则把包封装并通过匹配的本地接口
发送该数据包。
在路由表中查找匹配的主机 IP 地址:如果在本地接口中,没有网络号码与目标网络
号码匹配,核心将在路由表中查找匹配的计算机的 IP 地址。
在路由表中查找匹配的网络号码:如果没有特定的主机 IP 地址与目标的 IP 地址相匹
配,则核心在路由表中查找匹配的网络号码,如果找到了,核心把包的以太网地址
设置成与路由表中匹配的记录相关的路由器的以太网地址。在完成包的封装以后,
目标的 IP 地址没有改变,这样下一个路由器可以再执行路由算法。
在路由表中查找一个缺省路由:如果在路由表中没有找到匹配的网络号码,则核心

3 -- 3
Lesson5 Linux 下的路由器和防火墙

在路由表中查找缺省路由。如果找到了,核心将把包封装,把目标以太网地址设置
为缺省路由器的以太网地址,而不改变目标的 IP 地址。然后通过与缺省路由器连接
的本地网络接口发送数据包。没有通向主机的路由,则产生 ICMP 出错信息。如果
没有找到匹配的地址,也没有在路由表中找到缺省的路由器,核心不能转发包,则
通过 ICMP 产生出错信息。其内容是“No route to host”或“network is unreachable”。

路由协议

• BGP 协议
• RIP 协议
• OSPF 协议
• IS-IS 协议
• EGP 协议
• EIGRP 协议
• 在介绍路由协议之前,首先介绍几个概念。
• 自治系统:自治系统称为 Autonomous System,缩写为 AS,自治系统(AS)是由于技术、
网络管理、行政和商业上的原因被划分到一个组的网关的集合。一般的,在一个自治系统中,
拥有相同的选路策略,并且是在同一技术管理部门下运行的一组路由器构成的。一个自治系
统,必须由一个管理机构来进行统一的登记,并分配一定的编号。
• 内部网关协议:一个在 AS 内部使用的路由表协议叫做内部网关协议,也称作 IGP,即 Internal
Gateway Protocal。
• 外部网关协议:与内部网关协议相对应,一个在 AS 之间使用的路由表协议叫做外部外部网
关协议,也称为 EGP,即 External Gateway Protocol。

EGP 协议

• 第一代广为使用的外部路由协议就是 EGP(外部网关协议) 。EGP 可以提供动态连通性,但


是要求所有连接的自治系统都必须采用树形结构,这在 Internet 发展的初期还是可以使用的。
但是随着网络的发展,它变得有点不适应了。
• 虽然 EGP 是一种动态路由协议,但是其设计原理非常简单,没有采用任何形式的度量标准,
因而也就无法真正做出智能化的路由决定。由于 EGP 协议已经无法满足当今复杂网络的需
要,因此正逐渐被另一种协议 BGP 所替代。

BGP 协议

• BGP 的开发是为了克服 EGP 的某些限制。


• 众所周知,Internet 是一个非常大的网络,其规模跨越整个世界,为了使 Internet 保持连通性,
需要动态路由协议保证路由信息的正确交换。外部网关协议(EGP)的创建是为了控制路由
表的扩展以及通过把 Internet 划分成独立的管理区以便为 Internet 提供更加结构化的模式,这

4 -- 4
Lesson5 Linux 下的路由器和防火墙

些具有自己独立的选路策略的管理区称为自治系统(AS)。
• 通过把世界划分成管理机构,我们就能够拥有一个被分成小的、更易管理的网络的大型网络
Internet。这些小网络就称为 AS,现在可以有它们自己的一套规则和策略,能够把自己和其
他 AS 唯一地区别开来。每个 AS 运行自己的一套 IGP,与其他 AS 中的 IGP 无关。各 AS 之
间通过 EGP 来交换选路信息,从而确保整个 Internet 的互通。
• BGP 是外部网关协议的一种,用来在 AS 之间传递选路信息。它属于路径向量协议,即 BGP
路由信息带有一个 AS 号码的序列,它指出一条路由通过的路径。BGP 使用 TCP 作为它的
传输协议,端口号为 179,这保证了所有的传送可靠性。
• BGP 没有对基础 Internet 拓扑施加任何限制。它假定自治系统内部的选路已经通过自治系统
内的选路协议完成。基于在 BGP 相邻体之间交换的信息,BGP 构造出一个自治系统图。在
BGP 看来,整个 Internet 就是一个 AS 图,每个 AS 用 AS 号码来区别。两个 AS 之间的连接
形成一个路径,路径信息的汇集形成到达特定目的地的路由。BGP 确保无循环域间环路。
• 两个 BGP 路由器为了交换选路信息,必须先建立 BGP 连接,建立 BGP 连接的两个路由器
就称为对等体或邻居。BGP 连接是逻辑上的连接,是建立在 TCP 连接基础上的。BGP 连接
根据两个路由器的所属的 AS 是否相同分为 EBGP 连接和 IBGP 连接,不同 AS 间的连接叫
外部 BGP 连接(EBGP),同一 AS 内部的 BGP 连接叫内部 BGP 连接(IBGP)。
• 对等体路由器建立 TCP 连接后先交换 OPEN 报文以确认连接参数,例如两个对等体间的运
行版本,如果对等体之间有什么不一致,就会有差错通知 NOTIFICATION 报文发送,这个
对等体连接就不会建立。
• BGP 连接建立之初,所有的 BGP 路由都通过 UPDATE 报文被交换。以后当网络信息改变时,
就发送增量更新,仅发送变化的路由。这样可以节省 CPU 的开销和带宽的占用。
• 在一对 BGP 路由器之间,路由以 UPDATE 报文通告。UPDATE 报文中包括一个<长度,前
缀>的列表,它表示通过每个系统可到达的目的地列表。UPDATE 报文还包括路径属性,用
来描述路由的具体属性。如果路由失效了,BGP 就会通过撤销无效路由来告知它的邻居。撤
销的路由是 UPDATE 报文的一部分,它们是不能再使用的路由。
• KEEPALIVE 报文在 BGP 相邻体之间周期的发送,以确保连接有效。任何时候,BGP 发现
对方的报文有错,都通过发送 NOTIFICATION 报文来通知对方,并拆除 BGP 连接。

RIP 协议

• RIP(RoutingInformationProtocol)协议基于一个被称为“routed”的程序,该程序运行在 BSDI
版本的 Unix 系统之上,并在 1988 年被标准化在 RFC1058 中。而在 RFC1388 中所描述的版
本 2 中,增加了对 VLSM(VariableLengthSubnetMasks,可变长子网屏蔽)的支持,但没有
弥补该协议的主要缺陷。例如,在有多重路径到相同目标的网络中,RIP 确定使用一条可选
择的路径将花费许多时间,在没有多重路径的网络中,RIP 协议已经被广泛使用。
• RIP 协议被列为距离矢量协议,这意味着它使用距离来决定最佳路径,如通过路由跳数来衡
量。路由器每 30 秒互相发送广播信息。收到广播信息的每个路由器增加一个跳数。如果广
播信息经过多个路由器收到,到这个路由器具有最低跳数的路径是被选中的路径。如果首选
的路径不能正常工作,那么具有较高跳数的路径被作为备份。
• 对于 RIP 协议(和其他路由协议),网络上的路由器在一条路径不能用时必须经历决定替代
路径的过程,这个过程称为收敛(Convergence) 。RIP 协议花费大量的时间用于收敛是个主
要的问题。在 RIP 协议认识到路径不能达到前,它被设为等待,直到它已错过 6 次更新总共
180 秒时间。然后,在使用新路径更新路由表前,它等待另一个可行路径的下一个信息的到

5 -- 5
Lesson5 Linux 下的路由器和防火墙

来。这意味着在备份路径被使用前至少经过了 3 分钟,这对于多数应用程序超时是相当长的
时间。
• RIP 协议的另一个基本问题是,当选择路径时它忽略了连接速度问题。例如,如果一条由所
有快速以太网连接组成的路径比包含一个 10Mbps 以太网连接的路径远一个跳数,具有较慢
10Mbps 以太网连接的路径将被选定作为最佳路径。
• RIP 协议的原始版本不能应用 VLSM,因此不能分割地址空间以最大效率地应用有限的 IP
地址。RIP2 协议通过引入子网屏蔽与每一路由广播信息一起使用实现了这个功能。
• 路由协议还应该能防止数据包进入循环,或落入路由选择循环,这是由于多余连接影响网络
的问题。RIP 协议假定如果从网络的一个终端到另一个终端的路由跳超过 15 个,那么一定
牵涉到了循环。因此当一个路径达到 16 跳,将被认为是达不到的。显然,这限制了 RIP 协
议只能在网络上的使用。
• RIP 的最大问题涉及到具有多余路径的较大网络。如果网络没有多余的路径,RIP 协议将很
好地工作,它是被几乎每个支持路径选择的厂商实施的 Internet 标准。RIP 协议适用于多数
服务器操作系统,它的配置和障碍修复非常容易。对于规模较大的网络,或具有多余路径的
网络,应该考虑使用其它路由协议。

OSPF 协议

• OSPF 是类似 RIP 协议的 Internet 标准,可以弥补 RIP 协议的缺点。1991 年在 RFC1247 中它


被第一次标准化;最新的版本是在 RFC2328 中。但是与 RIP 协议不同,OSPF 是一套链路状
态路由协议,这意味着路由选择的变化基于网络中路由器物理连接的状态与速度,并且变化
被立即广播到网络中的每一个路由器。
• 当一个 OSPF 路由器第一次被激活,它使用 OSPF 的“hello 协议”来发现与它连接的邻节点,
然后用 LSA(链路状态广播信息)等和这些路由器交换链路状态信息。每个路由器都创建了
由每个接口、对应邻节点和接口速度组成的数据库。每个路由器从邻接路由器收到的 LSA
被继续向各自的邻接路由器传递,直到网络中的每个路由器收到了所有其它路由器的 LSA。
• 链路状态数据库不同于路由表,根据数据库中的信息,每个路由器计算到网络的每一目标的
一条路径,创建以它为根的路由拓扑结构树,其中包含了形成路由表基础的最短路径优先树
(SPF 树)。LSA 每 30 分钟被交换一次,除非网络拓扑结构有变化。例如,如果接口变化,
信息立刻通过网络广播;如果有多余路径,收敛将重新计算 SPF 树。计算 SPF 树所需的时
间取决于网络规模的大小。因为这些计算,路由器运行 OSPF 需要占用更多 CPU 资源。
• 一种弥补 OSPF 协议占用 CPU 和内存资源的方法是将网络分成独立的层次域,称为区域
(Area)。每个路由器仅与它们自己区域内的其它路由器交换 LSA。Area0 被作为主干区域,
所有区域必须与 Area0 相邻接。在 ABR(区域边界路由器,AreaBorderRouter)上定义了两
个区域之间的边界。ABR 与 Area0 和另一个非主干区域至少分别有一个接口。最优设计的
OSPF 网络包含通过 VLSM 与每个区域邻接的主干网络。这使得在路由表的一个条目中描述
多个网络成为可能。
• 虽然 OSPF 协议是 RIP 协议强大的替代品,但是它执行时需要更多的路由器资源。如果网络
中正在运转的是 RIP 协议,并且没有发生任何问题,仍然可以继续使用。但是如果想在网络
中利用基于标准协议的多余链路,OSPF 协议是更好的选择。

6 -- 6
Lesson5 Linux 下的路由器和防火墙

IS-IS 协议

中间系统到中间系统(IS-IS)也是一个基于链路状态的路由协议,它是由为 OSI 网络开发的,已经


提供了对 TCP/IP 网络的支持。它与 OSPF 的概念比较相似,但是它目前还没有被广泛的使用。

EIGRP 协议

• 在 Cisco 公司的产品中,EIGRP(EnhancedInteriorGatewayRontingProtocol)协议具有一些优
势。最重要的是它能迅速广播链路状态的变化。但 EIGRP 协议的最大缺点是没有标准化。
• 与 OSPF 协议一样,EIGRP 路由器寻找它们的邻接路由器并交换“hello”数据包。EIGRP 协议
每隔 5 秒传送“hello”数据包。如果失败 3 次,邻接路由器则被认为是宕机状态,替代的路径
将被使用。
• 当本地路由器的链路状态发生变化,在新信息基础上它将重新计算拓扑结构表。OSPF 协议
此时将立即向网络中的每个路由器广播链路状态的变化,而 EIGRP 协议将仅仅涉及到被这
些变化直接影响的路由器。这使带宽和 CPU 资源的利用效率更高。同时,由于 EIGRP 协议
使用了不到 50%的带宽,使得在低带宽 WAN 链路上具有很大优势。EIGRP 协议的另一个优
势是它支持 Novell/IPX 和 AppleTalk 环境。如果网络正在运行的是 IGRP 协议,那么转换到
EIGRP 协议比转换到 OSPF 协议要容易的多。
• 在 BDCOM 系列路由器中,实现了 BDCOM IGP,这个协议能够充分与 EIGRP 兼容、互通,
达到交换路由的目的。

7 -- 7
Lesson5 Linux 下的路由器和防火墙

使用 Linux 构建路由器

• Route 命令
• 搭建路由器

Route 命令

• route 命令是 linux 下处理静态路由的命令。

• 1. 打印静态路由表。
在命令行上输入一个不带任何参数的 route 命令,将打印系统中的静态路由表。例如,
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0

在输出结果中,Destination 表示目标的网络地址,Gateway 表示通向该网络所使用的网关,


genmask 表示该网络的网络掩码,Flags 是标识,metric 是路径向量,ref 是参考内容,use 是
使用情况,iface 表示连接该网关的网络接口。最后一条表示系统的默认网关,即缺省路由。

• 2. 增加一个静态路由。

增加静态路由的选项是 add,例如要增加一条到 192.56.76.0 的路由,可以使用下面的命令格式:


route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
add:增加路由记录的主要选项。
-net:定义目标网络的网络地址。
netmask:定义目标网络的网络掩码。
dev:指定连接指定网络的网络接口。

• 3. 增加默认网关
可以使用如下的命令增加默认网关 ,设网关的 IP 地址是 192.168.0.1
route add default gw 192.168.0.1

• 4. 删除一条路由记录

8 -- 8
Lesson5 Linux 下的路由器和防火墙

route 命令还可以删除路由表中的一条静态路由,在上例中,要删除 192.168.0.0 的这条记录,


可以执行如下命令
route del -net 192.168.0.0 netmask 255.255.255.0

• 5. 删除默认网关
使用如下命令可以删除默认网关记录
route del default gw 192.168.0.1

搭建路由器

• 网络结构如图,Linux 路由器这台计算机标识为 A,它与三个网段相连,192.168.1.0/24,


10.0.0.0/8,172.16.0.0/16。

• A 计算机必须拥有三块网卡,分别与三个网段相连。假设 eth0 与 172.16.0.0 相连,eth1 与


10.0.0.0 相连,eth2 与 192.168.1.0 相连。
• 首先来配置 eth0。给这个网络接口分配地址 172.16.1.1,运行下列命令:
# ifconfig eth0 172.16.1.1 netmask 255.255.0.0
• 为了使这个地址不再计算机重新启动后消失,编辑/etc/sysconfig/network-scripts/ifcfg-eth0 文
件,修改为如下格式:
DEVICE = eth0
ONBOOT = yes
BOOTPROTO = none

9 -- 9
Lesson5 Linux 下的路由器和防火墙

BROADCAST = 172.16.255.255
NETWORK = 172.16.0.0
NETMASK = 255.255.0.0
IPADDR = 172.16.1.1
USERCTL = no

• 增加一条静态路由:
# route add -net 172.16.0.0 netmask 255.255.0.0

• 这样系统中就增加了一条静态路由:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0

• 接下来,配置 eth1,eth1 与 10.0.0.0 网段相连,分配给它的地址是 10.254.254.254,使用 ifconfig


命令为它配置参数:
# ifconfig eth1 10.254.254.254 netmask 255.0.0.0

• 同样编辑/etc/sysconfig/network-scripts 目录下的 ifcfg-eth1 文件,内容如下:


DEVICE = eth1
ONBOOT = yes
BOOTPROTO = none
BROADCAST = 10.255.255.255
NETWORK = 10.0.0.0
NETMASK = 255.0.0.0
IPADDR = 10.254.254.254
USERCTL = no

• 再增加一条静态路由:
# route add -net 10.0.0.0 netmask 255.0.0.0

• 网络中当前的路由表为
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 0 eth1

• 最后配置 eth3,它连接 192.168.1.0 网段,分配的 IP 地址是 192.168.1.254,执行下列命令:


# ifconfig eth2 192.168.1.254 netmask 255.255.255.0

• 编辑/etc/sysconfig/network-scripts 目录下的 ifcfg-eth2 文件,内容如下:

10 -- 10
Lesson5 Linux 下的路由器和防火墙

DEVICE = eth2
ONBOOT = yes
BOOTPROTO = none
BROADCAST = 192.168.1.255
NETWORK = 192.168.1.0
NETMASK = 255.255.255.0
IPADDR = 192.168.1.254
USERCTL = no

• 再增加一条静态路由:
# route add -net 192.168.1.0 netmask 255.255.255.0

• 这样网络中就有三条静态路由记录了:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth2

• 还要为系统增加一条缺省路由,因为缺省的路由是把所有的数据包都发往它的上一级网关
(假设地址是 172.16.1.99,这个地址依赖于使用的网络而定,由网络管理员分配),因此增
加如下的缺省路由记录:
# route add default gw 172.16.1.99

• 这样系统的静态路由表建立完成,它的内容是
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
default 172.16.1.99 0.0.0.0 UG 0 0 0 eth0

• 最后一步,要增加系统的 IP 转发功能。这个功能由/proc/sys/net/ipv4 目录下的 ip_forward 文


件控制,执行如下命令打开 ip 转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward

• 这样我们的路由器基本上是配置好了

• 测试路由器的工作情况。
• 在 linux 路由器上测试:

11 -- 11
Lesson5 Linux 下的路由器和防火墙

第一步,测试自身网络是否工作正常,执行如下命令
ping 172.16.1.1
ping 192.168.1.254
ping 10.254.254.254
如果这些地址都能 ping 通,则第一步通过,否则查找原因,排除错误。
第二步,测试与上一级网关之间是否连通
ping 172.16.1.99
如果通畅,则正常;否则查找错误原因。

• 在 192.168.1.0 网络内测试,假设它的地址是 192.168.1.1,


第一步,测试自身是否工作正常,
ping 192.168.1.1
第二步,测试与网关是否连通,
ping 192.168.1.254
第三步,测试与 10.254.254.99 是否连通,这是 10.0.0.0 网段内的一台计算机
ping 10.254.254.99
第四步,测试与外网地址是否连通
ping 172.16.1.99
如果连通了,表示路由器配置正确,否则,查找原因,并排除之。

12 -- 12
Lesson5 Linux 下的路由器和防火墙

防 火 墙

• 防火墙的功能
• 防火墙的技术分类
• IP 防火墙链
• 使用 iptables 设置防火墙规则

防火墙

• 防火墙是在计算机上设立的防止一个内部网络与公共网络直接访问的一种机制,充当防火墙
的计算机既可以直接访问被保护的网络,也可以直接访问外网,而被保护的网络不能直接访
问外网,外网也不能直接访问内部网络。
• 防火墙有时指的是能够实现访问控制的软件,有时也指安装了这种软件的硬件设备。本课主
要针对防火墙在软件方面的机制,以及如何使用 Linux 构建一个可以作为防
火墙设备的系统。
• 因为安装防火墙软件的设备通常也充当网关的作用,因此我们把它放在这一章讲解。

13 -- 13
Lesson5 Linux 下的路由器和防火墙

防火墙的功能

• 防火墙的主要功能有如下几点:
防火墙是网络安全的屏障:一个防火墙(作为阻塞点、控制点)能极大地提高一个
内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择
的应用协议才能通过防火墙,所以网络环境变得更安全。
防火墙可以强化网络安全策略:通过以防火墙为中心的安全方案配置,能将所有安
全软件(如口令、加密、身份认证、审计等)配置在防火墙上。与将网络安全问题
分散到各个主机上相比,防火墙的集中安全管理更经济。
对网络存取和访问进行监控审计:如果所有的访问都经过防火墙,那么,防火墙就
能记录下这些访问并作出日志记录,同时也能提供网络使用情况的统计数据。当发
生可疑动作时,防火墙能进行适当的报警,并提供网络是否受到监测和攻击的详细
信息。
防止内部信息的外泄:通过利用防火墙对内部网络的划分,可实现内部网重点网段
的隔离,从而限制了局部重点或敏感网络安全问题对全局网络造成的影响。

防火墙的技术分类

• 防火墙技术可根据防范的方式和侧重点的不同而分为很多种类型,但总体来讲可分为包过
滤、应用级网关和代理服务器等几大类型。
• 数据包过滤型防火墙
数据包过滤(Packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系
统内设置的过滤逻辑,被称为访问控制表(Access Control Table)。通过检查数据流
中每个数据包的源地址、目的地址、所用的端口号、协议状态等因素,或它们的组
合来确定是否允许该数据包通过。
数据包过滤防火墙逻辑简单,网络性能和透明性好,它通常安装在路由器上,因为
路由器是内部网络与 Internet 连接必不可少的设备。
包过滤的优点是不用改动客户机和主机上的应用程序,因为它工作在网络层和传输
层,与应用层无关。但其弱点也是明显的:据以过滤判别的只有网络层和传输层的
有限信息,因而各种安全要求不可能充分满足;在许多过滤器中,过滤规则的数目
是有限制的,且随着规则数目的增加,性能会受到很大地影响;由于缺少上下文关
联信息,不能有效地过滤如 UDP、RPC 一类的协议;另外,大多数过滤器中缺少审
计和报警机制,且管理方式和用户界面较差;对安全管理人员素质要求高,建立安
全规则时,必须对协议本身及其在不同应用程序中的作用有较深入的理解。因此,
过滤器通常是和应用网关配合使用,共同组成防火墙系统。

• 应用级网关型防火墙
应用级网关(Application Level Gateways)是在网络应用层上建立协议过滤和转发功
能。它针对特定的网络应用服务协议使用指定的数据过滤逻辑,并在过滤的同时,
对数据包进行必要的分析、登记和统计,形成报告。数据包过滤和应用网关防火墙
有一个共同的特点,就是它们仅仅依靠特定的逻辑判定是否允许数据包通过。一旦
满足逻辑,则防火墙内外的计算机系统建立直接联系,防火墙外部的用户便有可能
直接了解防火墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。
• 代理服务型防火墙

14 -- 14
Lesson5 Linux 下的路由器和防火墙

代理服务(Proxy Service)也称链路级网关或 TCP 通道(Circuit Level Gateways or TCP


Tunnels),也有人将它归于应用级网关一类。它是针对数据包过滤和应用网关技术存
在的缺点而引入的防火墙技术,其特点是将所有跨越防火墙的网络通信链路分为两
段。防火墙内外计算机系统间应用层的" 链接",由两个终止代理服务器上的“链接”
来实现,外部计算机的网络链路只能到达代理服务器,从而起到了隔离防火墙内外
计算机系统的作用。
此外,代理服务也对过往的数据包进行分析、注册登记,形成报告,同时当发现被
攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。

防火墙链

• 在 Linux 系统上,支持包过滤的内核中有三个规则列表,这些列表称为防火墙链。三个链分
别是输入链、输出链和转发链。当一个数据包通过以太网卡进来以后,系统内核使用输入链
来决定该包的取舍。如果该包没有被舍弃,则核心要决定下面将向哪里发送包,如果要发给
另外一台计算机,则内核通过转发链来决定。最后在包发送之前,要使用输出链控制该包。
• 一个链是一些规则的列表,每个规则规定:如果包的包头与规则相匹配,那么对包进行相应
的处理。如果该规则与包不匹配,则引入链中的下一个规则。最后,如果没有要引入的规则,
内核根据内置链策略决定如何做。

使用 iptables 设置防火墙规则

• iptables 构建的防火墙是一个典型的包过滤防火墙,因此,也有人称它为包过滤器。iptables
是 IP 防火墙管理命令。它用于设置、维护和检查系统核心中的 IP 防火墙规则。这些规则就
是防火墙链。
• 概括起来说,iptables 有下面的三个基本功能:
1. 数据过滤(filter 表)
2. 网络地址转换(nat 表)
3. 数据包处理(mangle 表)
• 每个功能对应一个表,一个表中可以包含若干个规则,这些规则组成一个链,可以说:“防
火墙是表的容器,表是链的容器,链是规则的容器”。
• 一个链其实就是众多规则中的一个检查清单。每一条链中可以有一条或数条规则,每一条规
则都是这样定义的“如果数据包符合这样的条件,就这样处理这个数据包”。当一个数据包到
达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件:如果满足,
系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,
如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数
据包。

• 一个 iptables 命令基本上包含如下五部分:希望工作在哪个表上、希望使用该表的哪个链、
进行的什么操作(插入,添加,删除,修改)、对特定规则的目标动作和匹配数据包条件。
• Iptables 命令的格式是:
iptables -t table -Operation chain -j target match
• 如果没有指定表,缺省使用 filter 表。
• 其中 table 的值可以有三种:

15 -- 15
Lesson5 Linux 下的路由器和防火墙

filter,表示过滤包表;
nat,表示 NAT 表;
mangle,数据包处理表。
• 对链的基本操作有如下几种:
-A,--append,这两个参数的意义是一样的,表示在链尾添加一条规则。
-I, --insert,都表示在链里插入一条或多条规则,插入的时候可以指定规则的标号,
以确定在哪里插入规则,如果没有指定规则的代号,则表示使用第一条规则,即在
链的最前面插入一条规则。
-D, --delete, 表示删除一条规则。
-R, --replace, 替换表里的一条规则。

-L, --list, 列出所有的规则。


-F, --flush, 清空所有的规则。
-N, --new, 产生一个新的用户自定义的链。
-X, --delete-chain, 删除用户自定义的链。
• 基本目标动作有以下几种,它们适用于所有的链(就是 target 参数):
ACCEPT 接收该数据包
DROP 丢弃该数据包
QUEUE 排队该数据包到用户空间
RETURN 在本链中不再继续检查后面的规则,而是直接返回到前面调用的链。
• 其他的参数:
-p,--protocol,指定协议名称,例如 tcp,udp,icmp 等。
-s,--source,指定源地址
-d, --destination,指定目标地址。

• 下面以几个例子说明如何使用 iptables 命令来设置防火墙规则。Iptables 通常安装在具有路由


功能的路由器上。假设有如图的网络结构,linux 路由器有两块网卡,分别连接内网和外网,
内网是 192.168.10.99,外网是 202.101.10.100。

使用 iptables 设置防火墙规则

16 -- 16
Lesson5 Linux 下的路由器和防火墙

• 1.用 iptables 实现 NAT。


在传统的标准的 TCP/IP 通信过程中,所有的路由器仅仅是充当一个中间人的角色,
也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的
说,除了将源 MAC 地址换成自己的 MAC 地址以外,路由器不会对转发的数据包做
任何修改。NAT(Network Address Translation 网络地址翻译)恰恰是出于某种特殊需要
而对数据包的源 ip 地址、目的 ip 地址、源端口、目的端口进行改写的操作。
一般的,公司内部的网络因为 IP 地址匮乏的问题而使用内部 IP 地址,如 192.168.
网段,这样的 IP 地址是不能直接访问 Internet 的,必须给它赋予一个合法的外部 IP
地址,才能正常访问。NAT 就是实现这种功能最简单的办法。在路由器的外部网卡
上绑定一个或者几个合法的 IP 地址,对于内部网络发送的数据包,路由器把目标地
址转化为合法的 IP 地址,发送到 internet 上,返回的数据包再由路由器把目标地址
换成内部主机的 IP 地址,这样就能正常的访问互联网了。
NAT 分成了两种类型,即源 NAT(SNAT)和目的 NAT(DNAT),顾名思义,所谓
SNAT 就是改变转发数据包的源地址,所谓 DNAT 就是改变转发数据包的目的地址。

使用如下的 iptables 命令:


iptables –F
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source
202.101.10.100
第一句是清空已有的 iptables 规则。
第二句:-t nat,指定 nat 表;-A POSTROUTING,指定 nat 表中的 POSTROUTING
链,nat 内置了三个链,PREROUTING,表示在包到来的时候处理的链;OUTPUT,
表 示 转 发 包 时 处 理 的 链 ; POSTROUTING , 表 示 在 发 送 包 之 前 处 理 的 链 。 -s
192.168.100.0/24,指定只处理源地址是 192.168.100.0/24 网段的包,24 表示网络掩码。
-o eth0,表示指定输出的网络接口,即哪个接口与外网相连。-j SNAT,表示对于该
包的目标动作,是作 SNAT 转发。最后一个--to-source 指定一个新的 IP 地址,这个
地址就是包新的源地址。
这样,一条 NAT 防火墙规则就制定好了,用户可以使用它进行 NAT 转换了。

• 2. 实现透明代理
透明代理技术中的透明是指客户端感觉不到代理的存在,不需要在浏览器中设置任
何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺省网
关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器
的代理端口(如 8080),即由本地代理服务器向外请求所需 数据然后拷贝给客户端。
理论上透明代理可以对任何协议通用。
使用透明代理的网络数据包发送线路如图。

17 -- 17
Lesson5 Linux 下的路由器和防火墙

以从内部网络访问因特网上的 web 站点为例,私有网地址为 192.168.1.*,其中客户


机 是 192.168.1.100 , 防 火 墙 机 器 对 内 的 网 卡 是 192.168.1.1 , 对 外 的 网 卡 是
211.99.211.99。透明 web 代理被安装在防火墙机器上并配置端口为 8080。内核使用
iptables 把与防火墙端口 80 的连接重定向到代理服务。私有网上的浏览器(如 Mozilla)
被配置为直接连接方式。私有网络的客户机需要设置 DNS 服务器。私有网络上机器
的缺省网关指向防火墙机器。客户机机器上的 mozilla 访问 202.101.100.100。
1. 浏览器使用端口 1050 与此地址建立一个连接,并向 web 站点发出请求。
2. 当包由客户机(port 1050)通过防火墙送往 202.101.100.100 的 80 端口时,它们
重定向到代理服务的 8080 端口。透明代理使用端口 1025 与 202.101.100.100 的端口
80 建立一个连接。
3. 当代理服务收到从 web 站点传来的页面后,通过已经建立的连接把它复制给用户。
4. 从 202.101.100.100 的角度来看,连接是由防火墙的端口 1025 到自己的端口 80。
从客户机的角度来看,连接是从 192.168.1.100 的端口 1050 连接到 202.101.100.100
的端口 80, 但是,它实际是在与透明代理服务器对话。
这就是透明代理的操作流程。

代理服务器要在路由器上配置好,可以使用 squid,它使用端口 3128,。


增加如下两条 iptables 规则:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports
3128
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to-source
211.99.211.99
第一条语句,-A PREROUTING,设定在转发之前的链;-i eth0,设定接收数据的网
络界面;-p tcp,设定协议是 tcp;-m tcp,扩展的模块;-dport 80,指定目标端口是
80;-j REDIRECT,表示目标动作是重定向;--to-ports 3128,重定向的端口号。
第二条语句,这与上面的语句一样,是进行 NAT 转换的。
这样,透明代理就设置成功了,用户可以毫无障碍的上网了。

18 -- 18

You might also like