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. Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)

    Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...

  2. LINUX 字体查看 字体更改mkfontdir

    Linux下字体查看: #fc-list :lang=zh 字体更改: 首先找到相应的字体库:simsun.ttf 宋体 #mkdir -p /usr/share/fonts/truetype //创 ...

  3. shell练习1

    题目 把ls -l 的输出按照属主分类,打印每个属住的文件名 ls -l |sed -n '2,$p'| awk ' {hash[$]=hash[$]} END{ for (user in hash) ...

  4. python桶排序代码

    代码基于3.8 def bucketSort(nums): #选择一个最大的数 max_num = max(nums) # 创建一个元素全是0的列表, 当做桶 bucket = [0]*(max_nu ...

  5. Going Deeper with Convolutions阅读摘要

      论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...

  6. redis数据类型及订阅操作

    Redis数据类型详解 Redis键/值介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如“foo”的简单字符串到一个JPG文件的内容都可以.空字符串也是有效k ...

  7. cat中文正常vi中文乱码

    Linux cat中文正常vi中文乱码 问题示例 出现此问题,有可能是vim 编辑器的配置编码方面的问题. 出现此情况,在vim 编辑器中输入 :e ++enc=utf8 :e ++enc=zh_CN ...

  8. Laravel中Session的使用

    以file为示例 1.Http request session方法$request->session()->put('key1','value1');echo $request->s ...

  9. eclipse下生成Java类图和时序图,生成UML图

    1.安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF采用eclipse在线安装方式安装就好.eclipse在线安装GEF的地址:http://download.ecli ...

  10. 小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战

    笔记 6.服务注册和发现之Eureka Client搭建商品服务实战     简介:搭建用商品服务,并将服务注册到注册中心 1.创建一个SpirngBoot应用,增加服务注册和发现依赖     2.模 ...