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