1.私网地址
在现实环境中,企业、家庭使用的网络是私网地址(内网),运营商维护的网络则是公网地址(外网)。私网地址是在局域网(LAN)内使用的,因此无法被路由,不能直接用于互联网通信。但利用网络地址转换(NAT),可以让这些私网地址进行互联网通信。
*私有IP地址分为以下几个范围:
10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
私网地址可以被任何组织或个人在其内部网络中自由使用,无需向全球互联网注册机构申请。
家里的路由器往往集成了NAT、DHCP、缺省路由(直接向wan口传送数据包)
2. NAT种类
NAT的原理就是把内网ip映射为公网ip(更改发送的ip数据包中的源ip,更改接受的ip数据包的目的ip),只是不同种类的NAT映射方式不一样
2.1静态NAT
一对一映射,一个公网ip对应一个私网ip。用于一些需要对外映射的服务器,并没有起到节省公网ip的作用
配置代码:
nat static enable
#开启nat静态功能。需要先进入接口,才能敲入此命令
nat static global 公网地址 inside 私网地址
#公网地址、私网地址一一映射
display nat static
#显示静态nat设置
2.2动态NAT
使用公有地址池,以先到先得的原则分配公网地址。
当内网主机请求访问公网时,动态 NAT 会从地址池中选择一个未被占用的公网 IP 地址一对一转化。直到会话结束,NAT才会把公网ip释放回地址池中。
*路由器中设置动态NAT的步骤如下
(1)创建动态地址池:
nat address-group 编号 公网ip地址范围
#创建一个公网ip地址池
#编号一般是1到7任选一个
display nat address-group
#显示当前路由器内的公网地址池
(2)创建ACL
*什么是ACL
ACL是访问控制列表,通过设置规则来限制哪些报文可以通过,哪些报文则被禁止通过。
在动态NAT中,ACL则是用来限制哪些内网ip可以使用公网池进行映射的
在路由器界面输入acl ?后,可以看到下图所示的提示界面
其中2000-2999是基础acl标号,动态NAT使用基础acl标号即可。
动态NAT中acl的设置命令如下:
acl 2000
#设置一个编号为2000的acl
rule permit source 192.168.20.0 0.0.0.255
#设置192.168.20.0可以被映射。0.0.0.255代表前24位相同,后8位0到255的匹配范围,刚好与掩码相反
#如果只输入rule permit,代表所有内网ip都被允许映射
(3)关联acl与动态NAT池
进入公网端口下,输入下述命令
nat outbound 2000 address-group 1 no-pat
#2000是acl编号,1是动态NAT池的编号
dis nat outbound
#查看当前端口动态NAT池与acl的绑定表
(4)实例
关于AR1的端口ip设置就略过了,下面给出路由和NAT设置(AR2不需要额外设置)
AR1:
ip route-s 0.0.0.0 0 5.0.0.254
#配置一条静态路由
nat address-group 1 5.0.0.50 5.0.0.60
acl 2000
rule permit source 192.168.0.0 0.0.0.255
int g0/0/1
nat outbound 2000 address-group 1 no-pat
我一开始实验用的路由器是AR1220,结果是静态NAT能通,动态NAT不通,换成AR2220后,动态NAT就通了,也不知道为什么
2.3 NAPT(PAT)
同时对ip与端口号进行转换(不同的内网ip可以对应同一个公网ip,只是端口号不一样),实现公网ip与私网ip的1比N映射
NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个公网IP后面。
*NAPT的设置与动态NAT的设置步骤基本相同,只需要去掉最后绑定acl命令中的no-pat
再次以之前的实例为样本设置NAPT:
关于AR1的端口ip设置就略过了,下面给出路由和NAT设置(AR2不需要额外设置)
AR1:
ip route-s 0.0.0.0 0 5.0.0.254
#配置一条静态路由
nat address-group 1 5.0.0.50 5.0.0.60
acl 2000
rule permit source 192.168.0.0 0.0.0.255
int g0/0/1
nat outbound 2000 address-group 1
2.4 Easy IP
Easy IP 可以算是NAPT的一种特例,可以自动根据路由器上WAN 接口的公网IP 地址实现与私网IP 地址之间的映射(无需创建公网地址池)。
Easy IP 主要应用于将路由器WAN 接口IP 地址作为要被映射的公网IP 地址的情形,特别适合小型局域网接入公网的情况。
*Easy IP由于不需要动态池,所以步骤更简单,只需要设置acl即可,其公网口是哪个,acl就自动与公网口绑定,甚至插拔更换公网口,路由器也会再自动匹配,这也是家用路由器使用Easy IP的原因。
再以上示图例为例:
关于AR1的端口ip设置就略过了,下面给出路由和NAT设置(AR2不需要额外设置)
AR1:
ip route-s 0.0.0.0 0 5.0.0.254
#配置一条静态路由
acl 2000
rule permit source 192.168.0.0 0.0.0.255
int g0/0/1
nat outbound 2000
2.5 NAT server(端口映射)
将内网中的某个服务的内网ip与端口映射为一对固定的公网ip与端口,优先级比NAPT更高
*其配置方式以下图为例:
关于AR4的端口ip设置就略过了,下面给出路由和NAT设置(AR5不需要额外设置)
AR4:
ip route-s 0.0.0.0 0 5.0.0.1
#配置一条静态路由
int g0/0/1
进入公网口
nat server protocol tcp global 5.0.0.150 8080 inside 192.168.20.50 80
#将内网中ip为192.168.20.50的端口为80的服务,映射为公网ip为5.0.0.150同时端口为8080的服务
#tcp是http使用的应用层协议,在需要的情况下也可以填udp、icmp
完成配置后,在客户端的http部分输入服务器http服务映射出的公网ip,同时使用冒号加上新映射的端口8080,可以看到能够访问服务器的http服务
NAT server还可以像Easy IP那样直接使用wan口ip进行映射,设置方法如下:
nat server protocol tcp global current-interface 8080 inside 192.168.20.50 80
#将内网中ip为192.168.20.50的端口为80的服务,映射为wan口ip同时端口为8080的服务
*2.6覆盖wan口ip的报错
出现上图错误是因为NAT设置的公网ip与wan口ip冲突了。以下是出现该错误的几种情况:
(1)动态NAT或NAPT的动态NAT池内包含了wan口ip
(2)NAT server映射的公网ip设置成了wan口ip(没有使用current-interface参数,直接输入wan口ip)