IPv4 NAT(含Cisco配置)

IPv4 NAT(含Cisco配置)

IPv4私有空间地址

RFC 1918 内部地址范围前缀
A10.0.0.0 - 10.255.255.25510.0.0.0/8
B172.16.0.0 - 172.31.255.255172.16.0.0/12
C192.168.0.0 - 192.168.255.255192.168.0.0/16

这些私有地址可在企业或站点内使用,允许设备进行本地通信。但是,由于这些地址并不代表任何公司或组织机构,因此私有IPv4地址不能在互联网上路由。为了使具有私有 IPv4 地址的设备能够访问本地网络之外的设备和资源,必须首先将私有地址转换为公有地址。

NAT 提供了私有地址到公有地址的转换,NAT的类型。这样做可以使拥有私有IPv4地址的设备可以访问私有网络外部的资源,比如互联网上的资源。

NAT的概念

NAT 有很多作用,但其主要作用是节省了公有 IPv4 地址。它通过允许网络在内部使用私有 IPv4地址,而只在需要时提供到公有地址的转换,从而实现这一作用。NAT还在一定程度上增加了网络的隐私性和安全性,因为它对外部网络隐藏了内部IPv4地址。

可以为启用 NAT 的路由器**配置一个或多个有效的公有 IPv4 地址。**这些公有地址称为 NAT 地址池。当内部设备将流量发送到网络外部时,启用 NAT 的路由器会将设备的内部 IPv4 地址转换为NAT 池中的一个公有地址。对外部设备而言,所有进出网络的流量好像都有一个取自所提供地址池中的公有 IPv4 地址。

NAT 路由器通常工作在末端网络边界。末节网络是指这一个或多个网络与它的邻居网络之间只有单条连接,网络流量只有单条路入、单条路出。在图中的示例中,R2 为边界路由器。对 ISP 来说,R2 构成末端网络。

当末端网络内的设备想要与其网络外部的设备通信时,会将数据包转发到边界路由器。边界路由器会执行 NAT 过程,将设备的内部私有地址转换为公有的外部可路由地址。

NAT术语

由于本文主要讲IPv4的NAT,“地址”一词如果没有特殊说明默认指IPv4地址。

  • 内部本地地址:内部网络设备看到的源IPv4地址。
  • 内部全局地址:网络外部看到的源IPv4地址。当发至外部的数据包经过NAT网关时,源IPv4地址会变成内部全局IPv4地址。
  • 外部本地地址:外部设备看到的目的IPv4地址。这通常是分配给互联网主机的全局可路由地址。大多数情况,外部本地地址与外部全局地址是一样的。
  • 外部全局地址:网络内部设备看到的目的IPv4地址。

在决定使用哪一种地址时,重要的是记住NAT术语始终是从具有转换后地址的设备的角度来应用的:

  • 内部地址:经过NAT转换的设备IP地址
  • 外部地址:目的设备的IP地址

关于地址,NAT还会使用全局或本地的概念:

  • 本地地址:出现在网络内部的IP地址
  • 全局地址:出现在网络外部的IP地址

静态NAT

静态NAT使用本地地址和全局地址一对一映射,由管理员进行配置,保持不变。

在图中,R2 上配置了 Svr1、PC2 和 PC3 的内部本地地址的静态映射。这些设备在向互联网发送流量时,它们的内部本地地址会转换为管理员配置的内部全局地址。对外部网络的设备而言,这些设备使用的是公有IPv4地址。

如果Web服务器或设备必须拥有固定的地址,以便能够让其他设备从互联网发起访问的话 比如公司的Web服务器),静态NAT就尤为有用。

静态NAT也适用于这种情况:只有拥有授权的人员才能够从互联网对设备进行访问,发起访问的并不是互联网上一般的公有设备。举例来说,网络管理员可以从PC4上使用SSH来访问SRV1的内部全局地址 209.165.200.226)。R2会把这个内部全局地址转换为内部本地地址192.168.10.10,然后把会话连接到SRV1。

为了满足所有同时发生的用户会话需要,静态 NAT 要求有足够的公有地址可用。

动态NAT

动态 NAT 使用公有地址池,并以先到先得的原则分配这些地址。内部设备请求访问外部网络时,动态 NAT 分配该池中的可用公共 IPv4 地址。

如图所示,PC3使用的是动态NAT池中第5个可用地址连接的互联网。而其他地址仍可供使用。与静态 NAT 类似,为了满足所有同时发生的用户会话需要,动态 NAT 要求有足够的公有地址可用。

端口地址转换

PAT

端口地址转换(PAT),也称为NAT过载,可以可以将多个地址映射到一个或少数几个地址,因为每个私有地址也会用端口号加以跟踪。当设备发起 TCP/IP 会话时,它会生成一个 TCP 或 UDP源端口号,或专门为 ICMP 分配的查询 ID,用来唯一地标识这个会话。当 NAT 路由器收到来自客户端的数据包时,将使用其源端口号来唯一确定特定的 NAT 转换。

当 R2 处理各数据包时,它使用端口号 本例中为 1331 和 1555)来识别发起数据包的设备。

源地址( SA)为内部本地地址,再加上TCP/UDP分配的端口号。目的地址 (DA)为外部全局地址,再加上服务器端口号。在本示例中,HTTP 服务端口为 80。

对于源地址,R2会将内部本地地址转换为内部全局地址,并添加端口号。

当Web服务器回复的时候,路径相反。

下一可用端口

上图中,启用NAT的路由器上客户端的端口号没有改变,这种情况不太常见。因为这些端口可能被其他服务所占用。

PAT会尝试保留原始的源端口,但是端口若被占用,PAT就会从相应的端口组(0-511、512-1023或1024-65535)中分配第一个可用的端口号。

如果地址池外部地址多于一个,则PAT会进入下一地址并尝试重新分配原始端口号。

不包含传输层数据段的数据包

如果IPv4数据包不包含传输层数据段,这些数据包将不包含传输层端口号。PAT 可以转换 IPv4 承载的大多数常用协议,这些协议不会将 TCP 或 UDP 用作传输层协议。其中最常见的一种就是 ICMPv4。

对于每种类型的协议,PAT 会以不同方式进行处理。例如,ICMPv4 查询消息、响应请求和响应应答会包含一个查询 ID。ICMPv4 使用查询 ID 来识别响应请求及其相应的响应应答。每发送一个响应请求,查询 ID 都会增加。PAT 将会使用查询 ID 而不是传输层端口号。

Cisco配置命令

静态NAT配置

以上图为例,内部网络中包含一台Web服务器,它使用了私有IPv4地址。路由器R2上配置了静态NAT,允许外部网络上的设备能够访问这台Web服务器。外部网络中的客户端使用公网IPv4访问Web服务器。

首先,建立内部本地地址与内部全局地址的映射关系。我们使用下面的命令,在R2上将192.168.10.254这个内部本地地址映射到209.165.201.5上。

R2(config)# ip nat inside source static 192.168.10.254 209.165.201.5

接下来,将参与转换的接口配置为内部或外部接口(对于NAT而言)。上图中的R2的S0/1/0就是内部接口,而S0/1/1外部接口

R2(config)# interface serial 0/1/0
R2(config-if)# ip address 192.168.1.2 255.255.255.252
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface serial 0/1/1
R2(config-if)# ip address 209.165.200.1 255.255.255.252
R2(config-if)# ip nat outside

在PC上访问Web服务器资源,其过程如下图所示:

此外,我们可以在R2路由器上特权模式下使用命令,来显示活动的NAT转换

R2# show ip nat translations

由于该示例是静态NAT配置,因此无论是何种配置,转换都会在NAT表里

Pro Inside global Inside local Outside local Outside global
--- 209.165.201.5 192.168.10.254 --- ---
Total number of translations: 1

如果在活跃会话过程中执行了上述命令,命令输出中就会显示外部设备的地址:

Pro Inside global Inside local Outside local Outside global
tcp 209.165.201.5 192.168.10.254 209.165.200.254 209.165.200.254
--- 209.165.201.5 192.168.10.254 --- ---
Total number of translations: 2

如果想要查看活动转换总数、NAT配置参数、地址池地址数量、已分配地址数量,可用以下命令:

R2# show ip nat statistics

动态NAT

图中描述了一对一的 NAT 转换。内部网络中有两台 PC 连接到路由器 R1,两台 PC 分别位于192.168.10.0/24192.168.11.0/24网络中。其中一台PC的IP地址是192.168.10.10,另一台PC的IP地址是192.168.11.10。R1通过S0/1/0接口连接路由器R2。R2通过S0/1/1接口连接互联网,互联网上有一台服务器IP地址为209.165.200.254。R2通过动态NAT来实现内部网络和外部网络之间的转换。

这个公有 IPv4 地址池(内部全局地址池)根据先到先得的原则,分配这些地址给内部网络中的任何设备。

使用动态 NAT 时,单个内部地址将转换为单个外部地址。在使用这种类型的转换时,地址池中必须有足够的地址,才能满足所有内部设备访问外部网络的需求。如果地址池中的所有地址都被使用了,其他设备必须等到有可用地址时,才能访问外部网络。

注意:在公有和私有IPv4地址之间执行转换,是当前NAT最常见的用途。不过,我们也可以使用NAT在任意一对IPv4地址之间执行转换。

首先,定义用于转换的地址池。该地址池通常是一组公有地址。这些地址是通过指明池中的起始 IPv4 地址和结束 IPv4 地址而定义的。netmask 或 prefix-length 关键字指示出哪些地址位属于网络部分,哪些地址位属于这个地址范围中的主机部分。

R2(config)# ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask
255.255.255.224

然后配置一个标准 ACL,用于仅标识(允许)那些将要进行转换的地址。范围太宽的 ACL 可能会导致意料之外的后果。要记住在每个ACL的末尾都有一条隐式 deny all 语句。

R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255

把ACL绑定到地址池:

R2(config-if)# ip nat inside source list 1 pool NAT-POOL1

指定NAT转换接口

R2(config)# interface serial 0/1/0
R2(config-if)# ip nat inside
R2(config)# interface serial 0/1/1
R2(config-if)# ip nat outside

PAT

单个PAT

要在配置PAT时只使用单个IPv4地址,只需要把关键字 overload 添加到ip nat inside source命令中即可。其他配置与静态或动态NAT配置类似,只是在PAT配置中,多台主机可以使用相同的公有IPv4地址来访问互联网。

在本例中,网络192.168.0.0/16中的所有主机(匹配ACL 1)在通过路由器R2向互联网发送流量时,数据包的源地址会被转换为IPv4地址209.165.200.225 (S0/1/1接口的IPv4地址)。由于配置了 overload 关键字,路由器会使用NAT表中的端口号来识别通信流量。

R2(config)# ip nat inside source list 1 interface serial 0/1/1 overload
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
R2(config)# interface serial0/1/0
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface Serial0/1/1
R2(config-if)# ip nat outside
配置PAT来使用地址池

ISP 可以向组织机构分配多个公有 IPv4 地址。在这种场景中,组织机构可以配置PAT来使用一个IPv4公有地址池进行转换。如果某个站点发出了多个公有 IPv4 地址,这些地址可能是 PAT 使用的地址池的一部分。如果让较多的设备共享一个较小的地址池,那么就会有多台设备使用相同的公有IPv4地址访问互联网。要在配置PAT时使用动态NAT地址池,只需要把关键字 overload 添加到ip nat inside source 命令中即可。

在本例中,NAT-POOL2中绑定了一个ACL,其中限定了要转换的地址是192.168.0.0/16。因为命令中使用关键字 overload 启用了PAT,因此这些主机可以共享地址池中的IPv4地址。

R2(config)# ip nat pool NAT-POOL2 209.165.200.226 209.165.200.240 netmask
255.255.255.224
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
R2(config)# ip nat inside source list 1 pool NAT-POOL2 overload
R2(config)#
R2(config)# interface serial0/1/0
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface serial0/1/1
R2(config-if)# ip nat outside

关于IPv6的NAT简要说明

由于很多网络同时使用了IPv4和IPv6,因此需要有一种方法能够在IPv6环境中使用NAT。在 IPv6环境中集成 NAT。具有 128 位地址的 IPv6 可以提供 340 涧 10 的 36 次方)个地址。因此,不会出现地址空间耗尽问题。IPv6的开发初衷,就是为了免除公有和私有IPv4地址之间的IPv4 NAT转换。但IPv6中也确实有自己的IPv6私有地址空间,也就是唯一本地地址 ULA)。

IPv6中的唯一本地地址 ULA)与RFC 1918规范中的IPv4私有地址类似,但它们的用途不同。ULA地址只用于一个站点内部的本地通信。ULA地址并没有提供额外的IPv6地址空间,也没有提供安全性。

IPv6在IPv4和IPv6之间提供的协议转换称为NAT64。

用于 IPv6 的 NAT 与用于 IPv4 的 NAT 使用背景大不相同。用于IPv6的NAT是为了在纯IPv6和纯IPv4网络之间提供透明传输,如图所示。而不是用作一种私有 IPv6 到全局 IPv6 的转换。

图中描述了 NAT64 或 IPv6 NAT 转换。名为NAT64的路由器连接着IPv4互联网、IPv6互联网和纯IPv6网络。原生的IPv6流量显示在IPv6网络中,NAT64转换后的流量显示在IPv4网络中。

理想情况下,只要有可能,IPv6 就应当在本地运行。这意味着 IPv6 设备将通过 IPv6 网络相互通信。但是,为了帮助实现从 IPv4 到 IPv6 的转移,IETF 已经开发了多项过渡技术以满足各种IPv4 到 IPv6 的转移情景,包括双堆栈、隧道和转换。

双栈是指设备上同时运行与IPv4和IPv6相关联的协议。IPV6 隧道是指将 IPv6 数据包封装到IPv4 数据包中的过程。这将使 IPv6 数据包能够通过仅支持 IPv4 的网络传输。

我们不应该把IPv6 NAT作为一种长期策略使用,但它可以作为临时机制来协助从IPv4到IPv6的迁移。多年来,已经开发了多个用于 IPv6 的 NAT 的类型,包括网络地址转换-协议转换 (NAT-PT)。

IETF 已弃用 NAT-PT,开始倾向于其替代者 NAT64。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Python的第三天

学习Python的第三天,我开始深入Python的基本语法和特性,并通过编写一些简单的代码来加深理解。以下是我今天学习的一些代码案例: 1. 函数定义与调用 # 定义一个函数,计算两个数的和 def add_numbers(a, b):return a b# 调用函数…

从零开始的软件测试学习之旅(四)web项目工作流程介绍

WEB手工项目 项目介绍项目技术分析项目学习准备工作如何快速熟悉项目举例熟悉TPshop项目 总体系统项目介绍项目与数据库测试流程什么是软件需求需求评审 测试计划测试方案测试计划和测试方案的区别 项目介绍 满足经典三层架构:前端 后端 数据库 前端:运行在用户端的浏览器和客…

同仁堂医养拟赴港上市,养老产业的盈利难题有了答案?

提及银发经济,大众可能最先想到的就是养老产业,在市场需求推动下,这一细分赛道的增长已势不可挡。单从入局者的积极性就可以把握到赛道前景之广阔。 天眼查专业版数据显示,截至目前,我国拥有养老相关企业36.2万家&…

线上办理离婚快速离婚,无需双方见面异地可办

现在离婚有两种方式 一种是协议离婚,双方都同意的情况下,可以去民政局协议离婚,有30天冷静期,冷静期过后需要双方再次去民政局办理离婚手续。 另一种是诉讼离婚,一方不同意离婚,可以选择诉讼离婚。可以全…

【PPT设计】颜色对比、渐变填充、简化框线、放大镜效果、渐变形状配图、线条的使用

目录 图表颜色对比、渐变填充、简化框线放大镜效果渐变形状配图 线条的使用区分标题与说明信息区分标题与正文,区分不同含义的内容**聚焦****引导****注解****装饰** 图表 颜色对比、渐变填充、简化框线 小米汽车正式亮相!你们都在讨论价格,我全程只关…

手写一个民用Tomcat (08)

这次我们Tomcat 的改动是 指责分离,同时引入一个Wrapper封装 我们的Processor 是负责处理处理请求的任务 我们的Connector 是负责通信的 详细代码如下 public class JxdHttpConnector implements Runnable {int minProcessors 3;int maxProcessors 10;int c…

vue2多语言包i8n

1.下包(我是vue2) yarn add vue-i18n8.2.1 --save2.建多语言实例化文件 /* 多语言实例化文件*/ /* 1. 导入VueI18n和Vue 再去main.js中挂载插件*/ import Vue from vue // 引入Vue import VueI18n from vue-i18n // 引入国际化的包 // 2.引入cookie工具 import Cookie from …

wpf 按钮禁用样式

在WPF中&#xff0c;要为按钮创建一个禁用样式&#xff0c;需要在资源字典中定义一个Style&#xff0c;该样式将应用于Button控件的IsEnabled属性为False时的状态。 以下是一个简单的例子&#xff1a; <Style TargetType"Button" x:Key"NormalButtonStyle&…

虚良SEO的权重蜘蛛是真的吗?

权重蜘蛛&#xff0c;又称为搜索引擎蜘蛛或爬虫&#xff0c;是搜索引擎用来抓取和索引网页内容的重要工具。这些自动化程序在互联网上漫游&#xff0c;收集和分析信息&#xff0c;以帮助搜索引擎提供准确、相关和有用的搜索结果。权重蜘蛛的工作机制和特性对于理解搜索引擎优化…

jackson.dataformat.xml 反序列化 对象中包含泛型

重点&#xff1a; JacksonXmlProperty localName 指定本地名称 JacksonXmlRootElement localName 指定root的根路径的名称&#xff0c;默认值为类名 JsonIgnoreProperties(ignoreUnknown true) 这个注解写在类上&#xff0c;用来忽略在xml中有的属性但是在类中没有的情况 Jack…

边缘计算概述_5.边缘计算应用场景

1.智慧园区 智慧园区建设是利用新一代信息与通信技术来感知、监测、分析、控制、整合园区各个关键环节的资源&#xff0c;在此基础上实现对各种需求做出智慧的响应&#xff0c;使园区整体的运行具备自我组织、自我运行、自我优化的能力&#xff0c;为园区企业创建一个绿色、和谐…

python_django农产品物流信息服务系统6m344

Python 中存在众多的 Web 开发框架&#xff1a;Flask、Django、Tornado、Webpy、Web2py、Bottle、Pyramid、Zope2 等。近几年较为流行的&#xff0c;大概也就是 Flask 和 Django 了 Flask 是一个轻量级的 Web 框架&#xff0c;使用 Python 语言编写&#xff0c;较其他同类型框…

Eclipse C++ 无法debug 问题

环境&#xff1a; ubuntu20.04 Eclipse CDT&#xff08;x86_64) 工程&#xff0c;使用的是默认的CMake Project 现象&#xff1a; 1. 使用Eclipse&#xff0c; 加了断点后&#xff0c;debug 无法停在断点&#xff1b;step over 执行后是从main 直接执行到exit &#xff…

python爬取电影

这是一个简单的Python代码示例&#xff0c;使用requests和BeautifulSoup库来爬取电影信息。这个示例将从一个电影网站&#xff08;比如IMDb&#xff09;上抓取电影的标题。请注意&#xff0c;这个代码只是一个示例&#xff0c;并且网站的结构可能会发生变化&#xff0c;导致代码…

poi-tl自定义渲染策略学习

文章目录 实现逻辑参考代码注意点 实现逻辑 自定义渲染策略实现逻辑&#xff1a; 找到模板中的表格标签render方法接收java中对应模板表格标签的所有list数据执行自定义渲染逻辑 参考代码 word模板如下&#xff1a; 实体类&#xff1a; Data public class GksxRowData {/…

Linux多进程(二)进程通信方式三 共享内存

共享内存提供了一个在多个进程间共享数据的方式&#xff0c;它们可以直接访问同一块内存区域&#xff0c;因此比使用管道或消息队列等通信机制更高效。在多进程程序中&#xff0c;共享内存通常与信号量一起使用&#xff0c;以确保对共享内存的访问是线程安全的。 一、打开/创建…

07_for循环返回值while循环

文章目录 1.循环返回值2.yield接收for返回值3.scala调用yield方法创建线程对象4.scala中的while循环5.scala中的流程控制 1.循环返回值 for循环返回值是Unit 原因是防止产生歧义&#xff1b; 2.yield接收for返回值 // 2.yield关键字打破循环&#xff0c;可以使for循环输出…

webpack面试题(持续汇总ing。。。)

webpack的编译过程 初始化 此阶段&#xff0c;webpack会将CLI参数、配置文件、默认配置进行融合&#xff0c;形成一个最终的配置对象。对配置的处理过程是依托一个第三方库 yargs 完成的。此阶段相对比较简单&#xff0c;主要是为接下来的编译阶段做必要的准备目前&#xff0c;…

LLaMA 3:大模型之战的新序幕

作者 | 符尧 OneFlow编译 翻译&#xff5c;杨婷、宛子琳、张雪聃 本文要点概览&#xff1a; 文本数据的扩展可能已经达到了极限&#xff0c;因为易于获取的网络文本资源&#xff08;如Common Crawl、GitHub、ArXiv等&#xff09;已基本被充分利用。 尽管如此&#xff0c;通过更…

数据结构 - C/C++ - 数组

目录 结构特性 内存布局 结构样式 结构拓展 数据初始 元素访问 插入元素 删除元素 查找元素 修改元素 结构设计 成员变量 构造函数 功能函数 示例代码 结构特性 长度固定&#xff1a;数组的长度在创建时已经被确定&#xff0c;如果需要动态改变数组的长度&#…