Linux 的高级路由和流量控制 HOWTO 
中文版 
 
 
 
 
1 
 
Bert Hubert 
 
Netherlabs BV 
bert.hubert@netherlabs.nl 
Gregory Maxwell (章节作者)   
remco%virtu.nl 
 
Remco van Mook (章节作者)   
remco@virtu.nl 
 
Martijn van Oosterhout (章节作者)   
kleptog@cupid.suninternet.com 
 
Paul B Schroeder (章节作者)   
paulsch@us.ibm.com 
 
Jasper Spaans (章节作者)   
jasper@spaans.ds9a.nl 
 
Pedro Larroy (章节作者)   
piotr%omega.resa.ed 
 
一个非常上手的关于 iproute2、流量整形和一点 netfilter 的指南。 
 
2 
 
 
译者序 
可以说,翻译这篇文档的过程就是我重新学习 Linux 的过程。与原文的作者感受
相似,当我根据这篇文档大致了解了 Linux 在 IP 方面的功能后,绝对是“it really 
blew  me  away!”。才发现我以前一直是把 Linux 当成 UNIX 来用,Linux 本身很
多精彩的功能都被我忽略了。 
看来 Linux 在路由方面的设计的确非常独到。 
但愿这篇文章的内容能够对您应用 Linux 有所帮助。 
本文档的原作实际上还尚未完成,估计要等到 Linux 的 2.6 版内核发布之后才能
最终定稿。但是我已经等不及了,非常希望尽快与各位共享这篇文档。如果这篇
文档的原作完成,我会尽力追踪翻译。 
这里是本 HOWTO 的正规出处。 
由于本人的英语和语文都是业余水平,有两三处晦涩或者与技术无关的内容没有
翻译,希望英语高手予以指点。如有词不达意甚至理解错误之处,非常渴望您能
通过 Email 告知!谢谢! 
2/15/2003 5:28 PM  译毕 
JohnBull  
 
3 
目录 
 
第 1 章  贡献 
第 2 章  简介 
2.1.  除外责任与许可 
2.2.  预备知识 
2.3. LINUX 能为你做什么 
2.4.  内务声明 
2.5.  访问、CVS 和提交更新 
2.6.  邮件列表 
2.7.  本文档的布局 
第 3 章  介绍  IPROUTE2 
3.1  为什么使用  IPROUTE2? 
3.2 IPROUTE2  概览 
3.3  先决条件 
3.4  浏览你的当前配置 
3.4.1.  让ip 显示我们的链路 
3.4.2.  让ip 显示我们的  IP  地址 
3.4.3.  让ip 显示路由 
3.5. ARP 
第 4 章  规则——路由策略数据库 
4.1.  简单的源策略路由 
4.2.  多重上连 ISP 的路由 
4.2.1.  流量分割 
4.2.2.  负载均衡 
第 5 章  GRE  和其他隧道 
5.1.  关于隧道的几点注释 
5.2. IP-IN-IP  隧道 
5.3. GRE  隧道 
 
4 
1 
2 
2 
2 
3 
3 
4 
4 
4 
6 
6 
6 
6 
7 
7 
7 
8 
9 
11 
11 
12 
13 
14 
15 
15 
15 
16 
 
5.3.1. IPv4 隧道 
5.3.2. IPv6 隧道 
5.4.  用户级隧道 
第 6 章  用 CISCO 和 6BONE 实现 IPV6 隧道 
6.1. IPV6 隧道 
第 7 章  IPSEC:INTERNET 上安全的 IP 
7.1.  从手动密钥管理开始 
7.2.  自动密钥管理 
7.2.1.  理论 
7.2.2.  举例 
7.2.3.  使用X.509 证书进行自动密钥管理 
7.3. IPSEC 隧道 
7.4.  其它 IPSEC 软件 
7.5. IPSEC 与其它系统的互操作 
7.5.1. Windows 
第 8 章  多播路由 
第 9 章  带宽管理的队列规定 
9.1.  解释队列和队列规定 
9.2.  简单的无类队列规定 
9.2.1. pfifo_fast 
9.2.2.  令牌桶过滤器(TBF) 
9.2.3.  随机公平队列(SFQ) 
9.3.  关于什么时候用哪种队列的建议 
9.4.  术语 
9.5.  分类的队列规定 
9.5.1.  分类的队列规定及其类中的数据流向 
9.5.2.  队列规定家族:根、句柄、兄弟和父辈 
9.5.3. PRIO 队列规定 
9.5.4.  著名的CBQ 队列规定 
9.5.5. HTB(Hierarchical Token Bucket,  分层的令牌桶) 
 
16 
18 
18 
19 
19 
22 
22 
25 
26 
26 
29 
32 
33 
33 
33 
34 
36 
36 
37 
37 
39 
41 
42 
43 
45 
45 
45 
46 
48 
54 
5 
 
9.6.  使用过滤器对数据包进行分类 
9.6.1.  过滤器的一些简单范例 
9.6.2.  常用到的过滤命令一览 
9.7. IMQ(INTERMEDIATE QUEUEING DEVICE,中介队列设备) 
9.7.1.  配置范例 
第 10 章  多网卡的负载均衡 
10.1.  告诫 
10.2.  其它可能性 
第 11 章  NETFILTER 和 IPROUTE——给数据包作标记 
第 12 章  对包进行分类的高级过滤器 
12.1. U32 分类器 
12.1.1. U32 选择器 
12.1.2.  普通选择器 
12.1.3.  特殊选择器 
12.2.  路由分类器 
12.3.  管制分类器 
12.3.1.  管制的方式 
12.3.2.  越限动作 
12.3.3.  范例 
12.4.  当过滤器很多时如何使用散列表 
第 13 章  内核网络参数 
13.1.  反向路径过滤 
13.2.  深层设置 
13.2.1. ipv4 一般设置 
13.2.2.  网卡的分别设置 
13.2.3.  邻居策略 
13.2.4.  路由设置 
第 14 章  不经常使用的高级队列规定 
14.1. BFIFO/PFIFO 
14.1.1.  参数与使用 
 
6 
55 
56 
57 
58 
58 
60 
61 
61 
62 
64 
65 
65 
66 
67 
67 
68 
68 
69 
70 
70 
72 
72 
73 
73 
78 
79 
80 
82 
82 
82 
14.2. CLARK-SHENKER-ZHANG 算法  (CSZ) 
 
14.3. DSMARK 
14.3.1.  介绍 
14.3.2. Dsmark 与什么相关? 
14.3.3. Differentiated Services 指导 
14.3.4.  使用Dsmark 
14.3.5. SCH_DSMARK 如何工作 
14.3.6. TC_INDEX 过滤器 
14.4.  入口队列规定 
14.4.1.  参数与使用 
14.5. RED(RANDOM EARLY DETECTION,随机提前检测) 
14.6. GRED(GENERIC RANDOM EARLY DETECTION,一般的随机提前检测) 
14.7. VC/ATM 模拟 
14.8. WRR(WEIGHTED ROUND ROBIN,加权轮转) 
第 15 章  方便菜谱 
15.1.  用不同的 SLA 运行多个网站。 
15.2.  防护 SYN 洪水攻击 
15.3.  为防止 DDOS 而对 ICMP 限速 
15.4.  为交互流量设置优先权 
15.5.  使用 NETFILTER、IPROUTE2 和 SQUID 实现 WEB 透明代理 
15.5.1.  实现之后的数据流图 
15.6.  与 PMTU 发现有关的“基于路由的 MTU 设置” 
15.6.1.  解决方案 
15.7.  与 PMTU 发现有关的 MSS 箝位(给 ADSL,CABLE,PPPOE 和 PPTP 用户) 
15.8.  终极的流量控制:低延迟、高速上/下载 
15.8.1.  为什么缺省设置不让人满意 
15.8.2.  实际的脚本(CBQ) 
15.8.3.  实际的脚本(HTB) 
15.9.  为单个主机或子网限速 
15.10.  一个完全 NAT 和 QOS 的范例 
 
82 
83 
83 
83 
84 
84 
84 
85 
87 
87 
87 
88 
89 
89 
90 
90 
90 
91 
92 
93 
96 
96 
97 
98 
98 
99 
100 
102 
103 
104 
7 
104 
106 
107 
108 
109 
109 
109 
109 
110 
110 
112 
112 
113 
113 
115 
117 
119 
120 
 
15.10.1.  开始优化那不多的带宽 
15.10.2.  对数据包分类 
15.10.3.  改进设置 
15.10.4.  让上面的设置开机时自动执行 
第 16 章  构建网桥以及用 ARP 代理构建伪网桥 
16.1.  桥接与 IPTABLES 的关系 
16.2.  桥接与流量整形 
16.3.  用 ARP 代理实现伪网桥 
16.3.1. ARP 和ARP 代理 
16.3.2.  实现 
第 17 章  动态路由——OSPF 和 BGP 
17.1.  用 ZEBRA 设置 OSPF 
17.1.1.  必要条件 
17.1.2.  配置Zebra 
17.1.3.  运行Zebra 
第 18 章  其它可能性 
第 19 章  进一步学习 
第 20 章  鸣谢 
 
 
8