NAT基础:NAT技术原理,静态NAT、动态NAT、NAPT、Easy IP、NAT Server的原理,以及各NAT的配置方法和转换示例。

article/2025/10/4 0:48:28

目录

 

NAT 技术原理:

 静态NAT原理:

静态NAT(土豪用法):

 NAT转换示例:

 静态NAT配置方法介绍:

1、方式一:

2、方式二:

静态NAT的配置实例:

动态NAT原理:

动态NAT转换示例(1):

动态NAT配置介绍:

NAPT原理:

NAPT的配置方法:

 查看nat映射表:

Easy IP:

 Easy IP配置方法:

 NAT Server(静态PAT):

 NAT Server转换示例:

NAT Server配置示例:


NAT 技术原理:

NAT:对IP数据报文中的IP地址进行转换,是一种在现网中被广泛部署的技术,一般部署在网络出口设备,例如路由器或防火墙上。

        NAT的典型应用场景,在私有网络内部(园区、家庭)使用私有地址,出口设备部署NAT,对于“从内到外”的流量,网络设备通过NAT将数据包的源地址进行转换(转换成特定的公有地址),而对于“从外到内的”流量,则对数据包的目的地址进行转换。

        通过私有地址的使用结合NAT技术,可以有效节约公网IPv4地址。

 静态NAT原理:

静态NAT(土豪用法):

        一个私有地址对应并固定一个公有地址,现在企业几乎不会使用(因为并不会节省公网IP地址,也并不安全,因为可以直接通过公网地址找到主机。)

        每个私有地址都有一个与之对应并且固定的公有地址,即私有地址和公有地址的关系是一对一的映射。

支持双向互访:

        私有地址访问Internet经过出口设备NAT转换时,会被转换成对应的公有地址。同时,外部网络访问内部网络时,其报文中携带的公有地址(目的地址)也会被NAT设备转换成对应的私有地址。

 NAT转换示例:

 静态NAT配置方法介绍:

1、方式一:

接口视图下配置静态NAT,在连接外网的接口上配置:

给每个私有地址都配置一个公有地址,一对一转换(土豪用法)

nat static global +(gloval-address--公网地址) inside +(host-address--内网主机的私网地址)例:
nat static global 10.10.1.1 inside 192.168.1.1

2、方式二:

1、系统视图下配置静态NAT:

nat static global +(global-address) inside +(host-address)

配置命令相同,视图为系统视图,之后在具体的接口下开启静态NAT

2、进入需要开启NAT的接口,在接口下启用NAT static功能:

nat static enable

 给多个主机配置静态NAT示例:

静态NAT的配置实例:

一个公网地址对应一个私网地址。

配完后需要在公网路由器配置回来的路由,回来时目标地址的私网地址改成公网地址即可。

动态NAT原理:

动态NAT:静态NAT严格地一对一进行地址映射,这就是导致即便内网主机长时间离线或者不发送数据时,与之对应的公有地址也处于使用状态,为了避免地址浪费,动态NAT提出了地址池的概念:所有可用的公有地址组成的地址池。

        当内部主机访问外部网络时,临时分配一个地址池中未使用的地址,并将改地址标记为“In Use”。当该主机不在访问外部网络时回收分配的地址,重新标记为“Not Use”。

        地址池中有多少个公网地址,就可以有多少个主机一起上网。例如有三个公网地址,那就有三个主机可以一起上网,第四个主机想要上网时会因为没有公网地址而访问不了外网。只能等待分配出去的公网地址被回收,才能被分配到公网地址上网。所以在现在的阶段,动态NAT也是使用的比较少的。

动态NAT转换示例(1):

        首先把公网地址组成一个地址池,当内网主机要访问外网的时候,报文到达了路由器,路由器会根据地址池中没有被使用的地址,在没有使用的地址中给他分配一个,做地址转换,然后把这个分配过去的公网地址做上“In Use”的标记,表示正在使用。 然后将数据发送给外网。

        这样就会产生一个临时的NAT表项,生成的是临时的NAT映射表。如果这个公网地址长时间没有与外网通信,这个临时的NAT表项里的地址会存在老化现象,老化就相当于被删掉了,最后会被回收到动态NAT地址池,等待重新分配。如果表项不断的转换地,老化时间就会不断刷新,如果没有转换地址,老化时间到了,改地址就会被回收。

 注意:

        动态的地址分配是看地址池中哪个地址空闲了,才做出的临时分配。例如上午获取的公网地址时122.1.2.2,中午出去吃饭空闲了,地址被回收了。下午再来时访问外网被分配的地址可能就是122.1.2.3了。

        所以说动态NAT地址分配的公网地址不是固定的,而是会存在变化的。

        而静态NAT配置好后,公网地址是固定不变的,内网主机会一直使用这个静态NAT分配的公网地址。

        回包时也是根据映射表查看公网地址对应的私网地址,进行地址转换,发送到内网主机。

动态NAT配置介绍:

1、创建地址池:

nat address-group group-index start-address end-address 配置公有地址范围,其中group-index为地址池编号,start-address、end-address分别为地址池起始地址、结束地址。例:
nat address-group 1 122.1.2.1 122.1.2.3  --- 允许三个用户同时访问外网,因为地址池有三个外网地址。

第一步配置地址池范围,可以配置一个公网地址,也可以配置一个范围的公网地址。有多少个公网地址就有多少个主机可以同时访问外网,所以现在动态NAT用的也比较少。

2、配置地址转换ACL规则:

Acl number
Rule permit source source-address source-wildcard配置基础acl,匹配需要进行动态转换的源地址范围。例:acl 2000
Rule 5 permit source 192.168.1.0 0.0.0.255   --- 允许192.168.1.0这个网段的IP地址使用这个地址池。

        配置第二步的作用是允许某网段IP地址通过,只对这个范围的IP地址进行NAT地址转换,限制其他网段或其他范围的IP地址进行NAT地址转换。

        在有多个地址池时,用acl访问控制列表可以控制哪些内网地址用哪个地址池。

3、接口视图下配置带地址池的NAT Outbound:

Nat outbound acl-number address-group group-index [no-pat] ---动态nat末尾一定要加no-pat例:
进入外网出口:
nat outbound 2000 address-group 1 no-pat    ---acl编号+地址池编号+no-pat   只有报文的源地址匹配访问控制列表的时候,才会允许使用这个地址池中的地址。

 接口下关联ACL与地址池进行动态地址转换,no-pat参数指定不进行端口转换

注:第三步配置好后,要将对方路由器配置路由表,配置的回程路由目的地址是地址池中的地址,要让转换的地址有回来的路。

no-pat(No-Port Address Translation,非端口地址转换

动态NAT选择地址池中的地址进行地址转换时不会转换端口号,即No-PAT

 

 动态nat在华为ensp模拟器中不能够很好的实现,所以不推荐在模拟器上配置。

NAPT原理:

1、NAPT的NAT映射表比动态NAT的NAT映射表多了端口号,不同的私网地址会被分配到不同的端口号。同个公有地址也会被分到不同的端口号。

2、在做地址转换时,一个公有地址会被分配到不同的端口号,对应多个私有地址。

3、回包的时候也是依靠NAT映射表中的地址端口号,查找与之对应的地址进行回包。

4、相同的公网地址回包时,就是依靠端口号进行区分。然后找到该端口号对应的私有地址进行回包。

5、在做地址转换时,NAT映射表中公有地址端口号是不会重复的,除非老化后,该端口号被回收,该端口号才会被重新分配。详情可看产品手册。

6、使用NAPT技术的话,理论上一个公有地址可以被分配到65535+65535个端口号(TCP 1-65535 UDP 1-65535),也就是说一个公有地址可以分配给几万个个私有地址使用。

NAPT与动态NAT的区别:

1、动态NAT选择地址池中的地址转换时不会转换端口号,即no-pat,动态nat是非端口地址转换。公有地址与私有地址还是1:1的映射关系,无法提高公有地址利用率。

2、NAPT(Network address and port Translation,网络地址端口转换),NAPT是网络地址端口转换 :从地址池中选择地址进行地址转换时不仅转换IP地址,同时也会对端口号进行转换,从而实现公有地址与私有地址的1:N映射(一个公有地址对应多个私有地址),可以有效提高公有地址的利用率。

NAPT的配置方法:

对比动态NAT的配置方法,NAPT只需要在动态NAT的基础上,把no-pat删掉即可。

 查看nat映射表:

Dis nat session all 

Easy IP:

Easy IP:实现原理和NAPT相同,同时转换IP地址、传输层端口,区别在于Easy IP没有地址池的概念,使用接口地址做为NAT转换公有地址。

        Easy IP适用于不具有固定公网IP的场景:如通过DHCP、PPPoE拨号获取的私有网络出口,可以直接获取到的动态地址进行转换。

        Easy IP适用于小型公司或者家庭网络,没必要让运营商分配公有地址的时候使用。这时候就可以直接利用出口路由器的外网接口的地址来做一个NAPT。

 Easy IP配置方法:

  1. 直接创建ACL列表
  2. 配置访问规则,允许哪些内网用户进行地址转换
  3. 进入外网接口使用命令:nat outbound 2000    ---(首先接口要配置IP地址,才能转换)

将通过的数据IP地址转换成接口的IP地址

Easy IP配置示例:

只需要用ACL将内网主机的地址段规定好,然后在在外网接口上直接用就行了

 NAT Server(静态PAT):

NAT Server和静态NAT类似。

静态NAT 是 地址的一对一转换,允许外部主机访问内网主机的所有端口,可以双向互访,不安全。

NAT Server 是地址和端口的 一对一转换,只能让外部主机访问内网服务器的特定端口,更加的安全,仅支持单项互访,及外网主动访问内网。一般用于提供外网主机访问内网服务器的场景。

NAT Server使用场景:

NAT Server:指定[公有地址:端口]与[私有地址:端口]的一对一映射关系,将内网服务器映射到公网,当私有网络中的服务器需要对公网提供服务时使用。

外网主机主动访问[公有地址:端口]实现对内网服务器的访问。

当希望外部设备访问公司内部服务的时候,就可以使用NAT Server技术,可以让外部设备访问设定好的服务,不能访问公司所有服务,只允许访问这些允许访问的服务。

 NAT Server转换示例:

 

NAT Server配置示例:

在R1上配置NAT Server将内网服务器 192.168.1.10的80端口映射到公有地址122.1.2.1的8080端口。

配置方法:

1、进入连接外网接口:

2、进入接口后配置公有IP地址

3、配置nat server 转换,将Tcp协议访问202.10.10.1为目标地址的数据转换成192.168.1.10 8080端口。

nat sever protocol tcp global 202.10.10.1(运营商分配的公有地址) www inside 192.168.1.10 8080


http://chatgpt.dhexx.cn/article/rvv8uQAx.shtml

相关文章

NAT、Napt(地址转换技术)详解

NAT的由来 IPv4即网际网协议第4版——Internet Protocol Version 4的缩写。IPv4定义一个跨越异种网络互连的超级网,它为每个网际网的节点分配全球唯一IP地址。如果我们把Internet比作一个邮政系统,那么IP地址的作用就等同于包含城市、街区、门牌编号在内…

静态NAT、NAT server、NAPT区别

NAT NAT(Network Address Translation网络地址转换)是将IP数据报文头中的IP地址转换为另一个IP地址的过程。 NAPT(Network Address Port Translation网络地址端口转换)可以实现并发的地址转换。 它允许多个内部地址映射到同一个…

IP协议与NAT/NAPT技术

文章目录 IP协议一、什么是IP协议1、IPv4协议报文格式关于分片 2、IP地址3、子网划分与CIDR4、特殊的IP地址5、公网IP和私网IP6、IP地址的分配(DHCP) 二、NAT/NAPT技术1、接口与IP的关系2、路由器的LAN口与WAN口3、NAPT的基本工作原理 三、IPv4与IPv6四、ICMP协议1、关于ping命…

NAT与NAPT技术详解

一、定义 NAT: Network Address Transfer 网络地址转换。虚拟机。 NAPT: Network Address Port Transfer 网络地址端口转换。也叫PAT。内网路由器或FW。 NAT和NAPT的功能是完成内部私有地址和全局网络地址的转换,让计算机能与外界网络通信。其属接入广域网(WAN)技…

Queue与Deque的区别

前言 ​ 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque,平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知道Queue的作用,于是就直接官方文档好了。 正文…

【C++】deque的实现原理简单介绍

前言 deque被称为双端队列,它的出现主要是为了结合vector和list的优点并减小它们的缺点,实际上deque确实结合了vector和list的优点减小了它们的缺点,但是它的结合也让它自己的优点没有原始的vector和list那么极致,导致deque变得很…

C++容器deque的用法

目录 1.deque容器概念 2.deque对象的构造 2.1deque对象的默认构造 2.2deque对象的带参数构造 3.deque头部和末尾的添加移除操作 4.deque的数据存取 5.deque与迭代器 6.deque的赋值 7.deque的大小 8.deque的插入 9.deque的删除 1.deque容器概念 deque容器概念 deque是…

C++ deque

C deque 简介 所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速…

C++ queue 和 deque的区别

从使用的角度来讲主要差别就是&#xff1a; deque支持push_front、pop_front、push_back、pop_back。 queue支持push_back、pop_front。 ---------------------------------------------------------------------------- deque是双端队列 #include<deque>template&l…

C++——deque

文章目录 Deque 与 vector 的异同点构造操作非更易型操作更易型操作使用例子 容器 deque (发音为“deck”)和 vector 非常相似。它也采用dynamic array来管理元素&#xff0c;提供随机访问&#xff0c;并有着和 vector 几乎一模一样的接口。不同的是 deque 的 dynamic array 头…

C++中deque用法详解

deque函数&#xff1a; deque容器为一个给定类型的元素进行线性处理&#xff0c;像向量一样&#xff0c;它能够快速地随机访问任一个元素&#xff0c;并且能够高效地插入和删除容器的尾部元素。但它又与vector不同&#xff0c;deque支持高效插入和删除容器的头部元素&#xff0…

python中的deque模块(collections的deque模块)

目录 1. deque是python的collections中的一个类 2.deque的简单使用以及它的方法 2.1 创建deque的方法 2.2 创建deque时&#xff0c;并指定大小maxlen&#xff0c;即能装几个元素&#xff0c; 以及deque添加元素append()方法 2.3 deque的 appendleft()方法 2.4 deque的 clear()…

C++中deque的用法(超详细,入门必看)

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 如果本文对你有所帮助的话&#xff0c;希望可以点赞&#x1f44d;收藏&#x1f4c2;支持一下哦&#xff01; 期待…

Java数据结构之Deque

Java数据结构之Deque 引题Deque接口分析Deque的注释与Queue的联系还在使用Stack&#xff1f;你OUT啦&#xff01;peek方法更方便与List的不同与null说goodbye 子类ArrayDeque.class分析基本结构官方的代码图解数据存储过程 简单思考 1部分代码的分析关于初始容量关于扩容代码中…

java关于Deque的使用

定义 双向队列&#xff1a;支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除元素。 Queue的…

【C++】deque的用法

目录 一、容器适配器二、deque的介绍三、deque的使用及缺陷1、deque的构造函数2、deque的元素访问接口3、deque的 iterator的使用4、deque的增删查改4、deque的缺陷5、为什么选择deque作为stack和queue的底层默认容器 一、容器适配器 在了解deque前&#xff0c;我们先讲一讲什…

Python deque的用法介绍

Python deque的用法介绍 deque 是Python标准库 collections 中的一个类&#xff0c;实现了两端都可以操作的队列&#xff0c;相当于双端队列&#xff0c;与Python的基本数据类型列表很相似。 Python实现双端队列参考&#xff1a;https://blog.csdn.net/weixin_43790276/artic…

C++ deque的用法与示例

C deque的用法与示例 deque容器的介绍 Vector 容器是单向开口的连续内存空间&#xff0c;deque 则是一种双向开口的连续线性空间。所谓的双向开口&#xff0c;意思是可以在头尾两端分别做元素的插入和删除操作&#xff0c;当然&#xff0c;vector 容器也可以在头尾两端插入元…

deque用法详解

“无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。” deque函数&#xff1a; …

deque容器详解

文章目录 1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque插入和删除6. deque数据存取7. deque排序 1. deque容器基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部…