NAT(Network Address Translation,网络地址转换)
NAT(Network Address Translation,网络地址转换)是一种在路由器或防火墙设备上实现的技术,它可以将私有IP地址与公网IP地址之间进行转换。NAT是和IPV6目的相同,都是为了解决IP地址的短缺问题,并提高网络的安全性。通过NAT,多个内部设备(如电脑、手机等)可以共享一个公网IP地址访问互联网,而外部网络无法直接访问内部设备的私有IP地址。
关于公网IP地址和私网IP地址,可以简单理解为,单元号和门牌号,每栋楼有自己的单元号(1单元、2单元这样,假设一栋楼就是一单元),而每栋楼里面都有101号这样。一个小区只有一个一单元,但是肯定不止一个101号,一单元有101号,二单元也有101号。那么101可以多次出现是因为它在不同的单元楼。
而楼号就可以理解为公网IP地址,这个是有限的,且不能重复。但是私有的IP地址(101、202这样都是可以无限制使用)可以重复,是因为它们在不同的网段。61.20.30.1里的192.168.1.1和61.21.30.1里的192.168.1.1,其中出现了两次192.168.1.1,但是因为192.168.x.x是私网IP地址,在不同的网段,所以不会冲突。是故,你会在很多地方看到电脑配置为192.168.x.x的配置。(打开你手机连接的WIFI,点击查看详情,在二维码的最下方会展现MAC地址和IP地址,这个IP地址就是192.168.x.x开头)
NAT的工作原理是通过在路由器或防火墙设备上维护一个转换表,将局域网(LAN)内的设备的私有IP地址和端口号映射到一个或多个公网IP地址上。这种映射关系可以是静态的或动态的,具体取决于NAT的类型。
私有IP地址是局域网中的设备地址,通常是无法直接访问互联网的。
公网IP地址是与互联网通信的地址,是可以被外部网络直接访问的。
端口号:在PAT(端口地址转换)中,不同的内部设备会使用相同的公网IP地址,但通过不同的端口号来区分。
继续用单元楼的例子来解释NAT的工作原理。假设你现在是一单元的101室业主,你要给二单元的202号业主送一份文件。
那么当你把文件从101号的门口送到1号楼单元门的大门口,那么SA(Source Address)原地址是一单元的101号,DA(Destination Address)目的地址是二单元的单元门。
(NAT转换,把私有IP地址转换为公有IP地址,本例的单元门的单元号就是公有IP地址),SA就从之前的101号变成了一单元这个单元号,DA保持不变,还是二单元的单元门。这时你的文件需要通过物业帮你从一单元的大门口送到二单元大门口(公网传输)。
当文件到二单元的大门口后,由二单元的202号业主从大门处接收文件,并带回202号房间。在这个过程中(NAT再次发挥作用,将公有地址转换为私有地址)SA不再是一单元的单元号,而是二单元的单元号,DA则由原来的二单元大门口转为了202室。也就是私网内数据传输。
即155.16.12.3这个公网IP地址中的192.168.0.2这个私网IP地址发送数据时,通过边界路由器进行网络地址转换,将数据在私网中的原地址转为了公网中的IP地址。
注:一般家用的宽带多为私网地址,即便通过PPPoE拨号也是获取动态IP地址。但是一般来说,固定公网IP是收费的,而且运营商也不太愿意提供给个人用户,这个主要是提供给专线用户。
节省公网IP:一个公网IP可以供多个设备共享。
提高网络安全性:内网IP被隐藏,外部无法直接访问。
简化网络配置:不需要为每个设备分配公网IP地址。
支持端口映射:允许外部访问内网的特定服务。
影响端到端通信:不适合需要端到端连接的应用(如P2P、VoIP等)。
增加延迟和负担:额外的地址转换可能导致网络性能下降。
配置复杂性:需要手动设置端口映射等,配置较复杂。
可能导致连接问题:某些应用(如在线游戏、P2P)可能会受限于NAT类型。
任何应用数据流中不承载源/目的IP地址的TCP/UDP业务、HTTP、TFTP、Telnet、NTP、NFS
ICMP、FTP(包括PORT和PASV)、TCPIPS上的Net/BIOS(数据报、名称和会话服务)、DNS、H.323/NetMeeting、IP多播(只转换源地址)
路由表更新、DNS区域传送、BOOTP、talk,ntalk、SNMP、Netshow
定义:静态NAT是将一个私有IP地址映射到一个公网IP地址。映射是固定的,一一对应的。
用途:一一映射私有IP和公网IP,通常用于需要外部访问的内部设备(如Web服务器)。
优点:映射固定,外部可以始终通过固定的公网IP访问内部设备。
缺点:需要一个公网IP对应一个私有IP,资源消耗较大。
配置:简单,只需设置映射规则和接口标识。
适用场景:适用于需要外部网络能够稳定访问内部网络某个设备的情况,如Web服务器或FTP服务器。
定义:动态NAT是将私有IP地址映射到一个公网IP池中的一个公网IP地址。私有IP与公网IP之间的映射是动态分配的。
用途:多个私有IP地址动态映射到公网IP池中的公网IP。适合多个设备访问外网。
优点:节省公网IP地址,避免了静态NAT的公网IP浪费。
缺点:公网IP池用尽时,无法进行映射。
配置:配置公网IP池和ACL,将私有IP映射到公网IP池。
适用场景:适用于内网设备通过一个公网IP访问外网,但不需要外部访问内部设备的情况。
定义:PAT是一种特殊类型的NAT,它允许多个私有IP地址共享一个公网IP地址。通过不同的端口号进行区分,实现多个内网设备通过同一个公网IP访问外网。
用途:多个私有IP共享一个公网IP,通过不同的端口号区分每个连接。适合家庭或小型企业网络。
优点:极大地节省公网IP地址,所有设备共享一个公网IP。
缺点:公网IP有限时,无法支持更多设备同时在线。
配置:通过指定公网接口和端口号进行转换,支持多个设备共享一个公网IP。
适用场景:适用于家庭或小型企业网络,多个设备共享一个公网IP地址访问外网。
如果你需要外部访问内网特定设备,使用 静态NAT。
如果你需要动态分配公网IP,且公网IP池资源有限,可以使用 动态NAT。
如果你希望多个设备共享一个公网IP进行外网访问,选择 PAT(端口地址转换)。
静态NAT 将一个内部设备的私有IP地址与一个公网IP地址一一映射。每个私有IP都有一个固定的公网IP地址。
1. 进入配置模式:
Router> enable
Router# configure terminal
2. 定义静态NAT映射: 假设我们有一个私有IP 192.168.1.10
,它需要映射到公网IP 203.0.113.5
:
Router(config)# ip nat inside source static 192.168.1.10 203.0.113.5
3. 配置接口:
内部接口(连接到局域网):
Router(config)# interface gigabitethernet0/1
Router(config-if)# ip nat inside
外部接口(连接到互联网):
Router(config)# interface gigabitethernet0/0
Router(config-if)# ip nat outside
4. 验证NAT映射:
Router# show ip nat translations
固定一一映射私有IP到公网IP,适用于需要外部稳定访问的设备。
动态NAT 将多个私有IP地址动态地映射到公网IP池中的一个公网IP地址。不同的私有IP地址会使用不同的公网IP进行转换,直到池中没有剩余公网IP。
1. 进入配置模式:
Router> enable
Router# configure terminal
2. 配置公网IP池: 假设公网IP池从 203.0.113.10
到 203.0.113.20
:
Router(config)# ip nat pool MYPOOL 203.0.113.10 203.0.113.20 netmask 255.255.255.0
3. 定义访问控制列表(ACL): 定义哪些私有IP可以使用动态NAT映射到公网IP池:
Router(config)# access-list 1 permit 192.168.1.0 0.0.0.255
4. 配置动态NAT映射: 将ACL应用到动态NAT池:
Router(config)# ip nat inside source list 1 pool MYPOOL
5.配置接口:
内部接口(连接到局域网):
Router(config)# interface gigabitethernet0/1
Router(config-if)# ip nat inside
外部接口(连接到互联网):
Router(config)# interface gigabitethernet0/0
Router(config-if)# ip nat outside
6. 验证NAT映射:
Router# show ip nat translations
使用公网IP池动态分配公网IP给私有网络设备,适用于多个设备共享公网IP。
PAT 允许多个内部设备共享一个公网IP地址,通过不同的端口号区分不同的连接。通常,只有一个公网IP被用来映射多个私有IP。
1. 进入配置模式:
Router> enable
Router# configure terminal
2. 定义PAT映射: 使用一个公网IP 203.0.113.5
,通过端口号区分多个内网设备:
Router(config)# ip nat inside source list 1 interface gigabitethernet0/0 overload
3. 定义访问控制列表(ACL): 定义哪些私有IP可以通过PAT进行转换:
Router(config)# access-list 1 permit 192.168.1.0 0.0.0.255
4. 配置接口:
内部接口(连接到局域网):
Router(config)# interface gigabitethernet0/1
Router(config-if)# ip nat inside
外部接口(连接到互联网):
Router(config)# interface gigabitethernet0/0
Router(config-if)# ip nat outside
5. 验证NAT映射:
Router# show ip nat translations
多个私有IP共享一个公网IP,通过端口号进行区分,适用于家庭或小型企业网络。
查看NAT条目:使用 show ip nat translations
查看当前的NAT映射。
要查看当前的NAT映射,使用以下命令:
Router# show ip nat translations
该命令将显示所有的NAT转换条目,包括:
内部IP(私有IP)
外部IP(公网IP)
协议类型(如TCP、UDP等)
端口号(对于PAT)
输出示例:
Pro Inside global Inside local Outside local Outside global
--- 203.0.113.5:1023 192.168.1.10:1023 0.0.0.0:0 0.0.0.0:0
--- 203.0.113.5:1024 192.168.1.11:1024 0.0.0.0:0 0.0.0.0:0
要查看NAT的统计信息(例如映射数、转换次数等),使用:
Router# show ip nat statistics
输出示例:
Total active translations: 2 (2 static, 0 dynamic)
Outside interfaces:
Ethernet0
Inside interfaces:
Ethernet1
NAT session timeouts: 0
清除NAT条目:使用 clear ip nat translation
清除特定的或所有NAT映射。
想清除特定的NAT条目,使用以下命令:
Router# clear ip nat translation [InsideLocalIP] [InsideGlobalIP]
例如,要清除 192.168.1.10
和 203.0.113.5
之间的NAT映射:
Router# clear ip nat translation 192.168.1.10 203.0.113.5
要清除所有当前的NAT转换条目,可以使用:
Router# clear ip nat translation *
这将删除所有NAT映射,并强制所有新的连接重新进行NAT转换。
定义:
端口映射是指将路由器或防火墙的某些端口(外部端口)映射到内网中某台设备的特定端口。这样外部设备通过访问路由器的公网IP地址和指定的端口号,就可以访问内网设备提供的服务。
应用场景:
外部访问内网服务:例如,Web服务器(HTTP服务)、FTP服务器等需要从外部访问时,通过端口映射可以将公网IP的某个端口映射到内网服务器的对应端口。
游戏或P2P应用:游戏、VoIP、P2P等应用通常需要特定的端口来进行数据交换,通过端口映射使这些应用能够在NAT环境下正常工作。
内网服务器开放服务/接收数据,多个服务器复用公网IP,变换服务默认端口,防外网攻击
配置示例:假设需要将公网IP的端口 80
(HTTP)映射到内网服务器 192.168.1.10
的端口 80
Router(config)# ip nat inside source static tcp 192.168.1.10 80 interface gigabitethernet0/0 80
当外部访问公网IP的端口80时,路由器会将请求转发到内网 192.168.1.10
的80端口。
定义:
双线接入是指通过两条不同的网络线路(如两条ISP提供的互联网线路)来实现冗余,保证网络的高可用性和带宽负载均衡。
应用场景:
负载均衡:通过两条线路来分担数据流量,增强带宽。
故障冗余:当其中一条线路出现故障时,另一个线路可以自动接管,保证网络连接不中断。
NAT配置:
在双线接入中,通常需要配置 NAT 来支持两条线路的负载均衡。NAT 和 策略路由 可以帮助根据流量或策略决定数据包应该走哪一条线路。
配置步骤(以带有两条公网线路的路由器为例):
1. 设置两条公网线路的接口:
Router(config)# interface gigabitethernet0/0
Router(config-if)# ip nat outside
Router(config)# interface gigabitethernet0/1
Router(config-if)# ip nat outside
2. 配置两条线路的负载均衡: 你可以通过 NAT Overload 配置来使两条线路共享流量。例如,可以设置不同的策略,让流量根据特定的规则(如源IP、目的IP、端口等)在两条线路上分发。
3. 使用策略路由分流流量:
Router(config)# route-map LoadBalance permit 10
Router(config-route-map)# match ip address 101
Router(config-route-map)# set interface gigabitethernet0/1
Router(config)# ip policy route-map LoadBalance
定义:
负载均衡是通过多个网络连接或多台服务器分担流量,以提高网络性能和可靠性。在 NAT环境 下,负载均衡通常用于将流量分发到多条公网线路或多个服务器上。
应用场景:
提高带宽:当单条线路的带宽不足时,通过负载均衡将流量分配到多条线路上,以提供更高的总带宽。
增强网络可靠性:如果一条线路出现故障,流量可以自动切换到另一条线路,避免业务中断。
多台服务器负载均衡:当需要多个服务器处理来自外部的请求时,可以使用负载均衡来合理分配请求到不同的服务器。
NAT负载均衡配置:
负载均衡配置可以结合 NAT Overloading 和 策略路由 来实现。比如,可以使用 NAT负载均衡 来动态分配公网IP和端口,或者通过 IP Hashing 实现服务器端的负载均衡。
示例:通过 NAT Overload 和 端口映射 在两台不同的内网服务器上负载均衡HTTP请求。
Router(config)# ip nat inside source list 1 interface gigabitethernet0/0 overload
当有多个内网设备时,路由器会通过端口号的不同分配流量。
负载均衡的类型:
基于源地址的负载均衡:根据源IP地址选择不同的出口。
基于端口的负载均衡:根据端口号选择不同的出口。
在NAT配置过程中,可能会出现一些常见的问题,例如,映射错误、端口冲突、双线接入故障等。常见的故障分析步骤和工具如下:
常见故障和分析步骤:
检查接口配置:确保正确地标记了 inside 和 outside 接口。
Router# show ip nat translations
查看NAT统计信息:确保转换条目正确。
Router# show ip nat statistics
确认ACL是否正确:检查访问控制列表,确保允许内网设备访问公网。
检查路由配置:如果使用了路由策略或负载均衡配置,确保路由策略正确。
Router# show route-map
检查双线接口是否都正常:确保两个ISP线路都处于正常工作状态。
Router# show interface
验证NAT负载均衡配置:确保NAT Overload 或策略路由在多条线路上正确配置。
检查NAT穿透支持:确保路由器支持 UPnP 或 NAT Traversal,特别是在需要P2P或VoIP应用时。
日志分析:查看路由器的日志信息,检查是否存在NAT相关的错误。
Router# show logging
检查端口映射规则:如果多个端口映射到同一个外部端口,可能会导致冲突。确认每个端口映射的外部端口是唯一的。
端口映射:使得外部通过特定端口访问内网服务,常用于Web服务器、FTP等应用。
双线接入:通过两条ISP线路提供冗余和带宽负载均衡,增强网络的可靠性和性能。
负载均衡:通过多个线路或服务器分担流量,提高带宽、性能和容错能力。
故障分析:包括检查NAT映射、路由配置、接口状态、日志等,以排查和解决故障。
a. ACL阻止转换后的流量
b. 进行地址转换的ACL不全
c. over load参数漏配
d. 不对称路由问题
e. 动态地址池IP地址范围配置错误
f. 动态地址池与静态转换地址重叠
g. Inside和outside接口配置错误
检查物理设备和NAT配置
通过show命令查看NAT的各种信息
通过debug ip nat命令跟踪NAT操作
注1:使用NAT的注意事项:
考虑NAT会话数量限制、特殊协议、部署NAT时状态化防火墙上部署NAT时,若NAT地址池的地址与公网的接口地址它不在同一个网段,那防火墙上就需要配置黑洞路由,否则会导致防火墙和路由器之间会产生路由环路。
注2:NAT只转化头部当中的IP地址,但是有的协议比如FTP,数据载荷中也有地址信息,若考虑不当FTP也不会正常工作。