NAT概述

网络地址转换(NAT)通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上,广泛应用于各类型的互联网接入方式和各种类型的网络中。

NAT的实现方式有一下三种

静态地址转换:将内部网络的私有IP地址转换为公有的合法的IP地址,IP地址的对应关系是一对一的,而且是不变的,即某个私有的IP地址只能转换为某个固定的公有IP地址。

动态地址转换:将内部网络的私有地址转换为公有地址时,IP地址的对应关系式不确定的,而是随机的,所有被授权访问互联网的私有地址可随机转换为任何指定的合法外部IP地址(注意:动态地址转换需要配置私有IP地址池和公有IP地址池,并且私有IP地址的数量不可以大于公有IP地址的数量)。

端口多路复用:改变外出数据包的源IP地址和源端口并进行端口转换,即端口地址转换采用端口多路复用方式。内部网络的所有主机均可共享一个合法的外部IP地址实现互联网的访问,从而可以最大限度地节约IP地址资源。


配置三种NAT的语法如下

1、配置静态NAT

在内部地址和路由器的外部接口地址之间建立静态地址转换的语法如下:

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

各参数解释如下

inside source:表示从inside口进入的流量将源地址(source)进行静态转换。

local-ip:内部IP地址

global-ip:外部IP地址

extendable:(可选)表示允许同一个内部地址映射到多个外部地址。

列如:配置将内部服务器192.168.1.100映射到路由器的公有IP地址202.106.123.1上。

Router(config)#ip nat inside source static 192.1681.100 202.106.123.1

2、配置NAT端口映射

将内部地址的TCP或UDP端口映射到外部地址的语法如下:

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

各参数解释如下

inside source:表示从inside口进入的流量将源地址(source)进行静态转换。

local-ip UDP/TCP-port:内部IP地址和端口号。

global-ip UDP/TCP-port:外部IP地址和端口号。

extendable:(可选)表示允许同一个内部地址映射到多个外部地址。

列如:将内部web服务器192.168.2.200的8080端口隐射到外部202.106.123.2的80端口上。

Router(config)#ip nat inside source static  tcp 192.1681.100 8080 202.106.123.1 80

3、配置动态NAT

在配置动态的NAT时,需要创建允许访问外网的内部地址池和需要映射的外部地址池,注意:内部IP地址数不可以大于外部IP地址数。

创建内部允许访问外网的地址池,这里我们可以结合上一章我所学的ACL。

列如:使用ACL定义一个允许访问外网的网段。

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

定义外部地址池的语法如下:

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:(可选)地址池的地址为循环使用。

列如:创建一个外部地址池。

Router(config)#ip nat pool test 61.159.62.131 61.159.62.190 netmask 255.255.255.192

将创建好的内部地址池和外部地址池进行地址转换语法如下:

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

overload:(可选)表示使用地址复用。

列如:将上面创建好的内部地址池和外部地址池进行地址转换。

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


配置端口多路复用(PAT)

端口多路复用可以针对外部地址进行转换,也可以直接使用路由器的外部接口IP地址进行转换。

配置端口多路复用也需要创建内部地址池和外部地址池,方法和动态NAT一样。

列如:配置端口多路复用,允许192.168.100.0/24网段的内部IP通过202.106.123.1这个外部地址上网。

1、创建内部地址池

Router(config)#access-list 2 permit 192.168.100.0 0.0.0.255

2、创建外部地址池

Router(config)#ip nat pool test1 202.106.123.1 202.106.123.1 netmask 255.255.255.192

3、设置复用动态地址转换

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

也可以不创建外部地址池,而直接使用路由器的外部接口。

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


不管配置的是那种类型的NAT,最后都不要在路由器接口上启用NAT,否则配置无效。

在路由器的接口上启用NAT。

Router(config)#int f0/0

Router(config-if)#ip nat outside

Router(config)#int f1/0

Router(config-if)#ip nat inside

设置NAT功能的路由器需要有一个内部端口(inside)和一个外部端口(outside)。内部端口连接的网络使用的是内部IP地址,外部端口连接的是外部的网络,如互联网。