Linux体系NAT实现机制的进级改造
即完全启用nat extension,在添加静态NAT规则的时候,用nat后的已经修改的反向二元组(源/目标IP地址)和正向二元组构造两个个虚拟的nat_conntrack,并将两个二元组插入一个专门的NAT哈希表,这样不管数据从哪个方向发起,在静态NAT的HOOK逻辑(即nf_nat_fn)中,直接去根据自己的源地址去查NAT哈希表,如果找到则取出其反向二元组使用其中的非any地址覆盖nf_conntrack反向五元组的对应位置即可。 以上设计的本质在于,既然基于matches无法实现双向静态NAT,那么为何不扫除match呢?我们需要的仅仅是下面的推导: SNAT: 源:A==>源:C 正向: 源A->目标X 反向: 源X->目标C || / DNAT: 目标C==>目标A 正向: 源X->目标C 反向: 源B->目标X 数据结构如下: ENUM dir { orig, reply, } tuple { address[dir] addrs } nat_conntrack { tuple[dir] tuples; } (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |