为解决IPv4地址日益枯竭,出现NAT(Network Address Translation,网络地址转换)技术。NAT可以将来自一个网络的IP数据报报头中的IP地址(可以是源IP地址或目的IP地址,或两者同时)转换为另一个网络的IP地址,主要用于实现私网用户和公网用户之间的互访。

一、NAT主要特性

在AR G3路由器中把支持的NAT特性分为三大类:动态NAT、静态NAT和NAT Server(NAT服务器),在实际应用中,分别对应配置动态地址转换、配置静态地址转换和配置内部服务器。

1、动态NAT

私网IP与公网IP之间的转换不是固定的。把需要访问公网的私网IP地址动态地与公网IP地址建立临时映射关系,将报文中的私网IP地址进行对应的临时替换,待返回报文到达设备时再根据映射表“反向”把公网IP地址临时替换回对应的私网IP地址,转发给主机,实现内网用户和外网的通信。

动态NAT的实现方式有Basic NAT和NAPT两种(Easy IP是NAPT的一种特例)。Basic NAT是一种“一对一”的动态地址转换;NAPT则通过引入“端口”变量,是一种“多对一”的动态地址转换(映射的公网端口不同)。

2、静态NAT

建立固定的一对一的公网IP地址和私网IP地址的映射。

3、NAT Server

内网向外网提供服务,内网服务器不能被屏蔽,这是一种由外网发起向内网访问的NAT转换情形。外网用户访问内网服务器,通过“公网IP地址:端口号”与服务器的“私网IP地址:端口号”的固定映射,从私网IP地址与公网IP地址的映射关系看,也是一种静态映射关系。

二、BasicNAT实现原理

Basic Nat方式属于一对一地址转换,但不是静态一对一,是动态。

内网向公网发起连接请求时,请求报文中的私网IP地址通过事先准备好的公网IP地址池动态建立私网IP与公网IP的NAT映射表项,利用映射的公网IP将报文中的源IP地址(即内网私网IP地址)进行替换。然后送达给外网的目的主机。外网主机收到请求报文后进行响应时,响应报文到达NAT设备,又将依据前面请求把我摁所建立的私网IP与公网IP映射关系反向将报文中的目的IP替换成对应的私网IP,然后送达给内部源主机。

①当内网侧Host要访问公网侧Server时,向Router发送请求报文(即Outbound方向),此时报文中的源IP为Host自己的10.1.1.100,目的IP为Server的IP:211.100.7.34。

②Router收到来自Host请求报文后,从公网地址池选取一个空闲公网IP,建立与内网侧报文源IP间的NAT转换映射表项,包括正(Outbound)、反(Inbound)两个方向,依据正向NAT表项将报文中的源IP地址转换为对应的公网IP后向公网侧发送。此时发送的报文的源IP地址是转换后的公网IP:162.105.178.65,目的IP不变,仍为Server的IP:211.100.7.34。

③当Server收到请求报文后,需向Router发送响应报文(Inbound方向),此时只须将收到的请求报文中的源IP和目的IP对调即可,即报文的源IP是Server自己的IP:211.100.7.34,目的地址是Host私网IP转换后的公网IP:162.105.178.65。

④当Router收到来自公网Server发送的响应报文后,会根据报文中的目的IP查找NAT映射表项,将报文中的目的IP转换为Host主机对应的私网IP地址(源地址不变)后向私网侧发送,此时报文中的源IP仍是Server的IP:211.100.7.34,目的IP地址转换为Host的私网IP:10.1.1.100。

Basic NAT中的请求报文转换的仅是其中的源IP地址(目的IP不变),即仅关心源IP地址;响应报文转换的仅是其中的目的IP(源IP不变),即仅关心目的IP。

三、NAPT实现原理

多对一地址转换,NAPT使用“IP地址+端口号”的形式进行转换。

NAPT请求报文中转换的仅是源IP地址和源端口号(目的IP和目的端口号不变),即仅关系源IP和源端口号;响应报文中转换的是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号。不同私网主机可以转换成同一个公网IP,但转换后的端口号必须不一样。

四、EasyIP实现原理

实现原理与地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接口的公网IP地址实现与私网IP地址之间的映射(无需创建公网地址池)。主要用于将路由器WAN接口IP地址作为要被映射的公网IP地址的情形,特别适合小型局域网接入Internet情况。

五、NATServer实现原理

NAT Server用于外网用户需要使用固定公网IP地址访问内部服务器的情形。通过事先配置好的服务器的“公网IP+端口号”与服务器的“私网IP+端口号”间的静态映射关系来实现。(要先在Router上配置好静态的NAT Server转换映射表)。

①Router在收到外网用户发起的访问请求报文后(即Inbound方向),根据该请求的“目的IP:端口号”查找NAT Server转换映射表,找出对应的“私网IP:端口号”,然后用找到的结果直接替换报文的“目的IP:端口号”,最后想内网侧发送。上图外网发送的请求报文中目的IP是202.102.1.68,端口号80,经过Router转换后的目的IP和端口号为192.168.1.68:80。

②内网服务器收到由Router转发的请求报文后,向Router发送响应报文(即Outbound方向)。此时报文中的源IP、端口号与目的IP、端口号与收到的请求报文中的完全对调,即响应报文中的源IP和端口号为前面的192.168.1.68:80.

③Router收到内网服务器的响应报文后又根据该响应报文中的“源IP:端口号”查抄NAT Server转换表项,找出对应的“公网IP:端口号”,然后替换报文中的“源IP:端口号”。本例中内网服务器相应外网主机的报文的源IP和端口号是192.168.1.68:80,经Router转换后的源IP和端口号为209.102.1.68:80。

由外网向内网服务器发送的请求报文中转换的仅是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号;从内网向外网发送的响应报文转换的仅是源IP和源端口号(目的IP和目的端口号不变),即仅关心源IP和源端口号。

综上总结:NAT中凡是由内网向外网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是源IP地址(或同时包括源端口号),而凡是由外网向内网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是目的IP地址(或同时包括源端口号)。

六、静态NAT/NAPT

静态NAT是指在进行NAT转换时,内部网络主机的IP与公网IP是一对一静态绑定的,且每个公网IP只会分配给固定的内网主机转换使用。与Basic NAT不同的只是这里先要在NAT路由器上配置好静态NAT转换映射表,而不仅是地址池。

静态NAPT是指“内部网络主机的私网IP+协议号+端口号”与“公网IP+协议号+端口号”是一对一静态绑定的,静态NAPT中的公网IP可以为多个私网IP使用。与NAPT不同的也是要先在NAT路由器上配置好静态NAPT转换映射表,而不仅是地址池。

七、NAT与路由器的本质区别

两种技术主要存在实现机制和主要应用两个方面的本质区别。

1、实现机制不同

NAT是通过解决两个网络间互访的“身份”问题来解决实现两个网络的主机的互访,即通过将报文中的源IP或目的IP转换为对方网络的IP地址来实现两个网络中的主机互访。这里报文中的IP地址转换相当于“身份”的转换,即使一个网络中的主机具有访问对方网络的合法“身份”。

路由器则是通过解决两个网络互访“渠道”问题来实现两个网络的主机的互访,即建立一条互访的“路径”(即路由表)来实现双方主机的互访,而双方传输报文中的源IP和目的IP都不变,也就是双方的“身份”并没有经过转换。

2、主要应用不同

NAT主要应用于内部局域网主机与Internet主机互访的情形(当然也可以实现两个局域网之间的互联,但这不是NAT的主要应用),解决公网IPv4不足的问题。另外,在局域网与Internet的互联中也不可能建立一个双向互访的具体路由表,一则是因为私网IP在Internet无法识别,再则因为Internet不是单一IP网段的网络。

路由之所以选择通过建立路径来实现两个网络的主机的互访,是因为路由主要都是使用私网IP,有明确IP网段的局域网之间的互联。

https://blog.csdn.net/kaoa000/article/details/52368106

为什么要使用NAT
1 内网中主机过多,没有足够的合法IP地址可用。
2 当ISP发生变化时,使用NAT技术避免了IP地址的重新编址。
3 当两个合并的网络中出现了重复地址的时候。
4 利用NAT来解决TCP的负载均衡问题。
5 隐藏内部网络,增强安全性。
 
NAT就是将内网中使用的私有地址转换成可在Internet上进行路由的合法地址的技术。
私有地址范围:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172..31.255.255
192.168.0.0 ~ 192.168.255.255
 
NAT技术主要分为NAT和PAT。
NAT是从内部本地地址到内部全局地址的一对一转换。
PAT是从多个内部本地地址到内部全局地址的多对一转换。通过端口号确定其多个内部主机的唯一性。
 
NAT术语
Inside network:需要翻译成外部地址的内部网络。
Outside network:使用合法地址进行通信的外部网络。
Local address:内部网络使用的地址。
Global address:外部网络使用的地址。
Inside local address:内部本地地址。数据在内部网络使用的地址,一般为private ip address。
Inside global address:内部全局地址。数据为了到达外部网络,用来代表inside local address的地址,一般为ISP提供的合法地址。
Outside local address:外部本地地址,不必是合法地址。当外部网络数据到达内部网络,外部网络中的主机IP地址与内部网络中的主机处在同一网段时,为防止内部主机误认外部主机与自己在同一网段而广播ARP请求,造成无法通信,将外部主机的地址转换成外部本地地址之后再与内部主机进行通信。
Outside global address:数据在外部网络使用的地址,是个合法地址。
Simple translation entry:把一个IP地址映射到另外一个地址上的一对一的翻译方式。
Extended translation entry:把IP地址和端口(port)的组合翻译成另外一个地址和端口的组合。
Static address translation:静态地址翻译,把一个local对应到一个global上去。
Dynamic address translation:动态翻译,local和global池(pool)建立动态对应关系。
Port address translation(PAT):通过使用地址和端口的结合来达到多个local对应一个global的状态。端口号用来确定每个local的唯一性。这样的技术也叫超载(overloading)。
 
NAT的优缺点
优点:
1 极大的节省了合法的IP地址。
2 能够处理地址重复情况,避免了地址的重新编号,增加了编址的灵活性。
3 隐藏了内部网络地址,增强了安全性。
4 可以使多个使用TCP负载特性的服务器之间实现基本的数据包负载均衡。
缺点:
1 由于NAT要在边界路由器上进行地址的转换,增大了传输的延迟。
2 由于NAT改动了IP地址,失去了跟踪端到端IP流量的能力。当出现恶意流量时,会使故障排除和流量跟踪变的更加棘手。
3 不支持一些特定的应用程序。如早期版本的MSN。
4 增大了资源开销。处理NAT进程增加了CPU的负荷,并需要更多内存来存储NAT表项。
 
配置NAT
inside & outside
每个包含了NAT进程的接口必须被指定为内部接口或外部接口,但不能被同时指定为这两个接口。在路由器上,必须至少有一个接口被配置成内部接口,一个接口被配置成外部接口。这样路由器就知道怎样在接口上处理入站和出站流量了。
D-Lab(config)#int e0    //进入接口模式
D-Lab(config-if)#ip nat inside   //指定inside接口出站
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside //指定outside接口入站
 
静态NAT
inside|outside local和inside|outside global的一对一映射
D-Lab(config)#ip nat {inside|outside} source static <inside local> < inside global>
这样就在NAT表中创建了一个永久表项。
配置示例:
D-Lab#config t
D-Lab(config)#int e0
D-Lab(config-if)#ip nat inside
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside
D-Lab(config)#ip nat inside source static 192.168.1.1 210.83.202.1
D-Lab(config)#ip nat outside source static 210.83.202.2 192.168.2.3
 
静态PAT
D-Lab(config)#ip nat {inside|outside} source static <protocol> <inside local> < port> < inside global> < port>
配置示例:
D-Lab(config)#ip nat inside source static tcp 10.1.1.1 80 214.118.21.121 80
 
动态NAT
动态NAT用来将inside local快速映射到inside global上。这些inside local放在可用的IP地址池中。同样,必须给参与NAT进程的路由器接口分配IP地址。
当内部网络主机要与Internet上的主机进行通信时,NAT边界路由器会从标记为“NAT内部”的接口接收数据包。
D-Lab(config)#ip nat pool <pool-name> <start-ip> <end-ip> netmask xxxx
D-Lab(config)#ip nat pool <pool-name> <start-ip> <end-ip> prefix-length xx     //掩码长度
例:
D-Lab(config)#ip nat pool dyn-nat-pool 211.10.121.1 211.10.121.254 netmask 255.255.255.0
D-Lab(config)#ip nat pool dyn-nat-pool 211.10.121.1 211.10.121.254 prefix-length 24
配置示例:
D-Lab(config)#inter e0 
D-Lab(config-if)#ip add 192.168.1.1 255.255.255.0    
D-Lab(config-if)#ip nat inside     //指定内部接口
D-Lab(config-if)#inter s0
D-Lab(config-if)#ip add 210.83.202.1 255.255.255.192
D-Lab(config-if)#ip nat outside    //指定外部接口
D-Lab(config-if)#exit
D-Lab(config)#access-list 1 permit 192.168.1.0 0.0.0.255     //标记inside local范围
D-Lab(config)#ip nat pool in-out210.83.202.2 210.83.202.8 prefix 24    //设置inside global地址池 
!
D-Lab(config)#ip nat inside source list 1 pool in-out    //启用inside源地址翻译,把标记的inside local范围与inside global池关联起来
 
动态PAT(多对一映射)
路由器为每个转换表项添加第四层协议和端口信息
D-Lab(config)#ip nat inside source list 1 pool in-out overload
如果不知道出站IP地址,可在命令中指定出站接口
D-Lab(config)#ip nat inside source list 1 e0 overload
//如果接口shut或者接口没有设置IP地址的话,NAT不会生效
配置实例:
D-Lab(config)#inter e0
D-Lab(config-if)#ip add 192.168.1.1 255.255.255.0
D-Lab(config)#access-list 9 permit 192.168.1.0 0.0.0.255
 
为重复地址配置NAT
D-Lab(config)#ip nat pool in-out211.121.1.1 211.121.1.254 prefix-length 24   //设置local global池
D-Lab(config)#ip nat pool out-in10.1.2.1 10.1.2.254 prefix-length 24   //设置outside local池
D-Lab(config)#ip nat inside source list pool in-out    //启用inside源地址翻译,把标记的inside local范围与inside global池关联起来
D-Lab(config)#ip nat inside source list 1 pool out-in    //将在标记的inside local范围里的outside global转换成outside local池里的地址
D-Lab(config)#int fa0/0
D-Lab(config-if)#ip nat inside    //指定出站接口
D-Lab(config-if)#int s1/1
D-Lab(config-if)#ip nat outside    //指定入站接口
D-Lab(config-if)#exit
D-Lab(config)#access-list 1 permit 10.1.1.0 0.0.0.255    //标记inside local地址范围
 
更灵活的地址池的配置:
ip nat pool <name> { netmask <mask> | prefix-length <length> } [ type { rotary } ]
这样可以允许定义不连续地址池,接下来定义地址空间:
address <start> <end>
例:
D-Lab(config)#ip nat pool D-lab prefix-length 24
D-Lab(config-ipnat-pool)#address 11.69.73.12 11.69.73.14
D-Lab(config-ipnat-pool)#address 11.69.73.18 11.69.73.244
这样就定义了一个11.69.73.12 ~ 11.69.73.14和11.69.73.18~11.69.73.244的地址池
 
NAT关联routemap的配置:
ip nat inside source route-map <name> pool <name>
例:
ip nat pool d-1 173.26.232.1 173.26.232.254 prefix-length 24
ip nat inside source route-map d2-map pool d-2
 
配置NAT超时设置:
ip nat translation timeout <seconds>    //特权模式下
 
 
NAT配置的验证和故障排除
sh ip nat translations    //查看生效的NAT表项
sh ip nat translations verbose    //查看生效的NAT表项的详细信息
sh ip nat statistics    //显示NAT的统计数字和配置信息
 
clear ip nat translation *    //清除所有NAT表项
clear ip nat translation inside <global-ip>    //清除指定的内部NAT表项 :
clear ip nat translation <protocol> <global-ip> <local-ip> <global-port> <local-port>    //清除指定的NAT表项
 
debug ip nat [ <list> ] [ detailed ]    //调试NAT进程

NAT配置与管理的更多相关文章

  1. 绝对实用 NAT + VLAN +ACL管理企业网络

    在企业中,要实现所有的员工都能与互联网进行通信,每个人各使用一个公网地址是很不现实的.一般,企业有1个或几个公网地址,而企业有几十.几百个员工.要想让所有的员工使用这仅有的几个公网地址与互联网通信该怎 ...

  2. Juniper srx防火墙NAT配置

    一.基础操作说明: 1.  设备恢复出厂化 root# load factory-default root# set system root-authentication plain-text-pas ...

  3. Linux基础五:网络配置与管理

    五.网络配置与管理 1.网络知识 2.命令 ifconfig命令  <=>  ip  addr  show 命令--查看本地所有网卡配置信息 ens32:本地以太网网卡,lo:本地回环网卡 ...

  4. Azure Redis Cache (4) 配置和管理Redis Cache

    <Windows Azure Platform 系列文章目录> 我们在创建完Azure Redis Cache后,经常需要切换Redis Cache的服务级别,这里我简单介绍一下使用Azu ...

  5. mysql多实例的配置和管理

    原文地址:mysql多实例的配置和管理 作者:飞鸿无痕 多实例mysql的安装和管理 mysql的多实例有两种方式可以实现,两种方式各有利弊.第一种是使用多个配置文件启动不同的进程来实现多实例,这种方 ...

  6. 【Ubuntu】NAT配置

    1.简介 2.配置 1.简介 NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程.在实际应用中,NAT 主要用于 ...

  7. Network Object NAT配置介绍

    1.Dynamic NAT(动态NAT,动态一对一) 实例一: 传统配置方法: nat (Inside) 1 10.1.1.0 255.255.255.0 global (Outside) 1 202 ...

  8. 分享:linux下apache服务器的配置和管理

    linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...

  9. 关于spring3中No Session found for current thread!and Transaction的配置和管理(转)

    今天我是特别的郁闷,本来项目做到一半,以前都好好的,结果下午就出现问题,苦逼的到现在才解决.它出现问题的时候都一声不坑, ,(天啦,现在才发现CSDN啥时候把QQ表情给整过来了)就在注册用户的时候,咦 ...

随机推荐

  1. Ajax.ActionLink用法

    必须要引用的JS库: <script type="text/javascript" src="@Url.StaticFile("/Assets/Conte ...

  2. 嵌入式驱动开发之解码器tvp5150---tvp5150am1基于8148vpss的添加调试

    (1)i2c (2)注册设备 (3)寄存器 --------------author:pkf ------------------------time:2015-4-5 --------------- ...

  3. linux驱动开发---导出内核符号

    导出内核符号模板代码,验证小实例: /** *Copyright (c) 2013.TianYuan *All rights reserved. * *文件名称: Esdexp.c *文件标识: 导出 ...

  4. flask-第三方组件

    flask-script  离线脚本 from flask_demo import create_app from flask_script import Manager app = create_a ...

  5. 为什么要使用自增ID作为主键

    1.从业务上来说 在设计数据库时不需要费尽心思去考虑设置哪个字段为主键.然后是这些字段只是理论上是唯一的,例如使用图书编号为主键,这个图书编号只是理论上来说是唯一的,但实践中可能会出现重复的 情况.所 ...

  6. JavaScript------如何解决表单登录信息输入为空显示提示

    <form name="fname" method="post" action="../Home/Login" onsubmit=&q ...

  7. HTML-HTML链接JavaScript的几种方法

    把JavaScript文件放在head中 标准方法是把JavaScript文件放到head标签内. <head> <script type="text/javascript ...

  8. Http服务器实现文件上传与下载(二)

    一.引言 欢迎大家接着看我的博客,如何大家有什么想法的话回复我哦,闲话不多聊了,接着上一讲的内容来说吧,在上一节中已经讲到了请求头字符串的解析,并且在解析中我我们已经获取了url.就是上节中提到的/d ...

  9. ES6入门概览一

    一.let const 1.let命令:声明变量仅在块级作用域有效:let实际上为js新增了块级作用域 好处: -不存在变量提升: -内部声明的变量 函数 不会影响外部 -不可重复声明变量 2.con ...

  10. Less-loops循环

    loop循环 example: .test(@i) when (@i > 0) { .test((@i - 1)); .study@{i} { width: (10px * @i); } } d ...