功能
NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
1.宽带分享:这是 NAT 主机的最大功能。
2.安全防护:NAT 之内的 PC 联机到 Internet 上面时,其所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。
实现方式
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态****转换是指内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址。一般用于在内网中对外提供服务的服务器。3
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
**端口多路复用(Port address Translation,PAT)**是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。
ALG(Application Level Gateway),即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 "A" 和 "PTR" queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。
相关介绍
技术背景
要真正了解NAT就必须先了解IP地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球地址。RFC 1918 为私有网络预留出了三个IP 地址块,如下:
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。1
随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。
虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。
NAPT
NAPT(Network Address Port Translation),即网络地址端口转换,可将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,也就是与之间的转换。NAPT普遍用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换)、地址超载(address overloading)。
NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。
NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机,相互之间不会发生冲突。2
穿透方法
常用的针对UDP的NAT 穿透(NAT Traversal)方法主要有:STUN、TURN、ICE、uPnP等。其中ICE方式由于其结合了STUN和TURN的特点,所以使用最为广泛。针对TCP的NAT穿透技术仍为难点。实用的技术仍然不多。
工作原理
借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。
NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。
①如右图1这个 client(终端) 的 gateway (网关)设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时候的封包 Header 之 source IP(源IP) 为 192.168.1.100 ;
②而透过这个 NAT 主机,它会将 client 的对外联机封包的 source IP ( 192.168.1.100 ) 伪装成 ppp0 ( 假设为拨接情况 )这个接口所具有的公共 IP ,因为是公共 IP 了,所以这个封包就可以连上 Internet 了,同时 NAT 主机并且会记忆这个联机的封包是由哪一个 ( 192.168.1.100 ) client 端传送来的;
③由 Internet 传送回来的封包,当然由 NAT主机来接收了,这个时候, NAT 主机会去查询原本记录的路由信息,并将目标 IP 由 ppp0 上面的公共 IP 改回原来的 192.168.1.100 ;
④最后则由 NAT 主机将该封包传送给原先发送封包的 Client 2。
配置方式
在配置NAT(网络地址转换)之前,首先需要了解内部本地地址和内部全局地址的分配情况。根据不同的需求,执行以下不同的配置任务。
- 内部源地址NAT配置
- 内部源地址NAPT配置
- 重叠地址NAT配置
- TCP负载均衡
配置内部源地址静态NAT
当内部网络需要与外部网络通讯时,需要配置NAT,将内部私有IP地址转换成全局IP地址。可以配置静态或动态的NAT来实现互联互通的目的,或者需要同时配置静态和动态的NAT。
静态NAT,是建立内部本地地址和内部全局地址的一对一永久映射。当外部网络需要通过固定的全局可路由地址访问内部主机,静态NAT就显得十分重要。要配置静态NAT,在全局配置模式中执行以下命令:
|| ||
以上配置为较简单配置,可以配置多个Inside和outside接口。
配置内部源地址动态NAT
动态NAT,是建立内部本地地址和内部全局地址池的临时映射关系,过一段时间没有用就会删除映射关系。要配置动态NAT,在全局配置模式中执行以下命令:
|| ||
需要注意的是:访问列表的定义,使得只在列表中许可的源地址才可以被转换,必须注意访问列表最后一个规则是否定全部。访问列表不能定义太宽,要尽量准确,否则将出现不可预知的结果。
配置内部源地址NAPT
传统的NAT一般是指一对一的地址映射,不能同时满足所有的内部网络主机与外部网络通讯的需要。使用NAPT(网络地址端口转换),可以将多个内部本地地址映射到一个内部全局地址。
NAPT分为静态NAPT和动态NAPT。静态NAPT一般应用在将内部网指定主机的指定端口映射到全局地址的指定端口上。而前一小节提及的静态NAT,是将内部主机映射成全局地址。
要配置静态NAPT,在全局配置模式中执行以下命令:
|| ||
前面所述的动态内部源地址转换,已经自动完成内部源地址动态NAPT,配置是在全局配置模式中执行以下命令:
|| ||
NAPT可以使用地址池中的IP地址,也可以直接使用接口的IP地址。一般来说一个地址就可以满足一个网络的地址转换需要,一个地址最多可以提供64512个NAT地址转换。如果地址不够,地址池可以多定义几个地址。
配置重叠地址NAT
两个需要互联的私有网络分配了同样IP地址,或者一个私有网络和公有网络分配了同样的全局IP地址,这种情况称为地址重叠。两个重叠地址的网络主机之间是不可能通信的,因为它们相互认为对方的主机在本地网络。重叠地址NAT就是专门针对重叠地址网络之间通信的问题,配置了重叠地址NAT,外部网络主机地址在内部网络表现为另一个网络主机地址,反之一样。
重叠地址NAT配置,其实分为两个部分内容:(1)内部源地址转换配置,如何配置请参见上文;(2)外部源地址转换配置,只有与内部网络地址重叠的外部网络需要配置外部源地址转换,外部源地址转换可以采用静态NAT配置或动态NAT配置。
要配置外部源地址的静态NAT,在全局配置模式中执行以下命令:
|| ||
配置NAT实现TCP负载均衡
当内部网络某台主机TCP流量负载过重时,可用多台主机进行TCP业务的均衡负载。这时,可以考虑用NAT来实现TCP流量的负载均衡。NAT创建了一台虚拟主机提供TCP服务,该虚拟主机对应内部多台实际的主机,然后对目标地址进行轮询置换,达到负载分流的目的。要配置目标地址轮询转换,在全局配置模式中执行以下命令:
|| ||
配置特殊协议网关
默认情况下,特殊协议网关是全部打开的,通过命令可以关闭指定特殊协议网关。除了ftp和dns带有参数,其他每个特殊协议都只是开关命令。在全局配置模式中执行以下命令:
|| ||
配置实例
在配置网络地址转换的过程之前,首先必须搞清楚内部接口和外部接口,以及在哪个外部接口上启用NAT。通常情况下,连接到用户内部网络的接口是NAT内部接口,而连接到外部网络(如Internet)的接口是NAT外部接口。
静态地址转换的实现
假设内部局域网使用的lP地址段为192.168.0.1~192.168.0.254,路由器局域网端(即默认网关)的IP地址为192.168.0.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为61.159.62.128~61.159.62.135,路由器在广域网中的IP地址为61.159.62.129,子网掩码为255.255.255.248可用于转换的IP地址范围为61.159.62.130~61.159.62.134。要求将内部网址192.168.0.2~192.168.0.6分别转换为合法IP地址61.159.62.130~61.159.62.134。
第一步,设置外部端口。
interface serial 0
ip address 61.159.62.129 255.255.255.248
ip nat outside
第二步,设置内部端口。
interface ethernet 0
ip address 192.168.0.1 255.255.255.0
ip nat inside
第三步,在内部本地与外部合法地址之间建立静态地址转换。
ip nat inside source static 内部本地地址 外部合法地址。
示例:
ip nat inside source static 192.168.0.2 61.159.62.130 //将内部网络地址192.168.0.2转换为合法IP地址61.159.62.130
ip nat inside source static 192.168.0.3 61.159.62.131 //将内部网络地址192.168.0.3转换为合法IP地址61.159.62.131
ip nat inside source static 192.168.0.4 61.159.62.132 //将内部网络地址192.168.0.4转换为合法IP地址61.159.62.132
ip nat inside source static 192.168.0.5 61.159.62.133 //将内部网络地址192.168.0.5转换为合法IP地址61.159.62.133
ip nat inside source static 192.168.0.6 61.159.62.134 //将内部网络地址192.168.0.6转换为合法IP地址61.159.62.134
至此,静态地址转换配置完毕。
动态地址转换的实现
假设内部网络使用的IP地址段为172.16.100.1~172.16.100.254,路由器局域网端口(即默认网关)的IP地址为172.16.100.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为61.159.62.128~61.159.62.191,路由器在广域网中的IP地址为61.159.62.129,子网掩码为255.255.255.192,可用于转换的IP地址范围为61.159.62.130~61.159.62.190。要求将内部网址172.16.100.2~172.16.100.254动态转换为合法IP地址61.159.62.130~61.159.62.190。
第一步,设置外部端口。
设置外部端口命令的语法如下:
ip nat outside
示例:
interface serial 0 //进入串行端口serial 0
ip address 61.159.62.129 255.255.255.192//将其IP地址指定为61.159.62.129,子网掩码为255.255.255.192
ip nat outside //将串行口serial 0设置为外网端口
注意,可以定义多个外部端口。
第二步,设置内部端口。
设置内部接口命令的语法如下:
ip nat inside
示例:
interface ethernet 0 //进入以太网端口Ethernet 0
ip address 172.16.100.1 255.255.255.0 // 将其IP地址指定为172.16.100.1,子网掩码为255.255.255.0
ip nat inside //将Ethernet 0 设置为内网端口。
注意,可以定义多个内部端口。
第三步,定义合法IP地址池。
定义合法IP地址池命令的语法如下:
ip nat pool 地址池名称起始IP地址 终止IP地址子网掩码
其中,地址池名字可以任意设定。
示例:
ip nat pool chinanet 61.159.62.130 61.159.62.190 netmask 255.255.255.192 //指明地址缓冲池的名称为chinanet,IP地址范围为61.159.62.130~61.159.62.190,子网掩码为255.255.255.192。需要注意的是,即使掩码为255.255.255.0,也会由起始IP地址和终止IP地址对IP地址池进行限制。
或ip nat pool test 61.159.62.130 61.159.62.190 prefix-length 26
注意,如果有多个合法IP地址范围,可以分别添加。例如,如果还有一段合法IP地址范围为"211.82.216.1~211.82.216.254",那么,可以再通过下述命令将其添加至缓冲池中。
ip nat pool cernet 211.82.216.1 211.82.216.254 netmask 255.255.255.0
或
ip nat pool test 211.82.216.1 211.82.216.254 prefix-length 24
第四步,定义内部网络中允许访问Internet的访问列表。
定义内部访问列表命令的语法如下:
access-list 标号 permit 源地址通配符(其中,标号为1~99之间的整数)
access-list 1 permit 172.16.100.0 0.0.0.255 //允许访问Internet的网段为172.16.100.0~172.16.100.255,反掩码为0.0.0.255。需要注意的是,在这里采用的是反掩码,而非子网掩码。反掩码与子网掩码的关系为:反掩码+子网掩码=255.255.255.255。例如,子网掩码为255.255.0.0,则反掩码为0.0.255.255;子网掩码为255.0.0.0,则反掩码为0.255.255.255;子网掩码为255.252.0.0,则反掩码为0.3.255.255;子网掩码为255.255.255.192,则反掩码为0.0.0.63。
另外,如果想将多个IP地址段转换为合法IP地址,可以添加多个访问列表。例如,当欲将172.16.98.0~172.16.98.255和172.16.99.0~172.16.99.255转换为合法IP地址时,应当添加下述命令:
access-list2 permit 172.16.98.0 0.0.0.255
access-list3 permit 172.16.99.0 0.0.0.255
第五步,实现网络地址转换。
在全局设置模式下,将第四步由access-list指定的内部本地地址列表与第三步指定的合法IP地址池进行地址转换。命令语法如下:
ip nat inside source list 访问列表标号 pool 内部合法地址池名字
示例:
ip nat inside source list 1 pool chinanet
如果有多个内部访问列表,可以一一添加,以实现网络地址转换,如
ip nat inside source list 2 pool chinanet
ip nat inside source list 3 pool chinanet
如果有多个地址池,也可以一一添加,以增加合法地址池范围,如
ip nat inside source list 1 pool cernet
ip nat inside source list 2 pool cernet
ip nat inside source list 3 pool cernet
至此,动态地址转换设置完毕。
端口复用动态地址转换(PAT)
内部网络使用的IP地址段为10.100.100.1~10.100.100.254,路由器局域网端口(即默认网关)的IP地址为10.100.100.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为202.99.160.0~202.99.160.3,路由器广域网中的IP地址为202.99.160.1,子网掩码为255.255.255.252,可用于转换的IP地址为202.99.160.2。要求将内部网址10.100.100.1~10.100.100.254 转换为合法IP地址202.99.160.2。
第一步,设置外部端口。
interface serial 0
ip address 202.99.160.1 255.255.255.252
ip nat outside
第二步,设置内部端口。
interface ethernet 0
ip address 10.100.100.1 255.255.255.0
ip nat inside
第三步,定义合法IP地址池。
ip nat pool onlyone 202.99.160.2 202.99.160.2 netmask 255.255.255.252
// 指明地址缓冲池的名称为onlyone,IP地址范围为202.99.160.2,子网掩码为255.255.255.252。由于本例只有一个IP地址可用,所以,起始IP地址与终止IP地址均为202.99.160.2。如果有多个IP地址,则应当分别键入起止的IP地址。
第四步,定义内部访问列表。
access-list 1 permit 10.100.100.0 0.0.0.255
允许访问Internetr的网段为10.100.100.0~10.100.100.255,子网掩码为255.255.255.0。需要注意的是,在这里子网掩码的顺序跟平常所写的顺序相反,即0.0.0.255。
第五步,设置复用动态地址转换。
在全局设置模式下,设置在内部的本地地址与内部合法IP地址间建立复用动态地址转换。命令语法如下:
ip nat inside source list访问列表号pool内部合法地址池名字overload
示例:
ip nat inside source list1 pool onlyone overload //以端口复用方式,将访问列表1中的私有IP地址转换为onlyone IP地址池中定义的合法IP地址。
注意:overload是复用动态地址转换的关键词。
至此,端口复用动态地址转换完成。
还可以这样写:
ip nat inside source list 1 interface serial 0 overload
全部采用端口复用地址转换
当ISP分配的IP地址数量很少,网络又没有其他特殊需求,即无需为Internet提供网络服务时,可采用端口复用地址转换方式,使网络内的计算机采用同一IP地址访问Internet,在节约IP地址资源的同时,又可有效保护网络内部的计算机。
网络环境为:
局域网采用10Mb/s光纤,以城域网方式接入Internet。路由器选用拥有2个10/100 Mb/s自适应端口的Cisco 2611。内部网络使用的IP地址段为192.168.100.1~192.168.100.254,局域网端口Ethernet 0的IP地址为192.168.100.1,子网掩码为255.255.255.0。网络分配的合法IP地址范围为202.99.160.128~202.99.160.131,连接ISP的端口Ethernet 1的IP地址为202.99.160.129,子网掩码为255.255.255.252。可用于转换的IP地址为202.99.160.130。要求网络内部的所有计算机均可访问Internet。
案例分析:
既然只有一个可用的合法IP地址,同时处于局域网的服务器又只为局域网提供服务,而不允许Internet中的主机对其访问,因此完全可以采用端口复用地址转换方式实现NAT,使得网络内的所有计算机均可独立访问Internet。
配置清单:
interface fastethernet0/0
ip address 192.168.100.1 255.255.0.0 //定义本地端口IP地址
duplex auto
speed auto
ip nat inside // 定义为本地端口
!
interface fastethernet0/1
ip address 202.99.160.129 255.255.255.252
duplex auto
speed auto
ip nat outside
!
ip nat pool onlyone 202.99.160.130 202.99.160.130 netmask 255.255.255.252 //定义合法IP地址池,名称为onlyone
来源: 百度百科
内容资源由项目单位提供