非常重要的地址转换(NAT)技术,必须好好捋一遍!

2020-05-06 14:17:57 浏览数 (1)

NAT提出背景
背景
  • 地址转换是在IP地址日益短缺的情况下提出的。
  • 一个局域网内部有很多台主机,不能保证每台主机都拥有合法的IP地址,为了使所有的内部主机都可以连接Internet网络的目的,可以使用地址转换。
  • 地址转换技术可以有效的隐藏内部局域网中的主机,因此也是一种有效的网络安全保护技术。
  • 地址转换可以按照用户的需要,在局域网内部提供给外部FTP、WWW、Telnet的服务。
私有地址与公有地址的概念
  • 私有网络一般使用私有地址。
  • RFC1918文档为私有、内部局域网的使用预留出三块IP私有地址范围。
  • 上述范围内的地址不会在互联网上被分配出去,可以不必向ISP或注册中心申请而直接在公司或企业内部网络上直接使用。
NAT 基本原理
NAT 原理介绍

RFC1631文档描述了:NAT是将IP数据报的报头中的IP地址转换为另一个IP地质大过程。在实际应用中,NAT主要用于实现私有网络访问外部网络的功能。这种通过允许使用少量的公有IP地址代表多数私有IP地址的方式将有助于减缓可用IP地址空间站枯竭的速度。

NAT服务器处于私有网络和公有网络的连接处。当内部PC(192.168.1.3)向外部服务器(202.120.10.2)发送一个数据报1时,数据报将通过NAT服务器。NAT进程查看报头内容,发现该数据报是发往外部网络的,那么它将数据报1源地址字段的私有地址192.168.1.3换成一个可在互联网上选路的公有地址201.169.10.1,并将该数据报发送到外部服务器,同时在网络地址转换表中记录这一映射;外部服务器给内部PC发送应答报文2(其初始目的地址为202.169.10.1),到达NAT服务器后,NAT进程再次查看报头内容,然后查找当前网络地址转换表的记录,用原来的内部PC私有地址192.168.1.3替换目的地址。

上述的NAT过程对中的PC和服务器来说是透明的。对外部服务器而言,它认为内部PC的IP地址就是202.169.10.1,并不知道192.168.1.3这个地址。因此,NAT“隐藏了”企业内部的私有地址。

地址转换方式

地址转换共有5种方式:多对多地址转换、NAPT—网络地址端口转换、内部服务器转换、Easy IP转换和ALG—应用级网关转换 。

多对多地址转换

当内部网络访问外部网络时,地址转换将会选择一个合适的外部地址,替代内部网络数据报文的源地址。如果选择NAT服务器出接口的IP地址(公有地址),那么所有内部网络的主机访问外部网络时,只能拥有一个外部的IP地址,因此,这种情况仅允许最多一台内部主机访问外部网络,这成为“一对一的地址转换”。当内部网络的主机并发的要求访问外部网络时,“一对一地址转换”仅能够实现其中一台主机的访问请求。

NAT的一种变形实现了并发性,允许NAT服务器拥有多个公有IP地址,当第一个内部主机访问外部网络时,NAT选择一个公有地址IP1,在地址转换表中添加记录并发送数据报;当另外一台内部主机访问外部网络时,NAT选择另一个公有地址IP2,以此类推,从而保证了多台内部主机访问外部网络的请求。这成为“多对多地址转换”。

NAPT——网络地址端口转换

还有一种能够实现并发性访问外部网络的方法,就是NAPT(Network Adress Port Translation)。NAPT 允许多个内部地址映射到同一个公有地址上,非正式地也可以称之为“多对一地址转换”或地址服用。

NAPT映射IP地址和端口号,来自不同内部地址的数据报可以映射到同一外部地址,但它们被转换为该地址的不同端口号,从而实现了多对一网络地址转换。

内部服务器转换

NAT隐藏了内部网络的结构,具有“屏蔽”内部主机的作用。但在实际应用中,可能需要提供给外部一个访问内部主机的机会。SecPath防火墙的NAT提供了内部服务器提供给外部网络访问的功能。外部网络的用户访问内部服务器时,NAT将请求报文的目的地址转换成内部服务器的私有地址。对内部服务器的回应报文而言,NAT要将回应报文的源地址(私网地址)转换成公网地址。

如提供给外部一台Web服务器,或是1台FTP服务器。使用NAT可以灵活地将内部服务器提供给外部访问。例如,可以使用202.169.10.10作为Web服务器的外部地址;使用202.110.10.11作为FTP外部服务器的地址;甚至还可以使用202.110.10.12:8080这样的地址作为Web外部地址;还可以为外部用户提供多台同样的服务器(如多台Web服务器)。

Easy IP转换

Easy IP的概念实际上是说在配置命令的时候直接指定的是接口而不是具体的IP地址。当进行地址转换时,NAT直接使用接口的公有IP地址作为转换后的源地址。

哪些内部地址被允许地址转换也是利用访问控制列表控制来实现的。

ALG——应用级网关转换

NAT和NAPT只能对IP报文的头部地址和TCP/UDP头部的端口进行地址转换,对于一些特殊协议,例如ICMP、FTP等,它们报文的数据部分可能包含IP地址和端口信息,这些内容不能被NAT有效地转换,导致出现问题。

例如,一个使用内部IP地址的FTP服务器可能在和外部主机建立会话的过程中,需要将自己的IP地址发送给对方,而这个地址信息是放到IP报文的数据部分,NAT无法对他进行转换。当外部网络主机接收了这个私有地址并使用它,这是将表现为FTP服务器不可达。

解决这些特殊协议的NAT转换问题的方法,就是在NAT实现中使用ALG功能。

ALG是特定应用协议的转换代理,它和NAT交互以建立状态,使用NAT的状态信息来改变封装在IP报文数据部分中的特定数据,并完成其他必须得工作以便使应用协议可以跨越不同范围运行。

例如,考虑一个“目的站点不可达”的ICMP报文,该报文数据部分包含了造成错误的数据报A的首部(注意,NAT发送A之前进行了地址转换,所以源地址不是内部主机的真实地址)。如果开启了ICMP的ALG功能,在NAT转换ICMP报文之前,它将与NAT交互,打开ICMP报文并转换数据部分的报文A首部的地址,使这些地址表现为内部主机的确切地址形式,并完成其他必须的工作后,由NAT将这个ICMP报文转发出去。

SecPath防火墙提供了完善的地址转换应用及网关机制,使其在流程上可以支持各种特是的应用协议。而不需要对NAT平台进行任何的修改,具有良好的可扩充性。目前实现的应用协议的ALG功能包括:FTP、H.323、ICMP、MGCP、NetBIOS和SIP。

NAT 基本配置
配置地址池

定义一个地址池:

代码语言:txt复制
nat address-group group-number start-addr end-addr

删除一个地址池:

代码语言:txt复制
undo nat address-group group-number

当某个地址池已经和某个访问控制列表关联进行地址转换,是不允许删除这个地址池的。若某个网关仅提供easy IP功能,则不需要配置NAT地址池,直接使用接口地址作为转换后的IP地址即可。

配置EASY IP

配置访问控制列表和接口地址关联:

代码语言:txt复制
nat outbound acl-number

删除访问控制列表和接口地址的关联:

代码语言:txt复制
undo nat outbound acl-number

如果地址转换命令不带address-group命令字,仅适用nat outbound acl-number命令,表示为使用easy IP的特性。地址转换时,直接使用接口的IP地址作为转换后的地址,利用访问控制列表控制哪些地址可以进行转换。

当直接使用接口地址作为NAT转换后的公网地址时,若修改了接口地址应该首先使用reset nat session 命令清除原NAT地址映射表项,然后再访问外部网络,否则会出现原有NAT表项不能自动删除,也无法使用reset nat 命令删除的情况。

配置一对一地址转换

配置从内部地址到外部地址的一对一转换:

代码语言:txt复制
nat static ip-addr1 ip-addr2

删除已经配置得NAT一对一转换:

代码语言:txt复制
undo nat static ip-addr1 ip-addr

使已经配置的NAT一对一转换在接口上生效:

代码语言:txt复制
nat outbound static
配置多对多地址转换

配置访问控制列表和地址池关联:

代码语言:txt复制
nat outbound acl-number address-group group-number [ no-pat ]

删除访问控制列表和地址池的关联:

代码语言:txt复制
undo nat outbound acl-number address-group group-number [ no-pat ]
配置NAPT

配置访问控制列表和地址池关联:

代码语言:txt复制
nat outbound acl-number [ address-group group-number ]

删除访问控制列表和地址池的关联:

代码语言:txt复制
undo nat outbound acl-number [ address-group group-number ]

将访问控制列表和NAT地址池关联时,如果选择no-pat 参数,则表示只转换数据包的IP地址而不使用端口信息,即不使用NAPT功能,缺省情况下启用NAPT功能。

配置内部服务器

配置一个内部服务器:

代码语言:txt复制
nat server [ acl-number ] [ vpn-instance vpn-instance-name ] protocol pro-type global global-addr [ global-port ] inside host-addr [ host-port ]

或:

代码语言:txt复制
nat server [ acl-number ] [ vpn-instance vpn-instance-name ] protocol pro-type global global-addr global-port1 global-port2 inside host-addr1 host-addr2 host-port
地址转换的显示与调试

打开NAT的调试开关:

代码语言:txt复制
debugging nat { alg | event | packet [ interface interface-type interface-number ] } host-port

关闭NAT的调试开关:

代码语言:txt复制
undo debugging nat { alg | event | packet [ interface interface-type interface-number ] }

查看地址转换的状况:

代码语言:txt复制
display nat { address-group | aging-time | all | outbound | server | statistics | session [ vpn-instance vpn-instance-name ] [ slot slot-number ] [ source global global-addr | source inside inside-addr ] [ destination ip-addr ] }

清除地址转换映射表:

代码语言:txt复制
reset nat { log-entry | session slot slot-number }

0 人点赞