IT老兵,爱好胡思乱想、读书和交流,2015年底重新回到IT战场,期待再一次“贯穿”。
分类: 系统运维
2008-01-13 15:03:59
linux下的软路由软件包括coyote Linux、LRP、ipcop、smoothwall、ClarkConnect等。coyote Linux绰号“北美土狼”,只需一张软盘就可以做一台专业的路由器;SmoothWall和IPCOP是用一个内核开发的,功能也不相上下。ClarkConnect简称CC,功能比较强大,机器配置要求也高。
这些Linux软路由中带宽管理大多都是TC来实现。
1,Linux防火墙组件
iptable(netfilter)应用程序被认为是Linux中实现包过滤功能的第四代应用程序。第一代是Linux 内核1.1版本所使用的Alan Cox从BSD Unix中移植过来的ipfw。
在2.0版的内核中,Jos Vos和其它一些程序员对ipfw进行了扩展,并且添加了ipfwadm用户工具。在2.2版内核中, Russell和Michael Neuling做了一些非常重要的改进,也就是在该内核中,Russell添加了帮助用户控制过虑规则的ipchains工具。后来,Russell又完成了其名为netfilter()的内核框架。这些防火墙软件套件一般都比其前任有所改进,表现越来越出众。
Netfilter/iptables已经包含在了2.4以后的内核当中,它可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。 netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。netfilter/iptables是从ipchains和 ipwadfm(IP防火墙管理)演化而来的。
2,Linux流量控制组件: TC(traffic Control)
linux内核中提供了流量控制的相关处理功能,相关代码在net/sched目录下,而应用层上的控制是通过iproute2软件包中的tc来实现,tc和sched的关系就好象iptables和netfilter的关系一样,一个是用户层接口,一个是具体实现。
Linux流量控制主要由三大部分来实现:
◆ 队列规则(Queue Discipline)无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的QDisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从QDisc里面取出数据包,把它们交给网络适配器驱动模块。
◆ 分类(Classes)某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。
◆ 过滤器(Filters)filter用于为数据包分类,决定它们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用filter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,直到返回一个判决。如果没有判决返回,就作进一步的处理,而处理方式和QDisc有关。
TC流量控制基本框架
因此,Linux流量控制主要分为建立队列、建立分类和建立过滤器三个方面。基本步骤为:
(1)针对网络物理设备(如以太网卡eth0)绑定一个队列;
(2)在该队列上建立分类;
(3)为每一分类建立一个基于路由的过滤器。
Linux内核中支持的队列有Class Based Queue、Token Bucket Flow令牌桶、CSZ、First In First Out、Priority、TEQL、SFQ、ATM、RED等。
关于tc的使用方法可详见《Linux高级路由和流量控制》。重点是队列规定树结构、各算法的参数。参考资料中的《Linux内核中流量控制》对tc代码做了比较详细的注释,值得学习。