分类: LINUX
2009-10-19 21:03:12
不同的数据包要经过三条路径:
1、 发往本机的包:经过的检查点是NF_PRE_ROUTING,NF_LOCAL_IN。
2、 由本机发出的包:经过NF_IP_LOCAL_OUT和NF_IP_POST_ROUTING。
3、 由本机转发的包:经过的检查点是NF_IP_PRE_ROUTING,NF_IP_FORWARD,NF_IP_POST_ROUTING。但是conntrack的helper函数并未在NF_IP_FORWARD的挂钩,所以如果用help直接写处理操作,然后用nf_helper_register来注册的,符合特征的数据包在NF_IP_FORWARD不会处理,在NF_IP_PREROUTING和NF_IP_POST_ROUTING会处理,而且可能会处理两次,所以一定要小心,根据我的教训,不推荐在help函数直接处理。如果是在网关上处理数据包,最好直接在NF_IP_FORWARD用nf_register_hook挂钩,然后用ip_conntrack_get来获取会话跟踪信息,这样流程既简洁又便于跟踪。