Nat:Network Address  Tranlation(网络地址转换),既可以应用在服务器端,也可以应用到客户端。在客户端时为了隐藏客户端的IP,防止客户端受到网络***。在服务端是为了保护服务器端主机在因特网上的安全。

1.为什么要使用NAT技术?

因为目前宽带网络(ADSL)最多只能提供给用户的IP为16个,最少为1个,而一般企业内会有很多主机,会出现IP不够用的状态。在这种情况下,使用NAT技术可以使成千上万个主机 同时通过一个公网IP连接上因特网。

2.SNAT,DNAT和数据包走向。

SNAT:源地址转换

DNAT:目的地址转换。

数据包走向:PREROUTING——》路由表——》POSTROUTING

3.NAT机制的三条链

NAT机制共有三个链,PREROUTING,OUTPUT,POSTROUTING。

[root@vm1 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.0.0/24       anywhere            to:192.168.5.178

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

PREROUTING:位于NAT机制的最前面,主要是修改数据包的Destination IP,主要执行DNAT任务。

POSTROUTING:位于NAT机制的最末端,主要是修改数据包的Source IP,只要执行SNAT任务。

OUTPUT:当本机进程需要将数据包发出本机时,先要经过OUTPUT链匹配,如果匹配成功允许发出,才会将数据包交给POSTROUTING链进行SNAT。

数据经过NAT机制的流程:当出具报传入后先经过PREROUTING链进行DNAT操作,然后将数据包传给路由表,路由表对数据包进行拆解分析,如果该数据包是传给本机的,路由表对数据拆解分析后确定匹配成功,则传给本机进程进行处理,如果路由表对数据包惊醒拆解分析后确定不是传给本机的,则直接将其传给POSTROUTING链进行SNAT操作,再传出。当本机需要将某个数据包传出时,本机进程先将数据包传给路由表,路由表拆解分析后传给OUTPUT链进行匹配,若匹配成功,则传给POSTROUTING链做SNAT操作后传出,若匹配不成功,则将数据包丢弃。


4.NAT分类

(1).一对多NAT

        目的:a.节省公网IP的使用量,企业只需要一个公网IP就足够了,企业内部使用私有IP,通过NAT机制将私有IP转换为公网IP连接因特网。

              b.隐藏企业内部主机的IP,NAT机制会将私有IP转换成公网IP连接因特网,企业内网躲避在NAT之后,因特网使用者无法得知企业内网的IP,即便***知道了,因为NAT机制,也增加了******企业内网的难度。\


构建一对多NAT的网络环境

准备环境:在NAT主机上设置两块网卡eth0和eth1。

                公网IP(eth0):10.0.1.200

                私有IP(eth1):192.168.0.0/24

                私有IP主机默认网关:192.168.0.254

说明:当企业内部主机发送数据包到因特网时,即192.168.0.0/24网段上的主机要访问因特网上的主机,其请求数据包内的Source IP必然时私有IP,要让这样的数据包能够发送到因特网上,必然要通过NAT主机上的SNAT机制,将外送的数据包的Source IP改为NAT主机上的公网IP,如此才能让私有网络的数据包发送到因特网上。

NAT主机上SNAT的语法规则:

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200

语法解析:

-t nat:选择表,选择要使用的功能时netfilter的nat机制

-A POSTROUTING:选择功能,指定要执行的操作为SNAT机制。

-o eth0:表明数据包的流向,意为执行了SNAT机制后数据包从eth0接口传入公网。

-s 192.168.0.0/24:指定源IP,意为只用来自192.168.0.0/24网段的数据包才符合规则

-j SNAT --to 10.0.1.200:如果数据包符合以上规则,就将数据包的Source IP改为10.0.1.200。

注:当设置了数据包出去的规则之后,就不需要考虑数据包返回的方向,因为系统会自动设置好相对应方向的应答数据包的规则。所以只需要指定单方面的规则即可。

设置SNAT或者DNAT机制时需要注意的问题:

a.接口名称:接口名称可以通过“ifconfig”命令查看,接口名称一定要与网卡相对应。

b.公网IP是动态的:可以做如下设置“iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASOUERADE”。


(2)多对多NAT

    多对多NAT主要是针对一对多NAT的缺陷而改进的,当一个庞大的企业内网频繁对因特网进行访问,而所有的访问请求都转到某一台因特网服务器上,会造成一个因特网主机频繁对因特网进行访问,尤其是网络游戏主机,无法同时接受相同一个IP对其多次连接。而对多网NAT是将所个私有IP改变为多个公网IP,可以降低相同公网IP连接上同一台因特网主机的概率。

语法规则:iptables -t nat -A POSTROUTING -o eth0 -s192.168.0.0/24 -j SNAT --to IP1,IP2....


(3)一对一NAT

    一对一NAT机制中,NAT主机至少需要三块网卡,接口分别为eth0,eth1,eth2,eth0连接公网,eth1连接服务器主机网络,eth2连接企业内网。还需要准备足够的公网IP,分别用于对外服务器地址转换后使用。当客户通过公网访问企业对外服务器时,会先经过nat主机做DNAT,将被访问的公网IP转换为对外服务器上的私有IP,然后将请求转发给对外服务器上,同时对外服务器回馈给客户的请求应答数据包也要经过nat主机做DNAT,将私有IP转换为公网IP,在通过因特网返回给客户。