1、NAT概念
随着网络发展,公网IP地址的数量越来越少,为了起到缓解并且保护公司内部服务器,就用到了网络地址转换(NAT)
NAT(网络地址转换)通过将内部网络的私网IP地址转换成全球能公认的IP地址,使得内部网络可以连接到互联网中,比如:家里用的网络就是通过NAT转换上网的
a. NAT的实现方式
静态转换:就是将内部网络的私有IP地址转换为公用合法的IP地址,IP地址的对应关系是一对一的,而且是不变得,某个私有IP地址只转换为某个固定的合法的外部IP地址。例如:有5个私网地址需要上网,公网IP就必须有5个
动态转换:指将内部网络的私有地址转换为公网地址时,IP地址的对应关系是不确定的、随机的,不过动态转换也是一对一的,当私网地址的数量少于公网IP时,才能使用动态转换。
端口地址转换:是改变外出数据包的源IP地址和源端口号,并进行端口转换。内部网络的所有主机均可共享一个合法的公网IP地址来实现互联网的访问,同时也是目前使用最多的联网方式
NAT对于地址转换中的终端设备是透明的,pc只知道自己的IP地址是192.168.1.2,并不知道125.25.65.3,服务器只知道PC的IP地址是125.25.65.3,不知道192.168.1.2。
- 内部局部地址:在内部网络中分配给主机的私有IP地址
- 内部全局地址:该地址通常是互联网通用的公网IP地址,由ISP提供
- 外部全局地址:外部网络上的主机分配的IP地址,该地址通常也是互联网公认的IP
- 外部局部地址:也是一个私有IP地址,只不过是在另一个局域网中
b. 静态转换和动态转换
- 内部主机10.1.1.1和外部主机B建立了一条连接,边界路由器从主机10.1.1.1接收到第一个数据包,将检查NAT转换表。
- 如果已经为该地址配置了静态地址转换,或者该地址的动态地址转换已经建立,那么边界路由器使用所选的内部全局地址(202.168.2.2)来替换内部局部地址(10.1.1.1)并转发该数据包,否则路由器会决定对地址10.1.1.1进行转换。路由器将从动态地址池中集中分配一个合法地址,并建立从内部局部地址到内部全局地址的映射
- 主机B收到该数据包后,回应给内部全局地址202.168.2.2,然后对内部局部地址10.1.1.1进行应答
- 当边界路由器接收到目的地址为内部全局地址的数据包时,路由器将用该内部全局地址通过NAT转换表查找出内部局部地址,然后,路由器将数据包中的目的地址转换成10.1.1.1,并将数据包发送给10.1.1.1。
---------------------------------------
例1:配置静态NAT
- 外部主机: 155.34.2.3
- 外部路由器:f1/0 155.34.2.2 f0/0 61.159.62.129
- NAT路由器:f0/0 61.159.62.130 f1/0 192.168.1.1
- pc1 192.168.1.1
- pc2 192.168.1.3
公司从运营商处获得的公网IP地址的范围是61.159.62.130---61.159.62.132,NAT路由器在广域网的地址是61.159.62.130,可用于地址转换的地址是61.159.62.131、61.159.62.132。
NAT转换语法如下:
router(config)#ip nat inside source static local-ip global-ip [extendable]
- local-ip:内部局部地址
- global-ip:内部全局地址
- extendable:(可选)表示允许同一个内部局部地址映射到多个内部全局地址。
- inside:表示从inside口进入的流量对源地址(source)进行静态转换
1) 外部路由器和NAT路由器配置路由表
# 外部路由器:
R2(config)#ip route 192.168.1.0 255.255.255.0 61.159.62.130
# NAT路由器:
R1(config)#ip route 0.0.0.0 0.0.0.0 61.159.62.129
2) 在NAT路由器上配置静态NAT
# 将内部局部地址192.168.1.2 转换为内部全局地址61.159.62.131
R1(config)#ip nat inside source static 192.168.1.2 61.159.62.131
# 将内部局部地址192.168.1.3转换为内部全局地址61.159.62.132
R1(config)#ip nat inside source static 192.168.1.3 61.159.62.132
3) 在NAT路由器的内部和外部端口启用NAT
有NAT功能的路由器需要有一个内部端口(inside)和一个外部端口(outside),内部端口连接的网络用户使用的是内部IP地址,外部端口连接的是外部网络,NAT路由器必须在两个端口上启用NAT
R1(config)#int f1/0
# 内部端口启用NAT
R1(config-if)#ip nat inside
R1(config)#int f0/0
# 外部端口启用NAT
R1(config-if)#ip nat outside
# 查看地址转换信息
R1#show ip nat translations
4)pc1 ping 外部主机地址转换情况,内部局部地址转换成内部全局地址
------------------------------------------
例2:动态NAT配置
- 外部主机: f1/0 61.159.62.1
- NAT路由器:f0/0 61.159.62.2 、f1/0 192.168.1.1
- pc1: 192.168.1.2
- pc2: 192.168.1.3
将内部地址192.168.1.0转换成合法的公网IP地址,地址范围是61.159.62.131-61.159.62.134。配置步骤如下(路由器IP地址省略):
1). 添加合法的IP地址池语法:
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 可选,地址池中的地址为循环使用
# 在NAT路由器添加地址池
router(config)#ip nat pool test0 61.159.62.131 61.159.62.134 netmask 255.255.255.0
2). 在NAT路由器定义内部网络中允许访问的外部网络的ACL,配置的ACL可以是标准也可以是扩展ACL
router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
3). NAT路由器实现网络地址转换,将内部局部地址与指定的内部全局地址池进行地址转换
R1(config)#ip nat inside source list 1 pool test0
- 1:表示标准ACL列表号
- pool:后面跟已经定义的地址池
4). 在内部和外部端口启用NAT
R1(config)#int f1/0
R1(config-if)#ip nat inside
R1(config)#int f0/0
R1(config-if)#ip nat outside
pc1访问外部主机,地址转换完成
pc2访问外部主机,地址转换完成
pc3访问外部主机,地址转换完成
2、PAT端口地址转换
a. 使用外部全局地址
将内网192.168.1.0网段转换成NAT路由器对应公网的IP地址 61.159.62.3,路由器配置IP省略
1). NAT路由器定义内部访问的ACL列表
NAT(config)#access-list 1 permit 192.168.1.0 0.0.0.255
2). 定义合法的IP地址池
# 地址池中起始地址和结束地址用的同一个地址
NAT(config)#ip nat pool onlyone 61.159.62.3 61.159.62.3 netmask 255.255.255.0
3). 复用动态IP地址转换
# 以端口复用方式,将ACL1中的局部地址转换为onlyone地址池中的内部全局地址
NAT(config)#ip nat inside source list 1 pool onlyone overload
4). NAT路由器的内部和外部端口启用NAT
NAT(config)#int f1/0
NAT(config-if)#ip nat outside
NAT(config)#int f0/0
NAT(config-if)#ip nat inside
pc1转换地址
pc2转换地址
b. 复用路由器外部接口IP
有时候,只有一个外部IP,并且这个地址已经被路由器的外部接口使用,在这种情况下,在地址转换过程中,也可以直接使用外部接口的IP地址作为转换后的地址。由于直接使用外部接口地址,所以不在定义地址池了
1). 定义内部访问列表
NAT(config)#access-list 1 permit 192.168.1.0 0.0.0.255
2). 以端口复用的方式,将ACL1中的私有地址转换为路由器外部接口IP地址
NAT(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
3). 在内部和外部端口启用NAT
NAT(config)#int f1/0
NAT(config-if)#ip nat outside
NAT(config)#int f0/0
NAT(config-if)#ip nat inside
pc1访问外部主机
pc2访问外部主机
默认情况下,如果在一定时间内没有使用动态NAT条目,就会因超时而被取消
有时因为NAT条目过多会导致设备性能下降,可以删除动态条目,静态是删除不了的
NAT#clear ip nat translation *