要弄清楚上面的图,能够这样考虑。在第一个路由判断处,不是发往本地的包,我们会发送他穿过 FORWARD链。若包的目的地是本地监听的IP地址,我们就会发送这个包穿过INPUT链,最后到达本地。
值得注意的是,在做NAT的过程中,发往本机的包的目的地址可能会在PREROUTING链里被改变。这个操作发生在第一次路由之前,所以在地址被改变之后,才能对包进行路由。注意,任何的包都会经过上图中的某一条路径。假如您把一个包DNAT回他原来的网络,这个包会继续走完相应路径上剩下的链,直到他被发送回原来的网络。
 | 想要更多的信息,能够看看rc.test-iptables.txt ,这个脚本包括了一些规则,他们会向您展示包是怎样通过各个表和链的。 |
3.2. mangle 表
这个表主要用来mangle包,您能够使用mangle匹配来改变包的TOS等特性。
 | 强烈建议您不要在这个表里做任何过滤,不管是DANT,SNAT或Masquerade。 |
以下是mangle表中仅有的几种操作:
TOS操作用来配置或改变数据包的服务类型域。这常用来配置网络上的数据包如何被路由等策略。注意这个操作并不完善,有时得不所愿。他在Internet上还不能使用,而且很多路由器不会注意到这个域值。换句话说,不要配置发往Internet的包,除非您打算依靠TOS来路由,比如用iproute2。
TTL操作用来改变数据包的生存时间域,我们能够让任何数据包只有一个特别的TTL。他的存在有一个很好的理由,那就是我们能够欺骗一些ISP。为什么要欺骗他们呢?因为他们不愿意让我们共享一个连接。那些ISP会查找一台单独的电脑是否使用不同的TTL,并且以此作为判断连接是否被共享的标志。
MARK用来给包配置特别的标记。iproute2能识别这些标记,并根据不同的标记(或没有标记)决定不同的路由。用这些标记我们能够做带宽限制和基于请求的分类。
3.3. nat 表
此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个包会被这个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类:
DNAT操作主要用在这样一种情况,您有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上(比如DMZ)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。
SNAT改变包的源地址,这在极大程度上能够隐藏您的本地网络或DMZ等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能连接到Internet。假如使用类似 192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。因为IANA定义这些网络(更有其他的)为私有的,只能用于LAN内部。
MASQUERADE的作用和MASQUERADE完全相同,只是电脑的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。当然,这也有好处,就是我们能够使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。