加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux体系NAT实现机制的进级改造

发布时间:2016-10-27 07:10:05 所属栏目:Linux 来源:站长网
导读:副标题#e# 一点牢骚和希望 一直以来,一直对Linux的NAT很不满,也写过《Linux系统如何平滑生效NAT》系列文章中的patch进行修补,还写过一些类Cisco实现的patch,然而都效果不大好,暴雨的夜晚,长假的倒数第二晚,虽然没有10月7日晚雨量大,可是10月6日晚上

即完全启用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;

}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读