Linux的高级路由和流量控制:Netfilter和iproute

迄今为止我们已经了解了iproute是如何工作的,并且多次提到了netfilter。这里,你正好可以趁机看一看Rusty出名地不可靠的指南. Netfilter本身可以在这里找到。

Netfilter可以让我们进行包过滤或者篡改数据包头。有一个特别的功能就是我们可以给数据包打上一个数字标记。使用--set-mark机制就可以。

例如,这个命令把所有发往25/tcp(发出邮件)的数据包都打上了标记:

# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 \
-j MARK --set-mark 1

比如说,11545.html">我们有多个连接,一个是按流量计费的,比较贵但是很快,另一个是包月的,但是比较慢。我们当然愿意让发送电子邮件的数据包走那条比较便宜的路由。

我们已经给那些数据包打上了标记“1”,我们现在命令路由策略数据库实现这个功能:

# echo 201 mail.out >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table mail.out
# ip rule ls
0: from all lookup local
32764: from all fwmark 1 lookup mail.out
32766: from all lookup main
32767: from all lookup default

现在我们建立一个通往那条便宜链路的路由,从而生成mail.out路由表:

# /sbin/ip route add default via 195.96.98.253 dev ppp0 table mail.out

这就做完了。我们可能需要一些例外,有很多方法都能达到目的。我们可以修改netfilter命令来排除一些主机,也可以插入一些优先权值更低的规则把需要排除的主机的数据包发往main路由表。

我们还可以通过识别数据包的TOS位,来给不同服务类型的数据包打上不同的标记,再为它们分别建立规则。你甚至可以利用这种方法让诸如ISDN线路支持交互业务。

不用说,这当然也可以用于正在进行NAT(“伪装”)的机器上。

重要提醒:我们收到报告说MASQ和SNAT功能与数据包标记有冲突。Rusty Russell在这个帖子中作了解释。关闭反方向的过滤就可以正常工作。

注意:想给数据包打标记的话,你的内和需要一些配置:

IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?]
IP: policy routing (CONFIG_IP_MULTIPLE_TABLES) [Y/n/?]
IP: use netfilter MARK ">value as routing key (CONFIG_IP_ROUTE_FWMARK) [Y/n/?]

时间: 2024-09-30 05:43:27

Linux的高级路由和流量控制:Netfilter和iproute的相关文章

Linux的高级路由和流量控制:其它可能性

这章列出了一些有关Linux的高级路由和流量整形的计划.其中有些链接应该单独写一章,有些本身的文档十分完整,不需要更多的HOWTO. 1Q VLAN在Linux上的实现(网站) VLAN是一种使用非物理方法把网络划分成多个部分的技术.这里可以找到很多有关VLAN的信息.利用这个实现,你可以让你的Linux机器与VLAN设备(比如http://www.aliyun.com/zixun/aggregation/15069.html">Cisco Catalyst,3Com: <Coreb

Linux的高级路由和流量控制:介绍iproute2

希望这篇文档能对你更好地理解Linxs2.2/2.4的路由有所帮助和启发.不被大多数使用者所知道的是,你所使用工具,其实能够完成相当规模工作.比如route 和ifconfig,实际上暗中调用了非常强大的iproute 2的底层基本功能. Linux能为你做什么 一个小列表: • 管制某台计算机的带宽• 管制通向某台计算机的带宽• 帮助你公平地共享带宽• 保护你的网络不受DoS攻击• 保护Internet不受到你的客户的攻击• 把多台服务器虚拟成一台,进行http://www.aliyun.co

Linux的高级路由和流量控制:多播路由

Multicast-HOWTO已经很古老了(相对而言) ,而且不够准确甚至会因此而误21136.html">导读者. 在你开始进行多播路由之前,你需要重新配置你的Linux内核来支持你想实现的多播路由类型.这一步需要你来决定使用何种类型的多播路由.基本上有这么四种:DVMRP (RIP单播协议的多播版本),MOSPF(同理,只不过是OSPF),PIM-SM ("Protocol Independent Multicasting - Sparse Mode",协议无关多播

Linux的高级路由和流量控制:动态路由OSPF和BGP

当你的网络变得确实比较大,或者你开始考虑成为国际互联网的一部分的时候,你就需要能够动态调整路由的工具了.站点之间经常由越来越多个链路互相连接. OSPF和BGP4几乎已经成了Internet的实际标准.通过gated和zebra,Linux全都能支持. 因为这些内容暂时没有包括进本文档,我们在此仅给出具体的学习方向: 纵览: Ciscohttp://www.aliyun.com/zixun/aggregation/9344.html">系统设计大规模的IP网络 对于OSPF: Moy, J

Linux的高级路由和流量控制:构建网桥以及用ARP代理构建伪网桥

网桥是一种安装在网络中,不需要任何后续配置的设备.网络交换器基本上就是一个多口网桥.也就是说网桥就是一个两口的交换器.而Linux能支持多个接口的网桥,成为一个真正的交换器. 网桥经常被用于改进那些http://www.aliyun.com/zixun/aggregation/7317.html">工作状态不佳但是又不能改造的网络.因为网桥是一个2层设备(IP下面的那一层),路由器和服务器意识不到它的存在.也就意味着你可以完全透明地阻挡或者修改数据包,甚至流量整形. 另一件好事是,假如一个

Linux的高级路由和流量控制:路由策略数据库

如果你有一个大规模的路由器,你可能不得不同时满足不同用户对于路由的不同需求.路由策略数据库可以帮助你通过多路由表技术来实现. 如果你想使用这个特性,请确认你的内核配置中带有 "IP: advanced router" 和 "IP: policy routing" 两项. 当内核需要做出路由选择时,它会找出应该参考哪一张路由表.除了 "ip" 命令之外,以前的 "route" 命令也能修改 main 和 local 表. 缺省规

Linux的高级路由和流量控制:内核网络参数

内核有很多可以在不同环境下调整的参数.通常,预设的缺省值可以满足99%的环境要求,we don't call this the http://www.aliyun.com/zixun/aggregation/3415.html">Advanced HOWTO for the fun of it! 有个很有趣的地方:/proc/sys/net,你应该看看.这里一开始并没有把所有的内容归档,但我们正在尽力如此. 有时候你需要看看Linux的内核源代码.读读Documentation/files

Linux的高级路由和流量控制:IPSEC Internet上安全的IP

现在,在Linux上有两种IPSEC可用.对于2.2和2.4,第一个比较正规的实现有FreeS/WAN.他们有一个官方站点和一个经常维护的非官方站点.出于多种原因,FreeS/WAN历来没有被合并到内核的主线上.最常提到的原因就是政治问题--违反了美国的密码产品扩散条例.所以它不会被集成到Linux内核中. 另外,很多合作伙伴表明了他们对代码质量的忧虑.关于如何设置FreeS/WAN,有很多文档可以参考. Linux 2.5.47版内核里有一个内置的IPSEC实现,是由Alexey Kuznet

Linux的高级路由和流量控制:GRE和其他隧道

Linux有3种隧道.它们是: IP-in-IP 隧道. GRE 隧道和非内核隧道(如PPTP). 1. 关于隧道的几点注释 隧道可以用于实现很多非常不一般而有趣的功能.但如果你的配置有问题,却也会发生可怕的错误.除非你确切地知道你在做什么,否则不要把缺省路由指向一个隧道设备.而且,隧道会增加协议开销,因为它需要一个额外的IP包头.一般应该是每个包增加20个字节,所以如果一个网络的MTU是1500字节的话,使用隧道技术后,实际的IP包长度最长只能有1480字节了.这倒不是什么原则性的问题,但如果