nat表
举个例子:
A有一台主机
a0:192.168.1.1/24
一个公网IP:10.10.10.10(假设)
B有一台主机:
b0:192.168.2.1/24
一个公网IP:11.11.11.11(假设)
现在需求是A和B之间主机需要能够互相访问。
a0主机访问b0主机,这就需要a0和b0 配置nat转换。
首先a0发送的报文通过nat的规则,将源目IP需要转换成公网IP,因为是在出方向上,流量只会经过output,postrouting链,所以nat可以在output和postrouting链上做。
b0接收a0发送的报文,他需要将数据包中的公网IP转换成对应的内网IP,因为是入方向上,所以可以在prerouting, input链上做。不能在output和forwarid链上做。
这就定下了nat规则应该在哪些链上
raw表
再看一下raw表,根据上图。因为raw表是为了做连接追踪的,一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。所以raw表中的规则一定要在nat表规则之前做处理,所以应该在prerouting和output。流入时,raw在prerouting可以保证在nat的prerouting和input之前处理。在流出时,raw在output可以保证在postrouting和output之前处理。
mangle
用于对特定数据包的修改,所以无论何时修改都可以,所以任何链都可以进行处理。
filter表
过滤规则,需要根据流量是进入本机,转发和出去的方向进行过滤。我想filter只在input,output和forward上做,是为了尽量减少在其他链上集成太多功能,尽量将功能拆分。
参考:
http://s2.naes.tn.edu.tw/~kv/iptables.htm
http://blog.51cto.com/wushank/1171768