NAT 概述
1.1 简介
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,容许一个总体机构以一个公用IP(Internet Protocol)地址出如今Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。所以咱们能够认为,NAT在必定程度上,可以有效的解决公网地址不足的问题。
...html
More...浏览器
NAT 概述
1.1 简介
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,容许一个总体机构以一个公用IP(Internet Protocol)地址出如今Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。所以咱们能够认为,NAT在必定程度上,可以有效的解决公网地址不足的问题。
1.2 分类
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。
其中,网络地址端口转换NAPT(Network Address Port Translation)则是把内部地址映射到外部网络的一个IP地址的不一样端口上。它能够将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地址NAT不一样,它将内部链接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。
NAPT是使用最广泛的一种转换方式,在HomeGW中也主要使用该方式。它又包含两种转换方式:SNAT和DNAT。
(1)源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络以前完成,数据包假装就是一具SNAT的例子。
(2)目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT恰好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。缓存
1.3 应用
NAT主要能够实现如下几个功能:数据包假装、平衡负载、端口转发和透明代理。
数据假装: 能够将内网数据包中的地址信息更改为统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也经常使用来实现共享上网。
端口转发: 当内网主机对外提供服务时,因为使用的是内部私有IP地址,外网没法直接访问。所以,须要在网关上进行端口转发,将特定服务的数据包转发给内网主机。
负载平衡: 目的地址转换NAT能够重定向一些服务器的链接到其余随机选定的服务器。
失效终结: 目的地址转换NAT能够用来提供高可靠性的服务。若是一个系统有一台经过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可使用目的地址转换NAT透明的把链接转移到一个备份服务器上。
透明代理: NAT能够把链接到因特网的HTTP链接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减小带宽的使用而不用让他们的客户配置他们的浏览器支持代理链接。
2 原理
2.1 地址转换
NAT的基本工做原理是,当私有网主机和公共网主机通讯的IP包通过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
以下图所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共 IP,为202.20.65.5;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机202.20.65.4发送了1个IP包(Dst=202.20.65.4,Src=192.168.1.2)。安全
当IP包通过NAT网关时,NAT Gateway会将IP包的源IP转换为NAT Gateway的公共IP并转发到公共网,此时IP包(Dst=202.20.65.4,Src=202.20.65.5)中已经不含任何私有网IP的信息。因为IP包的源IP已经被转换成NAT Gateway的公共IP,Web Server发出的响应IP包(Dst= 202.20.65.5,Src=202.20.65.4)将被发送到NAT Gateway。
这时,NAT Gateway会将IP包的目的IP转换成私有网中主机的IP,而后将IP包(Des=192.168.1.2,Src=202.20.65.4)转发到私有网。对于通讯双方而言,这种地址的转换过程是彻底透明的。转换示意图以下。服务器
若是内网主机发出的请求包未通过NAT,那么当Web Server收到请求包,回复的响应包中的目的地址就是私网IP地址,在Internet上没法正确送达,致使链接失败。
2.2 链接跟踪
在上述过程当中,NAT Gateway在收到响应包后,就须要判断将数据包转发给谁。此时若是子网内仅有少许客户机,能够用静态NAT手工指定;但若是内网有多台客户机,而且各自访问不一样网站,这时候就须要链接跟踪(connection track)。以下图所示:网络
在NAT Gateway收到客户机发来的请求包后,作源地址转换,而且将该链接记录保存下来,当NAT Gateway收到服务器来的响应包后,查找Track Table,肯定转发目标,作目的地址转换,转发给客户机。
2.3 端口转换
以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP便可正常通信。可是若是Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就没法判断将数据包转发给哪台客户机,以下图所示。工具
此时,NAT Gateway会在Connection Track中加入端口信息加以区分。若是两客户机访问同一服务器的源端口不一样,那么在Track Table里加入端口信息便可区分,若是源端口正好相同,那么在时行SNAT和DNAT的同时对源端口也要作相应的转换,以下图所示。post
3 Linux下NAT实现
3.1 netfilter/iptables模块
netfilter/iptables(IP信息包过滤系统)是一种功能强大的工具,根据数据包过滤规则,对通过的网络数据包进行丢弃、改造、转发等处理。
netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables组件是一种工具,也称为用户空间(userspace),它主要用来向用户提供添加、修改、删除内核中数据过滤表的接口。
3.2 基于netfilter/iptables的NAT
netfilter/iptables中的数据包过滤表有三种:filter、nat和mangle。
filter 表用于通常的信息包过滤,它包含 INPUT 、 OUTPUT 和 FORWARD 链。
nat 表用于要转发的信息包,它包含 PREROUTING 、 OUTPUT 和 POSTROUTING 链。
若是信息包及其头内进行了任何更改,则使用 mangle 表。该表包含一些规则来标记用于高级路由的信息包,该表包含 PREROUTING 和 OUTPUT 链。
filter 表用来过滤数据包,咱们能够在任什么时候候匹配包并过滤它们。Mangle不常用还在开发当中。咱们下面主要介绍Nat表来实现NAT功能。
(1)用户使用iptables命令在用户空间设置NAT规则。经过使用用户空间iptables命令,能够构建用户本身的定制NAT规则。全部规则存储在内核空间的nat表中。根据规则所处理的信息包类型,将规则分组在链中。要作SNAT的信息包被添加到POSTROUTING链中。要作DNAT的信息包被添加到PREROUTING链中。直接从本地出站的信息包的规则被添加到OUTPUT 链中。
(2)内核空间接管NAT工做.作过NAT操做的数据包的地址就被改变了,固然这种改变是根据咱们的规则进行的。属于一个流的包只会通过这个表一次。若是第一个包被容许作NAT或 Masqueraded,那么余下的包都会自动地被作相同的操做。也就是说,余下的包不会再经过这个表,一个一个的被NAT,而是自动地完成。这就是咱们为何不该该在这个表中作任何过滤的主要缘由。PREROUTING 链的做用是在包刚刚到达防火墙时改变它的目的地址,若是须要的话。OUTPUT链改变本地产生的包的目的地址。下图是数据包穿越整个netfilter/iptables的流程图。网站
(3)NAT工做步骤:
DNAT:若包是被送往PREROUTING链的,而且匹配了规则,则执行DNAT或REDIRECT目标。为了使数据包获得正确路由,必须在路由以前进行DNAT。
路由:内核检查信息包的头信息,尤为是信息包的目的地。
处理本地进程产生的包:对nat表OUTPUT链中的规则实施规则检查,对匹配的包执行目标动做。
SNAT:若包是被送往POSTROUTING链的,而且匹配了规则,则执行SNAT或MASQUERADE目标。系统在决定了数据包的路由以后才执行该链中的规则。spa