NAT(Network Address Translation,网路地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP位址(即仅在本专用网内使用的专用地址),但现在又想和网际网路上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连线到网际网路的路由器上安装NAT软体。装有NAT软体的路由器叫做NAT路由器,它至少有一个有效的外部全球IP位址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP位址,才能和网际网路连线。
,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP位址空间的枯竭。在RFC 2663中有对NAT的说明。
基本介绍
- 中文名网路地址转换
- 外文名NAT(Network Address Translation)
- 可用于专用网和网际网路通信
- 简称nat
功能
NAT不仅能解决IP位址不足的问题,而且还能够有效地避免来自网路外部的攻击,隐藏并保护网路内部的计算机。
1.宽频分享这是 NAT 主机的最大功能。
2.安全防护NAT 之内的 PC 在线上到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 就具有一定程度的安全了,外界在进行 portscan(连线埠扫描) 的时候,就侦测不到源Client 端的 PC 。
实现方式
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和连线埠多路复用OverLoad。
静态转换是指将内部网路的私有IP位址转换为公有IP位址,IP位址对是一对一的,是一成不变的,某个私有IP位址只转换为某个公有IP位址。藉助于静态转换,可以实现外部网路对内部网路中某些特定设备(如伺服器)的访问。
动态转换是指将内部网路的私有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 地址是指在网际网路上全球唯一的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 或注册中心申请而在公司或企业内部自由使用。
随着接入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允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机,相互之间不会发生冲突。
穿透方法
目前常用的针对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位址的应用程式就不能正常工作。
①如右图这个 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 。
配置方式
在配置NAT(网路地址转换)之前,需要了解内部本地地址和内部全局地址的分配情况。根据不同的需求,执行以下不同的配置任务。
- 内部源地址NAT配置
- 内部源地址NAPT配置
- 重叠地址NAT配置
- TCP负载均衡
配置内部源地址静态NAT
当内部网路需要与外部网路通讯时,需要配置NAT,将内部私有IP位址转换成全局唯一IP位址。您可以配置静态或动态的NAT来实现互联互通的目的,或者需要配置静态和动态的NAT。
静态NAT,是建立内部本地地址和内部全局地址的一对一永久映射。当外部网路需要通过固定的全局可路由地址访问内部主机,静态NAT就显得十分重要。要配置静态NAT,在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# ip nat inside source static local-address global-address [permit-inside] [vrf vrf_name] | 定义内部源地址静态转换关係 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义该接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat outside | 定义该接口连线外部网路 |
以上配置为较简单配置,可以配置多个Inside和outside接口。
配置内部源地址动态NAT
动态NAT,是建立内部本地地址和内部全局地址池的临时映射关係,过一段时间没有用就会删除映射关係。要配置动态NAT,在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# ip nat pool address-pool start-address end-address {netmask mask | prefix-length prefix-length} | 定义全局IP位址池 |
R(config)# access-list access-list-number permit ip-address wildcard | 定义访问列表,只有匹配该列表的地址才转换 |
R(config)# ip nat inside source list access-list-number pool address-pool [vrf vrf_name] | 定义内部源地址动态转换关係 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)#ip nat outside | 定义接口连线外部网路 |
需要注意的是访问列表的定义,使得只在列表中许可的源地址才可以被转换,必须注意访问列表一个规则是否定全部。访问列表不能定义太宽,要儘量準确,否则将出现不可预知的结果。
配置内部源地址NAPT
传统的NAT一般是指一对一的地址映射,不能满足所有的内部网路主机与外部网路通讯的需要。使用NAPT(网路地址连线埠转换),可以将多个内部本地地址映射到一个内部全局地址。
NAPT分为静态NAPT和动态NAPT。静态NAPT一般套用在将内部网指定主机的指定连线埠映射到全局地址的指定连线埠上。而前一小节提及的静态NAT,是将内部主机映射成全局地址。
要配置静态NAPT,在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# ip nat inside source static {UDP | TCP} local-address port global-address port [permit-inside] [vrf vrf_name] | 定义内部源地址静态转换关係 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义该接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat outside | 定义接口连线外部网路 |
前面所述的动态内部源地址转换,已经自动完成内部源地址动态NAPT,配置是在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# ip nat pooladdress-pool start-address end-address {netmask mask | prefix-length prefix-length} | 定义全局IP位址池,对于NAPT,一般就定义一个IP位址 |
R(config)# access-list access-list-number permit ip-address wildcard | 定义访问列表,只有匹配该列表的地址才转换 |
R(config)# ip nat inside source list access-list-number {[pool address-pool] | [interface interface-type interface-number]} overload [vrf vrf_name] | 定义源地址动态转换关係,overload有和没有是一样的效果,仅是兼容主流厂商的配置。 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat outside | 定义接口连线外部网路 |
NAPT可以使用地址池中的IP位址,也可以直接使用接口的IP位址。一个地址就可以满足一个网路的地址转换需要,一个地址最多可以提供64512个NAT地址转换。如果地址不够,地址池可以多定义几个地址。
配置重叠地址NAT
两个需要互联的私有网路分配了同样IP位址,或者一个私有网路和公有网路分配了同样的全局IP位址,这种情况称为地址重叠。两个重叠地址的网路主机之间是不可能通信的,因为它们相互认为对方的主机在本地网路。重叠地址NAT就是专门针对重叠地址网路之间通信的问题,配置了重叠地址NAT,外部网路主机地址在内部网路表现为另一个网路主机地址,反之一样。
重叠地址NAT配置,其实分为两个部分内容1)内部源地址转换配置,如何配置请参见上文;2)外部源地址转换配置,只有与内部网路地址重叠的外部网路需要配置外部源地址转换,外部源地址转换可以採用静态NAT配置或动态NAT配置。
要配置外部源地址的静态NAT,在全局配置模式中执行以下命令
命令 | 作用 |
R(config)#ip nat outside source static global-address local-address [vrf vrf_name] | 定义外部源地址静态转换关係 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义该接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat outside | 定义接口连线外部网路 |
配置NAT实现TCP负载均衡
当内部网路某台主机TCP流量负载过重时,可用多台主机进行TCP业务的均衡负载。这时,可以考虑用NAT来实现TCP流量的负载均衡。NAT创建了一台虚拟主机提供TCP服务,该虚拟主机对应内部多台实际的主机,然后对目标地址进行轮询置换,达到负载分流的目的。要配置目标地址轮询转换,在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# ip nat pool address-pool start-address end-address {netmask mask | prefix-length prefix-length} | 定义IP位址池,包含所有实际主机地址 |
R(config)# access-list access-list-number permitip-address wildcard | 定义访问列表,只匹配虚拟主机地址。注意应该使用匹配目标IP的扩展ACL。 |
R(config)# ip nat inside destination list access-list-number pool address-pool [vrf vrf_name] | 定义内部目标地址动态转换关係 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat inside | 定义接口连线内部网路 |
R(config)# interface interface-type interface-number | 进入接口配置模式 |
R(config-if)# ip nat outside | 定义接口连线外部网路 |
配置特殊协定网关
默认情况下,特殊协定网关是全部打开的,通过命令可以关闭指定特殊协定网关。除了ftp和dns带有参数,其他每个特殊协定都只是开关命令。在全局配置模式中执行以下命令
命令 | 作用 |
R(config)# no ip nat translation ftp | 关闭FTP特殊协定网关 |
R(config)# ip nat translation ftp | 开启FTP特殊协定网关,默认连线埠21 |
R(config)# ip nat translation ftp 2121 | 开启FTP特殊协定网关,指定连线埠2121 |
配置实例
在配置网路地址转换的过程之前,必须搞清楚内部接口和外部接口,以及在哪个外部接口上启用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
access-list 1 permit 192.168.100.0 0.0.0.255 //定义本地访问列表
ip nat inside source list1 pool onlyone overload //採用连线埠复用动态地址转换
动态地址+连线埠复用地址转换
许多FTP网站考虑到伺服器性能和Internet连线频宽的占用问题,都限制同一IP位址的多个进程访问。如果採用连线埠复地址转换方式,则网路内的所有计算机都採用同一IP位址访问Internet,那幺,将而被禁止对该网站的访问。所以,当提供的合法IP位址数量稍多时,可採用连线埠复用和动态地址转换方式,从而既可保证所有用户都能够获得访问Internet的权力,,又不致、某些计算机因使用同一IP位址而被限制许可权。需要注意的是,由于所有计算机都採用动态地址转换方式,Internet中的所有计算机将无法实现对网路内部伺服器的访问。
网路环境
区域网路以2Mb/s DDN专线接入Internet,路由器选用安装了广域网模组的Cisco 2611,如图4-2-2所示。内部网路使用的IP位址段为172.16.100.1~172.16.102.254,区域网路连线埠Ethernet 0的IP位址为172.16.100.1,子网掩码为255.255.0.0。网路分配的合法IP位址範围为202.99.160.128~202.99.160.192,子网掩码为255.255.255.192,可用于转换的IP位址範围为202.99.160.130~202.99.160.190。要求网路部分的部分计算机可以不受任何限制地访问Internet,伺服器无需提供Internet访问服务。
案例分析
既然要求网路中的部分计算机可以不受任何限制地访问Internet,,伺服器无需提供Internet访问服务,那幺,只需採用动态地址转换+连线埠复用地址转换方式即可实现。部分有特殊需求的计算机採用动态地址转换的NAT方式,其他计算机则採用连线埠复用地址转换的NAT方式。,部分有特殊需求的计算机可採用内部网址172.16.100.1~172.16.100.254,并动态转换为合法地址202.99.160.130~202.99.160.189,其他计算机採用内部网址172.16.101.1~172.16.102.254,全部转换为202.99.160.190。
配置清单
interface fastethernet0/1
ip address 172.16.100.1 255.255.0.0 //定义区域网路连线埠IP位址
duplex auto
speed auto
ip nat inside //定义为局域连线埠
!
interface serial 0/0
ip address 202.99.160.129 255.255.255.192 //定义广域网连线埠IP位址
!
duplex auto
speed auto
ip nat outside //定义为广域连线埠
!
ip nat pool public 202.99.160.190 202.130.160.190 netmask 255.255.255.192 //定义合法IP位址池,名称为public
ip nat pool super 202.99.160.130 202.130.160.189 netmask 255.255.255.192 //定义合法IP位址池,名称为super
access-list1 permit 172.16.100.0 0.0.0.255 //定义本地访问列表1
access-list2 permit 172.16.101.0 0.0.0.255 //定义本地访问列表2
access-list2 permit 172.16.102.0 0.0.0.255
ip nat inside source list1 pool super //定义列表1採用动态地址转换
ip nat inside source list2 pool public overload //定义列表2採用连线埠复用地址转换
静态地址转换+连线埠复用地址转换
其实在很多时候,网路中的伺服器既为网路内部的客户提供网路服务,又为Internet中的用户提供访问服务。,如果採用连线埠复用地址转换或动态地址转换,将由于无法确定伺服器的IP位址,而导致Internet用户无法实现对网路内部伺服器的访问。此时,就应当採用静态地址转换+连线埠复用地址转换的NAT方式。也就是说,对伺服器採用静态地址转换,以确保伺服器拥有固定的合法IP位址。而对普通的客户计算机则採用连线埠复用地址转换,使所有用户都享有访问Internet的权力。
网路环境为
区域网路採用10Mb/s光纤,以城域网方式接入Internet。路由器选用拥有2个10/100 Mb/s自适应连线埠的Cisco 2611。内部网路使用的IP位址段为10.18.100.1~10.18.104.254,区域网路连线埠Ethernet 0的IP位址为10.18.100.1,子网掩码为255.255.0.0。网路分配的合法IP位址範围为211.82.220.80~211.82.220.87,连线ISP的连线埠Ethernet 1的IP位址为211.82.220.81,子网掩码为255.255.255.248。要求网路内部的所有计算机均可访问Internet,并且在Internet中提供Web、E-mail、FTP和Media等4种服务。
案例分析
既然网路内的伺服器要求能够被Internet访问到,那幺,这部分主机必须拥有合法的IP位址,也就是说,伺服器必须採用静态地址转换。其他计算机由于没有任何限制,所以,可採用连线埠复用地址转换的NAT方式。,伺服器可採用区域网路址10.18.100.1~10.18.100.254,并分别映射为一个合法的IP位址。其他计算机则採用内部网址10.18.101.1~172.16.104.254,并全部转换为一个合法的IP位址。
配置清单
interface fastethernet0/0
ip address 10.18.100.1 255.255.0.0 //定义区域网路口IP位址
duplex auto
speed auto
ip nat inside //定义区域网路口
!
interface fastethernet0/1
ip address 211.82.220.81 255.255.255.248 //定义广域网口IP位址
duplex auto
speed auto
ip nat outside //定义广域网口
!
ip nat pool every 211.82.220.86 211.82.220.86 netmask 255.255.255.248 //定义合法IP位址池
access-list 1 permit 10.18.101.0 0.0.0.255 //定义本地访问列表1
access-list 1 premit 10.18.102.0 0.0.0.255
access-list 1 premit 10.18.103.0 0.0.0.255
access-list 1 premit 10.18.104.0 0.0.0.255
ip nat inside source list1 pool every overload //定义列表达1採用连线埠复用地址转换
ip nat inside source static 10.18.100.10 211.82.220.82 //定义静态地址转换
ip nat inside source static 10.18.100.11 211.82.220.83
ip nat inside source static 10.18.100.12 211.82.220.84
ip nat inside source static 10.18.100.13 211.82.220.85
TCP/UDP连线埠NAT映射
如果ISP提供的合法IP位址的数量较多,我们自然可以採用静态地址转换+连线埠复用动态地址转换的方式得以完美实现。但如果ISP只提供4个IP位址,其中2个作为网路号和广播地址而不可使用,1个IP位址要用于路由器定义为默认网关,那幺将只剩下1个IP位址可用。我们也可以利用这个仅存的一个IP位址採用连线埠复用地址转换技术,从而实现整个区域网路的Internet接入。由于伺服器也採用动态连线埠,,Internet中的计算机将无法访问到网路内部的伺服器。有没有好的解决问题的方案呢?这就是TCP/UDP连线埠NAT映射。
我们知道,不同应用程式使用的TCP/UDP的连线埠是不同的,比如,Web服务使用80,FTP服务使用21,SMTP服务使用25,POP3服务使用110,等等。,可以将不同的TCP连线埠绑定至不同的内部IP位址,从而只使用一个合法的IP位址,即可在允许内部所有伺服器被Internet访问的,实现内部所有主机对Internet访问。
网路环境
区域网路採用10Mb/s光纤,以城域网方式接入Internet。路由器选用拥有2个10/100 Mb/s自适应连线埠的Cisco 2611。内部网路使用的IP位址段为192.168.1.1~192.168.1.254,区域网路连线埠Ethernet 0的IP位址为192.168.1.1,子网掩码为255.255.255.0。网路分配的合法IP位址範围为,211.82.220.128~211.82.220.130,连线ISP的连线埠Ethernet 1的IP位址为211.82.220.129,子网掩码为255.255.255.252,可用于转换的IP位址为211.82.220.129。要求网路内部的所有计算机均可访问Internet。
案例分析
既然只有一个可用的合法IP位址,只能採用连线埠复用方式实现NAT,不过,由于又要求网路内部的伺服器可以被Internet访问到,,必须使用PAT创建TCP/UDP连线埠的NAT映射。需要注意的是,也可以直接使用广域连线埠创建TCP/UDP连线埠的NAT映射,也就是说,即使只有一个IP位址,也可以完美实现连线埠复用。由于合法IP位址位于路由器连线埠上,所以,不再需要定义NAT池,只简单地使用inside source list语句即可。
需要注意的是,由于每种套用服务都有自己默认的连线埠,所以,这种NAT方式下,网路内部每种套用服务中只能各自有一台伺服器成为Internet中的主机,例如,只能有一台Web伺服器,一台E-mail服务,一台FTP伺服器。儘管可以採用改变默认连线埠的方式创建多台套用伺服器,但这种伺服器在访问时比较困难,要求用户必须先了解某种服务採用的新TCP连线埠。
配置清单
interface fastethernet0/0
ip address 192.168.1.1 255.255.255.0//指定区域网路口的IP位址
duplex auto
speed auto
ip nat inside //指定区域网路接口
!
interface fastethernet0/1
ip address 211.82.220.129 255.255.255.252 //指定广域网口的IP位址
access-list 1 permit 192.168.1.0 0.0.0.255
!
ip nat inside source list1 interface fastethernet0/1 overload //启用连线埠复用地址转换,并直接採用fastethernet0/1的IP位址。
ip nat inside source static tcp 192.168.1.11 80 211.82.220.129 80
ip nat inside source static tcp 192.168.1.12 21 211.82.220.129 21
ip nat inside source static tcp 192.168.1.13 25 211.82.220.129 25
ip nat inside source static tcp 192.168.1.13 110 211.82.220.129 110
利用地址转换实现负载均衡
随着访问量的上升,当一台伺服器难以胜任时,就必须採用负载均衡技术,将大量的访问合理地分配至多台伺服器上。,实现负载均衡的手段有许多种,比如可以採用伺服器群集负载均衡、交换机负载均衡、DNS解析负载均衡等等。
其实除此以外,也可以通过地址转换方式实现伺服器的负载均衡。事实上,这些负载均衡的实现大多是採用轮询方式实现的,使每台伺服器都拥有平等的被访问机会。
网路环境
区域网路以2Mb/s DDN专线拉入Internet,路由器选用安装了广域网模组的Cisco 2611。内部网路使用的IP位址段为10.1.1.1~10.1.3.254,区域网路连线埠Ethernet 0的IP位址为10.1.1.1,子网掩码为255.255.252.0。网路分配的合法IP位址範围为202.110.198.80~202.110.198.87,连线ISP的连线埠Ethernet 1的IP位址为202.110.198.81,子网掩码为255.255.255.248。要求网路内部的所有计算机均可访问Internet,并且在3台Web伺服器和2台FTP伺服器实现负载均衡。
案例分析
既然要求网路内所有计算机都可以接入Internet,而合法IP位址又只有5个可用,可採用连线埠复用地址转换方式。本来对伺服器通过採用静态地址转换,赋予其合法IP位址即可。,由于伺服器的访问量太大(或者是伺服器的性能太差),不得不使用多台伺服器作负载均衡,,必须将一个合法IP位址转换成多相内部IP位址,以轮询方式减轻每台伺服器的访问压力。
配置档案
interface fastethernet0/1
ip adderss 10.1.1.1 255.255.252.0 //定义区域网路连线埠IP位址
duplex auto
speed auto
ip nat inside //定义为局域连线埠
!
interface serial 0/0
ip address 202.110.198.81 255.255.255.248 //定义广域网连线埠IP位址
duplex auto
speed auto
ip nat outside //定义为广域连线埠
!
access-list 1 permit 202.110.198.82 //定义轮询地址列表1
access-list 2 permit 202.110.198.83 //定义轮询地址列表2
access-list 3 permit 10.1.1.0 0.0.3.255 //定义本地访问列表3
!
ip nat pool websev 10.1.1.2 10.1.1.4 255.255.255.248 type rotary //定义Web伺服器的IP位址池,Rotary关键字表示準备使用轮询策略从NAT池中取出相应的IP位址用于转换进来的IP报文,访问202.110.198.82的请求将依次传送给web伺服器10.1.1.2、10.1.1.3和10.1.1.4
ip nat pool ftpsev 10.1.1.8 10.1.1.9 255.255.255.248 type rotary //定义ftp伺服器的IP位址池。
ip nat pool normal 202.110.198.84 202.110.198.84 netmask 255.255.255.248 //定义合法IP位址池,名称为normal
ip nat inside destination list 1 pool websev //inside destination list 语句定义与列表1相匹配的IP位址的报文将使用轮询策略
ip nat inside destination list 2 pool ftpsev
转换方法
Full cone NAT
即着名的一对一(one-to-one)NAT一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外传送。任意外部主机都能通过给eAddr:port2发包到达iAddr:port1
Address-Restricted cone NAT
限制地址,即只接收曾经传送到对端的IP位址来的数据包。一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外传送。任意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是iAddr:port1之前传送过包到hostAddr:any. "any"也就是说连线埠不受限制
Port-Restricted cone NAT
类似受限制锥形NAT(Restricted cone NAT),还有连线埠限制。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外传送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是iAddr:port1之前传送过包到hostAddr:port3.
Symmetric NAT(对称NAT)
每一个来自相同内部IP与port的请求到一个特定目的地的IP位址和连线埠,映射到一个独特的外部来源的IP位址和连线埠。
同一个内部主机发出一个信息包到不同的目的端,不同的映射使用
外部主机收到了一封包从一个内部主机可以送一封包回来
常见问题
1. NAT的作用是什幺?
NAT的作用是把区域网路的私有地址,转化成外网的公有地址。使得内部网路上的(被设定为私有IP位址的)主机可以访问Internet。
2. NAT分为哪几种?
NAT可以分为Basic NAT和PAT
- Basic NAT只转化IP,不映射连线埠。
- PAT除了转化IP,还做连线埠映射,可以用于多个内部地址映射到少量(甚至一个)外部地址。
NAT还可以分为静态NAT和动态NAT
- 静态NAT,将内部网路中的每个主机都永久映射成外部网路中的某个合法的地址,多用于伺服器。
- 动态NAT,则是在外部网路中定义了一个或多个合法地址,採用动态分配的方法映射到内部网路。
3.为什幺需要有NAT?
NAT的主要作用,是解决IP位址数量紧缺。当大量的内部主机只能使用少量的合法的外部地址,就可以使用NAT把内部地址转化成外部地址。
NAT还可以防止外部主机攻击内部主机(或伺服器)。
4. 怎样映射?
如何将大量的内部地址,映射成少量的外部地址?
对于第四层是TCP或UDP的数据包,NAT通过更改源连线埠号,来实现多对少的映射。
例如内部IP1~IP4,4个地址映射成外部一个地址IP5。
(IP1,Port1)映射成(IP5,Port1)
(IP2,Port1)映射成(IP5,Port2)
(IP3,Port2)映射成(IP5,Port3)
(IP4,Port2)映射成(IP5,Port4)
对于ICMP包,NAT通过更改ICMP的ID,来实现多对少的映射。
5.TCP或UDP的连线埠,原本是用来做什幺的?
连线埠号是用来连线上层程式的。例如,连线埠号23,对应了Telnet;连线埠号80,对应了Http等等。
,在本动画中,当R1转化H1传送给Server的TCP包的时候,不能转化目的地连线埠。Server正是通过连线埠号23,才知道把收到的TCP交给Telnet处理。
6. NAT有什幺弊端?
在一个具有NAT功能的路由器下的主机并没有建立真正的端对端连线,并且不能参与一些网际网路协定。一些需要初始化从外部网路建立的TCP连线,和使用无状态协定(比如UDP)的服务将被中断。除非NAT路由器作一些具体的努力,否则送来的数据包将不能到达正确的目的地址。(一些协定有时可以在套用层网关的辅助下,在参与NAT的主机之间容纳一个NAT的实例,比如FTP。)NAT也会使安全协定变的複杂。
7.NAT局限性
(1)NAT违反了IP位址结构模型的设计原则。IP位址结构模型的基础是每个IP位址均标识了一个网路的连线。Internet的软体设计就是建立在这个前提之上,而NAT使得有很多主机可能在使用相同的地址,如10.0.0.1。
(2)NAT使得IP协定从面向无连线变成面向连线。NAT必须维护专用IP位址与公用IP位址以及连线埠号的映射关係。在TCP/IP协定体系中,如果一个路由器出现故障,不会影响到TCP协定的执行。因为只要几秒收不到应答,传送进程就会进入逾时重传处理。而当存在NAT时,最初设计的TCP/IP协定过程将发生变化,Internet可能变得非常脆弱。
(3)NAT违反了基本的网路分层结构模型的设计原则。因为在传统的网路分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。
(4)有些套用是将IP位址插入到正文的内容中,例如标準的FTP协定与IP Phone协定H.323。如果NAT与这一类协定一起工作,那幺NAT协定一定要做适当地修正。,网路的传输层也可能使用TCP与UDP协定之外的其他协定,那幺NAT协定必须知道并且做相应的修改。由于NAT的存在,使得P2P套用实现出现困难,因为P2P的档案共享与语音共享都是建立在IP协定的基础上的。
(5)NAT存在对高层协定和安全性的影响问题。RFC对NAT存在的问题进行了讨论。NAT的反对者认为这种临时性的缓解IP位址短缺的方案推迟了Ipv6迁移的进程,而并没有解决深层次的问题,他们认为是不可取的。