NAT类型及转换原理深入剖析

http://www.m6000.cn/other/459.html
 2018年8月4日16:40:14发表评论 297 views

大家都知道。NAT是位于内、外网之间,用来进行内、外网地址转换的,在当前仍是IPv4为主流协议的IP网络,NAT技术的应用非常广,因为它可以节约紧缺的公网IP地址。但是千万别以为NAT技术很简单,认为只是把内部(或者外部)地址转换成外部(或者内部)地址。在具体的应用中,NAT的应用方式,或者说NAT类型非常多,本文以Cisco设备中的NAT技术从专业角度进行一些基础知识和应用配置方面的介绍,全面的NAT配置与应用到时大家参见本人于编写的《金牌网管师——大中型企业网络组建、配置与管理》一书,或者明年将出版的《Cisco/H3C路由器配置与管理完全手册》一书。

一、NAT类型

NAT路由器是被配置为转换内部网络(inside network)中的非注册内部本地IP地址(inside local addresses)为注册IP地址(registered IP addresses)。当内部网络中使用非注册IP地址的设备要与外部公用网络(public network)进行通信时,就会使用NAT。在Cisco设备(包括防火墙、路由器,或者包含相关Cisco软件的计算机)中,NAT有多种形式和工作方式。这是在Cisco设备上配置NAT应用之前必须要掌握的。

n        静态NAT(Static NAT)

静态NAT是把非注册IP地址(如本地局域网IP地址)一对一地映射到注册IP地址(如公网IP地址)。这在网络设备需要以公网IP地址访问外网时特别有用。但一定要注意,这里仅例举了单一的正方向的IP地址转换,实际上是可以反方向,或者双方向进行IP地址转换的,下面动态NAT和复用NAT也一样可以有正向、反向、或者双向转换方式。

如图1显示的是一个静态NAT应用示例(注意箭头方向)。内部网络中的192.168.32.10、192.168.32.12和192.168.32.15这三个专网IP地址设备在通过路由器访问公网时,对应转换成213.18.123.110、213.18.123.11和213.18.123.12这三个公网IP地址,让对方看到的也是这三个公网IP地址。

图1 静态NAT应用示例

n        动态NAT(Dynamic NAT)

动态NAT是把非注册IP地址映射到一组注册IP地址,具体映射是哪两组IP地址之间的映射关系,还要看所配置的具体公用IP地址池和通信时间。但最终非注册IP地址与注册IP地址还是一对一地进行映射。

图2是一个动态NAT应用的示例。内网中的三个IP地址与一个范围为213.18.123.100到213.18.123.150的公网IP地址池进行映射。最终的结果是,192.168.32.10映射为213.18.123.116,192.168.32.12映射为213.18.123.112,而192.168.32.15映射为213.18.123.125,……。

图2动态NAT应用示例

n        复用转换(Overloading)NAT

复用NAT是动态NAT的一种形式。它是通过与IP地址的不同端口组合,把多个非注册IP地址映射到一个注册IP地址。图3是一个复用转换NAT的应用示例。示例中本地网络中的所有用户通过路由器访问公用网络时,都将映射成同一个公网IP地址——213.18.123.100,只是所使用的端口不同而已(分别为101、102、103号端口)。这对于公网IP地址比较紧张,而内网中又部署了多种应用服务器时特别有用,可以通过一个公网IP地址配置多个应用服务器。

图3复用转换NAT应用示例

n        交迭转换NAT(Overlapping NAT)

交换转换NAT是内、外部网络IP地址的相互转换方式。这种NAT方式出现在内、外网都是使用公网注册IP地址时。当你的内部网络主机使用的是注册IP地址时,路由器必须维护一张映射表,以便路由器能够对内、外网的两个注册IP地址进行交迭转换。这两方面的作用:一是可以避免内部主机真实的公网IP地址暴露在外网用户,另一方面又可以在内网使用非专网络IP地址与外网相同IP地址的用户造成冲突。这种NAT既可以通过静态NAT,又可以通过使用DNS和执行动态NAT来实现。

图4显示了一个交迭转换NAT的应用示例。在私有网络中,某主机分配了一个公网注册的IP地址237.16.32.16,连接公网时通过路由器转换成为另一个公网注册IP地址213.18.123.103。同时来自外网IP地址服务器上返回的消息又会通过路由器转换成内网中分配的固定公网注册IP地址237.16.32.10。

图4 交迭转换NAT应用示例

二、NAT术语

下面是与Cisco NAT技术密切相关的几个术语描述,这对理解NAT技术工作原理非常重要。

n        内部网络(Internal Network)

通常是指一个局域网,也称残余域(stub domain)。残余域使用的是内部网络IP地址,但可以是注册的IP地址,也可以是非注册的IP地址。使用非注册IP地址的所有计算机都必须使用NAT转换后再与其他网络进行通信。

n        外部网络(External Network)

将本地私有网络以外的所有网络都可看成是外部网络。当然,外部网络也可以是其他私有网络,也可以是公用网络,如互联网。所以外部网络上的用户使用IP地址同样既可以是注册的,也可以是非注册的。

n        本地地址(Local address)

在IP地址中,可以根据IP地址的作用范围分为本地地址和全局地址两大类。本地地址就是只有本地网络用户才可以访问,并仅作用于本地网络的IP地址。这属于非注册类型的IP,不能在互联网等公网中使用。

n        全局地址(Global address)

与本地地址相对应的IP地址。它是可以供全球用户访问的IP地址,当然是在公网中注册了的IP合法地址。

n        内部本地地址(Inside local address)

这是本地地址的一种,是指分配给内部网络主机的IP地址。这个IP地址是计算机操作系统或诸如DHCP之类的服务进行分配的,不是由NIC(Network Information Center,网络信息中心)或者服务提供商统一分配的注册IP地址。

n        外部本地地址(Outside local address)

这也是本地地址的另一种,是与内部本地地址性质一样的外部网络主机IP地址,也不是合法的互联网IP地址。它是由外部网络计算机操作系统或诸如DHCP之类的服务进行分配的。

n        内部全局地址(Inside global address)

这是全局地址的一种,是由NIC或服务提供商分配的注册IP地址。对于外界网络来说,它们扮演的是一个或多个内部本地址IP地址。

n        外部全局地址(Outside global address)

这也是全局地址的另一种,是与内部全局地址址性质一样的外部网络主机全局地址。对于外界网络来说,它们扮演的也是一个或多个本地址IP地址。

三、NAT地址转换原理

在残余域中的多数计算机是使用内部本地地址(Inside local addresses)进行通信的。在残余域中有些计算机需要与外部网络进行频繁通信时,就需要为他们配置内部全局地址(Inside global addresses),这样无需转换就可以直接与外部网络通信。

总体来说,NAT进行地址转换的过程就是把本地地址转换成全局地址的过程,无论数据包是从内部网络发往外部网络,还是从外部网络发往内部网络。不同的只是本地地址和全局地址所对应的网络不同。具体如图5所示。

图5 NAT基本地址转换原理

在以上转换过程中,当数据包还在内部网络位置时有一个作为源地址的内部本地地址和一个作为目的地址的外部本地地址;而当数据包被交换到外部网络时,数据包的源地址就会转变为内部全局地址,而目的地址被转变为外部全局地址。

相反,当数据包是从外部网络位置发来,并且仍位于外部网络中时,则它的源地址就是外部全局地址,目的地址就是内部本局地址;而当数据包被交换到本地网络时,源地址被转变为外部本地地址,目的地址被转变为内部本地地址。

如图6所示的是以上详细的地址转换方式。

图6 NAT的详细地址转换原理

数据包由内部网络发往外部网络时的基本转换原理如下:

(1)当配置了内部本地地地址的残余域计算机要与外部网络通信时,数据包到达NAT路由器后,经过普通的路由到达网关。数据包采用内部本地地址为源地址,外部本地地址为目的地址进行封装。

(2)NAT路由器先检查在路由表中是否有包含数据包目的地址的路由表项。如果没有与目的地址相匹配的路由表顶,则该数据包被丢弃。如果有与目的地址相匹配的路由表项,则路由器检验数据包是否是从内部网络发往外部网络的,并且检验数据包是否与已配置的NAT匹配。然后,路由器检查地址转换表,看是否有包含内部本地地址和内部全局地址的NAT表项。如果找到了,则把数据包的源地址用内部本地全局地址替换;如果仅配置了静态NAT,而没有与数据包匹配的静态NAT表项,则数据包不被转换,而直接被路由转发。

(3)路由器使用内部全局地址,把数据包发往目的地址。

当数据包是从公用网络发往内部网络时,NAT的基本转换原理如下:

(1)公用网络上的计算机发送数据包到私用网络时,采用源地址是外部全局地址,目的地址为内部全局地址进行封装。

(2)当数据包到达内部网络中,NAT路由器查找地址转换表和目的地址,映射到残余域(私有内部网络)中的计算机。

(2)如果存在匹配的NAT表项,则路由器把内部全局地址转换成内部本地地址,然后在发往目的计算机前检查路由表。如果没有发现与之匹配的NAT表项,数据包不被转换而直接检查与目的地址匹配的路由表。如果没有发现与目的地址路由表项,则数据包将被丢弃。

【转帖】NAT类型及转换原理深入剖析的更多相关文章

  1. NAT地址转换原理全攻略

    NAT转换方式及原理 在NAT的应用中,可以仅需要转换内部地址(就是“内部本地址”转换成“内部全局地址”),这是最典型的应用,如内部网络用户通过NAT转换共享上网:也可以是仅需要转换外部地址(就是“外 ...

  2. Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换

    JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...

  3. nat 类型及打洞原理

    nat 类型分4种 1.全锥形 full cone A 与 主机B交互,nat转换 A的内部地址及端口为  ip1 port1,ip1和port1为对外地址,任何机器能访问. 2.ip 受限制(对B而 ...

  4. NAT类型与穿透 及 STUN TURN 协议

    STUN : Simple Traversal of User Datagram Protocol [UDP] Through Network Address Translators [NATs] S ...

  5. 【转】NAT路由器打洞原理

    什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“ ...

  6. P2P技术详解(一):NAT详解——详细原理、P2P简介

    1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...

  7. NAT路由器打洞原理

    什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“ ...

  8. CCNP路由实验之十五 NAT(网络地址转换)

     CCNP路由实验之十五 NAT(网络地址转换) 众所周知,要让自己的电脑连上Internet,必须要到运营商(ISP)申请一个上网账号,依据此账号申请自己的宽频业务(拨号上网.商业固定IP等等) ...

  9. NAT( 网络地址转换) 实现

    NAT基本介绍: 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术.是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 ...

随机推荐

  1. springboot热部署如果不行

    如果热部署不行先看一眼 Project——>Build Automatically 看这个有没有打对勾,这是热部署的依赖

  2. Cogs 728. [网络流24题] 最小路径覆盖问题

    [网络流24题] 最小路径覆盖问题 ★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件 时间限制:1 s 内存限制:128 MB 算法实现题8-3 最小路径覆盖问题(习题8-1 ...

  3. C#实现代码生成器

    最近在用layui做后台管理,增删改查这些一成不变的东西写起来浪费大量时间,于是做了个简单的代码生成器快速生成 代码生成器的原理其实很简单,都是基于模板实现替换,Razor是个不错的选择(或者Nvel ...

  4. linux 搭建 jenkins 前端自动构建时,老是提示 sh: vue-cli-service: command not found

    如题. 在 shell 里面执行  env 发现一个   NODE_ENV=production  的环境变量,是这个东西的原因. 通过  unset NODE_ENV  命令去掉这个环境变量就可以了 ...

  5. Django从Models 10分钟建立一套RestfulApi

    目录 Django从Models 10分钟建立一套RestfulApi Django从Models 10分钟定制一个Admin后台 简介 Django是一套完善而强大的web开发框架, 结合Djang ...

  6. python 绘制五角星

    code import turtle n = eval(input("请输入五角星的长度")) turtle.begin_fill() #开始填充颜色 i = : turtle.f ...

  7. CSS3-弹性盒布局(Flex Box)

    弹性盒布局(Flex Box) 一.概念 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型 ...

  8. HTML5调用本地摄像头画面,拍照,上传服务器

    实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...

  9. 20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验二

    我们一个小组都在实验前40mins提前做完但是因为队员截图发的迟没能及时提交上蓝墨云班课的任务超时 希望老师能看见将我的经验改正,谢谢老师 https://www.cnblogs.com/xiannv ...

  10. python中selenium操作下拉滚动条方法

    场景:在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 解决方法: 在python中有几种方法解决这种问题,简单介绍下,给需要的人: 方法一)使用js脚本直接操作,方法如下: #将页面滚动条拖到 ...