网络地址转换(NAT)的原理与配置

本文涉及的产品
公网NAT网关,每月750个小时 15CU
访问控制,不限时长
简介:

    随着网络的发展,公用IP地址的需求与日俱增。为了缓解公用IP地址的不足,并且保护公司内部服务器的私网地址,可以使用NAT(Network Address Translation,网络地址转换)技术将私网地址转化成为公网地址,缓解IP地址的不足,并且隐藏内部服务器的私网地址。


NAT的概述与现实方式

1. NAT概念

   网络地址转换(NAT)通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上,广泛应用于各种类型的互联网接入方式和各种类型的网络中。原因很简单,NAT不仅解决了IP地址不足的问题,而且还能够隐藏内部网络的细节,避免来自网络外部的攻击,起到一定的安全作用。

   借助于NAT,私有保留地址的内部网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,这样一个局域网只需要少量地址(甚至是一个),即可实现使私有地址网络中的所有计算机与互联网的通信需求。


2. NAT的实现方式

NAT的实现方式有以下三种:

* 静态转换(Static Translation)

* 动态转换(Dynamic Translation)

* 端口多路复用(Port Address Translation,PAT)

   静态转换IP地址的对应关系是一对一且不变的,并没有节约公用IP地址,只是隐藏了主机的真实地址。动态转换虽然在一定情况下节约了公用IP地址,但是当内部网络同时访问Internet的主机数大于合法地址池中的IP地址数时就不适用了。端口多路复用可以使所有的内部网络主机共享一个合法的外部IP地址,从而最大限度的节约IP地址资源。

   由于动态转换形成的IP地址的对应关系是不确定的、随机的;端口多路复用使用的是端口号的转换,也是不确定的,所以内网服务器不能使用这两种转换方式,这是由于外网用户无法确定服务器合法的公网IP地址,导致无法访问服务器。这时使用静态转换将私有IP地址转换为固定的合法的IP地址,这样服务器有了固定的合法的公网IP地址,才能实现外网的访问。


NAT的术语与转换表

wKioL1mezanQMcHcAADhz7sla1c993.png

内部局部IP地址(Inside Local IP Address):在内部网络中分配给主机的私有IP地址。该地址是从RFC1918(私有互联网空间地址分配)所定义的私有地址空间中分配的,或者随机挑选的。

内部全局IP地址(Inside Global IP Address):一个合法的IP地址(由NIC或网络服务提供商分配)。它对外代表一个或多个内部局部IP地址。该地址通常是从全球统一可寻址的地址空间中分配的,一般由互联网服务提供商(ISP)提供。

外部局部IP地址(Outside Global IP Address):由其所有者给外部网络上的主机分配的IP地址。该地址通常也是从全球统一可寻址的地址空间中分配的。

外部局部IP地址(Outside Local IP Address):外部主机表现在内部网络的IP地址。这一地址是从内部可寻址的地址空间中分配的,很可能是从诸如RFC1918中所定义的保留地址空间分配的。

简单转换条目(Simple Translation Entry):将一个IP地址映射到另一IP地址的转换条目。

扩展转换条目(Extended Translation Entry):映射IP地址和端口到另一对IP地址和端口的条目。


NAT的特性

NAT的典型优势如下:

1.NAT允许企业内部网使用私有地址,并通过设置合法的地址集,使内部网可以与互联网进行通信,从而达到节省合法注册地址的目的。

2.NAT可以减少规划地址时发生的地址重叠情况。

3.NAT增强了内部网络与公用网络连接时的灵活性。

4.NAT支持地址重叠。

   当然,NAT也不是没有缺点。用于地址转换的处理过程会带来功能和性能上的一些损失,特别是在IP报文承载的数据中包含发送IP地址信息的情况下。


NAT的典型缺点如下:

1.NAT会使延迟增大。

2.NAT增加了配置和排错的复杂性。

3.NAT也可能会使某些需要使用内嵌IP地址的应用不能正常工作,因为它隐藏了端到端的IP地址。


NAT的配置

1.静态NAT配置

  一个私有地址对应一个公有地址,向外网发布服务器。

(1) 在内部局部地址和内部全局地址之间建立静态地址转换。

1
Router(config) #ip nat inside source static local-ip global-ip [extendable]

   其中,参数“extendable”(可选)表示允许同一个内部局部地址映射到多个内部全局地址。“inside”表示从inside口进入的流量将源地址(source)进行静态转换。

例如:将内部局部地址192.168.100.2转换为内部全局地址61.159.62.130

   Router(config)# ip nat inside source static 192.168.100.2 61.159.62.130    


(2) 在内部和外部端口上启用NAT。

   设置NAT功能的路由器需要有一个内部端口(inside)和一个外部端口(outside)。内部端口连接的网络用户使用的是内部IP地址,外部端口连接的是外部的网络,如互联网。要NAT发挥作用,必须在这两个端口上启用NAT。

1
2
3
4
Router(config) # int f0/0
Router(config- if ) # ip nat inside
Router(config) # int f1/0
Router(config- if ) # ip nat outside

NAT端口映射

  需要使用NAT的端口映射功能,在内部局部地址和内部全局地址之间建立NAT端口映射的语法如下:

1
Router(config) # ip nat inside source static protocol local-ip UDP/TCP-port global-ip UDP/TCP-port [extendable]

  此命令是将TCP或UDP协议中内部局部地址需要转换的端口号转换成为内部全局地址的端口号。

例如:希望外网通过80端口访问公司内部的Web服务器192.168.100.2

   Router(config)# ip nat inside source static tcp 192.168.100.2 80 61.159.62.131 80 extendable   

  NAT端口映射还可以将不同服务器的不同服务(端口)映射到同一公网地址的不同端口,给人的感觉是通过一个地址访问了所有的服务。


2.动态NAT配置

  多个私有地址对应多个公有地址,负责上网。

(1) 定义内部网络中允许访问外部网络的访问控制列表

(2) 定义合法IP地址池

1
Router(config) # ip nat pool pool-name start-ip end-ip { netmask netmask | prefix-length prefix-length} [type rotary]

  下面是对该命令相关参数的说明:

pool-name放置转换后地址的地址池名称。

start-ip/end-ip地址池内起始和终止ip地址。

netmask netmask子网掩码,以点分十进制数表示。

prefix-length prefix-length子网掩码,以掩码中1的数量表示(如:prefix-length 24 等同于netmask 255.255.255.0)。两种掩码的表示方式等价,任意使用一个即可。

type rotary(可选):地址池中的地址为循环使用。

   如果有多个地址池,可以重复使用此命令添加地址池。

注意:配置访问控制列表时,可以将其配置为标准访问控制列表,也可以将其配置为扩展访问控制列表。

(3) 实现网络地址转换

在全局配置模式中,将由access-list指定的内部局部地址与指定的内部全局地址池进行地址转换。命令语法如下:

1
Router(config) # ip nat inside source list access-list-name pool pool-name [overload]

  其中,“overload”(可选)表示使用地址复用,用于PAT。

例如:将访问控制列表1中的局部地址转换为test0地址池中定义为全局IP地址。

   Router(config)# ip nat inside source list 1 pool test0    

如果有多个地址池,可以一一添加,以增加合法地址池的数量范围。命令如下:

   Router(config)# ip nat inside source list 1 pool test1    

   Router(config)# ip nat inside source list 1 pool test2    

4) 在内部和外部接口上启用NAT。



PAT

1. 使用外部全局地址

  如图所示,按以下配置说明使用外部全局地址的方法配置PAT

wKioL1me0MnTtXHQAADJGqHaGuM693.png

(1) 配置内部访问控制列表

1
Router(config) # access-list 1 permit 10.1.1.0 0.0.0.255

(2) 定义合法的IP地址池

1
Router(config) # ip nat pool ysf 61.159.62.131 61.159.62.131 netmask 255.255.255.0

(3) 设置复用动态IP地址转换

在全局配置模式中,设置在内部局部地址与内部全局地址之间建立动态地址转换。

  Router(config)# ip nat inside source list access-list-name pool pool-name [overload]  

例如:下面的命令表示,以端口复用方式,将访问控制列表1中的局部地址转换为onlyone地址中定义的全局IP地址。

1
Router(config) # ip nat inside source list 1 pool ysf overload

(4) 在内部和外部端口上启用NAT。

1
2
3
4
Router(config) # int f0/0
Router(config- if ) # ip nat outside
Router(config) # int f1/0
Router(config- if ) # ip nat inside

(5) 配置默认路由,使数据包可以正常选路

1
Router(config) # ip route 0.0.0.0 0.0.0.0 61.159.62.129

注意:以上NAT配置使用的是一段合法IP地址。有时ISP分配的是两端IP地址,一段子网掩码为30的接口地址和一段公网地址,其中接口地址可以是公网地址也可以是私网地址。如果ISP分配两端IP地址,则配置广域网接口时使用接口地址,配置NAT时使用公网地址,其配置与上述示例相同。


2. 复用路由器外部接口地址

  有时,只有一个外部IP地址,并且已被路由器外部接口使用,也可以直接使用接口的IP地址作为转接后的源地址

(1)定义内部访问控制列表

1
Router(config) # access-list 1 permit 10.1.1.0 0.0.0.255

(2)定义合法的IP地址池

  由于直接使用接口IP地址,所以不需定义IP地址池

(2)设置复用动态IP地址转换

在全局配置模式下,设置在内部的本地地址与内部合法地址之间建立动态转换。命令如下:

Router(config)# ip nat inside source list 1 int f0/0 overload

上述命令表示,以端口复用方式,将访问控制列表1中的私有地址转换为路由器外部接口的合法IP地址。

(3)在内部和外部端口上启用NAT

1
2
3
4
Router(config) # int f0/0
Router(config- if ) # ip nat outside
Router(config) # int f1/0
Router(config- if ) # ip nat inside


验证NAT配置

  可以使用show ip nat translation命令显示当前存在的转换。

可以使用下面的命令对NAT进行监控

1
Router(config) # show ip nat translations [verbose]

   该命令用来检查当前存在的转换,关键字verbose与该命令一起使用能够显示更多的信息,包括一个动态条目的保存时间。显示的详细信息中,create、use、timeout、left分别显示NAT转换条目的创建时间、使用时间、超时时间值、剩余时间,而静态NAT形成的转换条目的timeout为0,表示永远存在。

默认情况下,如果在一定时间内没有使用动态地址转换条目,就会因超时而被取消。在没有配置地址复用的情况下,简单转换条目的超时时间为24小时。

如果配置了地址复用,又因为每个条目都包含了使用它的数据流的更多内容,那么就可以对转换条目的超时值实施较细致的控制,下面是采用地址复用时默认的NAT超时值。

* UDP超时值:5分钟

* DNS超时值:1分钟

* TCP超时值:24小时

* 结束和复位值:1小时

注意:“结束”和“复位”指的是TCP连接的结束包和复位包。

如果必要,用户可以改变超时的默认值,使用的命令如下:

1
Router(config) # ip nat translation { dns-timeout | icmp-timeout | tcp-timeout | udp-timeout | finrst-timeout | syn-timeout} {seconds | never}

   可以对不同的协议设置NAT转换超时时间,也可以设置为永远不超时。例如,命令ip nat translation icmp-timeout 120 表示,将ICMP协议的NAT转换超时时间设置为120秒。

注意:每个NAT条目大概要占用160字节的内存,所以,65535条条目会占用多余10MB的内存和相当多的CPU资源。在实际工作中,若发现路由器的CPU和内存资源紧张,可以查看NAT配置和转换条目。

   有时因为NAT转换条目过多导致设备性能下降,可以使用clear ip nat translation * 命令来清除NAT转换表中的所有条目。*是一个通配符,代表任意值。首先使用show ip nat translations查看当前活跃的转换条目,然后,输入clear ip nat translation *命令来清除所有的转换。再次输入show ip nat translations命令进行查看,NAT转换条目中只剩下静态转换条目。

  使用clear ip nat translation inside local-ip global-ip,可以清除包含一个内部转换的一个简单转换条目。

  使用clear ip nat translation outside local-ip global-ip,可以清除包含一个外部转换的一个简单转换条目。










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/1959448,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
4天前
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
5天前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
|
5天前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
133 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
21天前
|
网络协议 安全 网络安全
应用程序中的网络协议:原理、应用与挑战
网络协议是应用程序实现流畅运行和安全通信的基石。了解不同协议的特点和应用场景,以及它们面临的挑战和应对策略,对于开发者和用户都具有重要意义。在未来,随着技术的不断发展,网络协议也将不断优化和创新,为数字世界的发展提供更强大的支持。
|
27天前
|
安全 数据挖掘 BI
|
1月前
|
机器学习/深度学习 移动开发 测试技术
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
46 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
|
3月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
95 17
|
3月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
3月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们日常生活中不可或缺的一部分。本文将深入探讨网络安全漏洞、加密技术和安全意识等方面的问题,并提供一些实用的建议和解决方案。我们将通过分析网络攻击的常见形式,揭示网络安全的脆弱性,并介绍如何利用加密技术来保护数据。此外,我们还将强调提高个人和企业的安全意识的重要性,以应对日益复杂的网络威胁。无论你是普通用户还是IT专业人士,这篇文章都将为你提供有价值的见解和指导。
|
3月前
|
存储 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已经成为了我们生活中不可或缺的一部分。本文将介绍网络安全的基本概念,包括网络安全漏洞、加密技术以及如何提高个人和组织的安全意识。我们将通过一些实际案例来说明这些概念的重要性,并提供一些实用的建议来保护你的信息和数据。无论你是网络管理员还是普通用户,都可以从中获得有用的信息和技能。
40 0

热门文章

最新文章