【计算机网络】IPv4 NAT

NAT使用背景

公有 IPv4 地址不足以为每台设备分配一个唯一地址来进行互联网连接。

这些私有地址可在企业或站点内使用,允许设备进行本地通信。但是,由于这些地址没有标识任何一个公司或企业,因此私有 IPv4 地址不能通过互联网路由。为了使具有私有 IPv4 地址的设备能够访问本地网络之外的设备和资源,必须首先将私有地址转换为公有地址。
在这里插入图片描述

NAT 提供了私有地址到公有地址的转换。这使具有私有 IPv4 地址的设备能够访问其私有网络之外的资源。NAT 与私有 IPv4 地址相结合,变为一个用于节约公有 IPv4 地址的有效方法。单个公有 IPv4 地址可以由数百甚至数千台设备共享,而为每台设备配置一个唯一的私有 IPv4 地址。

NAT 原理

在这里插入图片描述

NAT 有很多作用,但其主要作用是节省了公有 IPv4 地址

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

NAT 路由器通常工作在末节网络边界。末节网络是一个与其相邻网络具有单个连接的网络,而且单进单出。在图中的示例中,R2 为边界路由器。对 ISP 来说,R2 构成末节网络。

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

NAT地址类型

在这里插入图片描述

当使用 NAT 时,根据地址是在私有网络上还是在公有网络(互联网)上,以及流量是传入还是传出,不同的 IPv4 地址有不同的称谓。

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

内部地址 - 经过 NAT 转换的设备的地址。

外部地址 - 目标设备的地址。

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

本地地址 - 本地地址是在网络内部出现的任何地址。

全局地址 - 全局地址是在网络外部出现的任何地址。

所以,经过组合,NAT 包括四类地址:

  • 内部本地地址 - 从网络内部看到的源地址
  • 内部全局地址 - 从外部网络看到的源地址
  • 外部本地地址 - 从外部网络看到的目标地址
  • 外部全局地址 - 从网络内部看到的目标地址

在这里插入图片描述

图中,PC1 具有内部本地地址 192.168.10.10。从 PC1 的角度来讲,Web 服务器具有外部地址 209.165.201.1。当数据包从 PC1 发送到 Web 服务器的全局地址时,PC1 的内部本地地址将转换为 209.165.200.226(内部全局地址)。通常不会转换外部设备的地址,因为该地址一般是公有 IPv4 地址。

注意,PC1 具有不同的本地和全局地址,而 Web 服务器对于本地和全局地址都使用相同的公有 IPv4 地址。从 Web 服务器的角度来讲,源自 PC1 的流量好像来自 209.165.200.226(内部全局地址)。

NAT 路由器(图中的 R2)是内部和外部网络之间以及本地地址和全局地址之间的分界点。

静态NAT和动态NAT

NAT 转换有三种类型:

静态地址转换(静态 NAT)- 本地地址和全局地址之间的一对一地址映射。

动态地址转换(动态 NAT)- 本地地址和全局地址之间的多对多地址映射。转换在可用的基础上进行。例如,如果有 100 个内部本地地址和 10 个内部全局地址,则任何时候都只能转换 100 个内部本地地址中的 10 个地址。动态 NAT 的这种限制使得它在用于生产网络时没有端口地址转换那么实用。

端口地址转换 (PAT) - 本地地址和全局地址之间的多对一地址映射。此方法也称为过载(NAT 过载)。例如,如果有 100 个内部本地地址以及 10 个内部全局地址,PAT 使用端口作为附加参数来提供乘数效应,从而支持重复使用 10 个内部全局地址中的任何一个地址,重复次数高达 65,536 次(这取决于通信流是基于 UDP、TCP 还是 ICMP)。

NAT的优缺点

NAT 有许多优点,包括:

  • NAT 允许对内联网实行私有编址,从而维护合法注册的公有编址方案
  • NAT 增强了与公有网络连接的灵活性
  • NAT 为内部网络编址方案提供了一致性(组织可以更换 ISP 而不需要更改任何内部客户端)
  • NAT 提供网络安全(隐藏用户 IPv4 地址)

但是, 互联网上的主机看起来是直接与启用 NAT 设备通信,而不是与私有网络内部的实际主机通信,这一事实会造成几个问题:

  • 影响网络性能
  • 端到端编址的丢失
  • 端到端 IPv4 可追溯性也会丧失
  • 使隧道协议的使用变得复杂
  • 源TCPl连接可能会中断

配置静态NAT

静态 NAT 是内部地址与外部地址之间的一对一映射。
在这里插入图片描述如上图的拓扑结构,如果未配置NAT,从 Web服务器,ping 客户端失败,ping R2 S0/0/0 接口。 ping 命令应该会成功。

在配置静态 NAT 转换时,有两个基本任务:

步骤 1.第一个任务是建立内部本地地址与内部全局地址之间的映射。

Router(config)#ip nat inside source static local-ip global-ip

例如,图 1 中的内部本地地址 192.168.10.254 和内部全局地址 209.165.201.5 已配置为静态 NAT 转换。

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

步骤 2.在配置了映射后,将参与转换的接口配置为内部或外部接口(相对于 NAT 而言)。

Router(config)#interface 内部接口类型编号
Router(config)#ip nat inside
Router(config)#interface 外部接口类型编号
Router(config)#ip nat outside

在本示例中,R2 的 Serial 0/0/0 接口为内部接口,而 Serial 0/1/0 为外部接口。

Router(config)#interface Serial 0/0/0
Router(config)#ip nat inside
Router(config)#interface Serial 0/1/0
Router(config)#ip nat outside

查看 NAT 转换

使用如下命令验证静态 NAT 配置:

show running-config

show ip nat translations

show ip nat statistics

配置动态 NAT

静态 NAT 提供内部本地地址与内部全局地址之间的永久映射,而动态 NAT 使内部本地地址与内部全局地址能够进行自动映射。

像静态 NAT 一样,动态 NAT 也要求对参与 NAT 的内部和外部接口进行配置。但是,静态 NAT 创建与单个地址的永久映射,而动态 NAT 使用一个地址池

在这里插入图片描述
步骤 1.使用 ip nat pool 命令定义将会用于转换的地址池。该地址池通常是一组公有地址。这些地址是通过指明池中的起始 IPv4 地址和结束 IPv4 地址而定义的。netmask 或 prefix-length 关键字指示哪些地址位属于网络,哪些位属于该地址范围内的主机。

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

步骤 3.绑定 ACL 与地址池。ip nat inside source list access-list-number pool pool name 命令用于绑定 ACL 与地址池。路由器使用该配置来确定哪些设备(列表)接收哪些地址(池)。

步骤 4.确定对于 NAT 哪些接口是内部接口;即任何与内部网络连接的接口。

步骤 5.确定对于 NAT 哪些接口是外部接口;即任何与外部网络连接的接口。

在这里插入图片描述
上图显示了一个示例拓扑以及配置。当 192.168.0.0/16 网络上所有主机(包括 192.168.10.0 LAN 和 192.168.11.0 LAN)生成的流量进入 S0/0/0 而退出 S0/1/0 时,这一配置将允许对其进行转换。这些主机将转换为范围为 209.165.200.226 - 209.165.200.240 的地址池中的一个可用地址。

//使用池名称 PUBLIC-POOL,定义从 209.165.200.226 到 209.165.200.240的公有 IPv4 地址池。
R2(config)# ip nat pool PUBLIC-POOL 209.165.200.226 209.165.200.240 netmask 255.255.255.224

//配置 ACL 1 以允许 NAT 转换来自 192.168.0.0/24 网络的设备。
R2(config)# access-list 1 permit 192.168.0.0 0.0.0.255

//绑定 PUBLIC-POOL 与 ACL 2。
R2(config)# ip nat inside source list 1 pool PUBLIC-POOL

// 配置恰当的内部 NAT 接口。
R2(config)# interface Serial0/0/0
R2(config-if)# ip nat inside

//配置恰当的外部 NAT 接口。
R2(config)# interface Serial0/1/0
R2(config-if)# ip nat outside

验证动态 NAT

在这里插入图片描述

PAT

PAT(也称为 NAT 过载)允许路由器为许多内部本地地址使用一个内部全局地址,从而节省了内部全局地址池中的地址。换句话说,一个公有 IPv4 地址可用于数百甚至数千个内部私有 IPv4 地址。当配置了此类转换后,路由器会保存来自更高层协议的足够信息(例如 TCP 或 UDP 端口号),以便将内部全局地址转换回正确的内部本地地址。当多个内部本地地址映射到一个内部全局地址时,每台内部主机的 TCP 或 UDP 端口号可用于区分不同的本地地址。

注:理论上,可转换为一个外部地址的内部地址总数量可高达每个 IPv4 地址 65,536 个。不过,能被赋予单一 IPv4 地址的内部地址数量约为 4000 个。

配置 PAT 的方法有两种,具体采用哪一种则取决于 ISP 分配公有 IPv4 地址的方式。第一种分配方式是,ISP 为企业分配多个公有 IPv4 地址,而另一种是,它为企业分配单个 IPv4 地址,使其通过该地址连接到 ISP。

配置PAT

在这里插入图片描述

上图 显示了使用地址池配置 PAT 的步骤。这种配置与动态、一对一 NAT 配置的主要区别是前者使用了 overload 关键字。overload 关键字会启用 PAT。
在这里插入图片描述

//使用池名称 NAT-POOL-OVERLOAD,定义从 209.165.200.226 到 209.165.200.240 的公有 IPv4 地址池。
R2(config)# ip nat pool NAT-POOL-OVERLOAD 209.165.200.226 209.165.200.240 netmask 255.255.255.224
//配置 ACL 1 以允许 NAT 转换来自 10.0.0.0/8 网络的设备。
R2(config)# access-list 3 permit 10.0.0.0 0.255.255.255
//绑定 NAT-POOL-OVERLOAD 与 ACL 3。
R2(config)# ip nat inside source list 3 pool NAT-POOL-OVERLOAD overload
//配置恰当的内部 NAT 接口。
R2(config)# interface Serial0/0/0
R2(config-if)# ip nat inside
//配置恰当的外部 NAT 接口。
R2(config)# interface Serial0/1/0
R2(config-if)# ip nat outside

如果没有 NAT,则 IPv4 地址空间耗尽问题可能早在 2000 年之前就会出现。但是,NAT 也有一些限制,这将在本章后续部分探讨。为了应对 IPv4 地址空间耗尽问题以及 NAT 的局限性,最终需要向 IPv6 过渡。

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/123589085