引言

​ 随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足的问题,但目前众多的网络设备和网络应用仍是基于IPv4的,因此在IPv6广泛应用之前,一些过渡技术的使用是解决这个问题的主要技术手段。

​ 网络地址转换技术NAT(Network Address Translation)主要用于实现位于内部网络的主机访问外部网络的功能。当局域网内的主机需要访问外部网络时,通过NAT技术可以将其私网地址转换为公网地址,并且多个私网用户可以共用一个公网地址,这样既可保证网络互通,又节省了公网地址。

应用场景

image-20240208203010235

​ 企业或家庭所使用的网络为私有网络,使用的是私有地址;运营商维护的网络为公共网络,使用的是公有地址。私有地址不能在公网中路由。NAT一般部署在连接内网和外网的网关设备上。

静态 NAT

image-20240208203132589

静态 NAT 实现了私有地址和公有地址的一对一映射。一个公网IP只会分配给唯一且固定的内网主机。

动态 NAT

image-20240208203310067

动态NAT基于地址池来实现私有地址和公有地址的转换。

PAT

image-20240208203445230

​ 端口地址转换(PAT,Port Address Translation)是对网络地址转换(NAT)的扩展,它允许本地网(LAN)上的多个设备映射到一个单一的公共IP地址。 端口地址转换旨在保存IP地址。 大多数家庭网络使用端口地址转换。

​ 端口地址转换 PAT 允许多个内部地址映射到同一个公有地址(出接口)的不同端口。

NAT 服务器

image-20240208203639544

通过配置NAT服务器,可以使外网用户访问内网服务器。

配置

拓扑

image-20240208204537250

现如今已经所有网络打通,并允许不同 VLAN 间通信,并都可通出口路由。

静态路由

将内网的主机 192.168.10.5、192.168.20.6 通过出口路由器的NAT 转换 实现可访问服务器:120.48.128.24

运营商分配公网IP如下:

1
2
3
120.48.128.30    # 连接互联网的接口用
120.48.128.31 # 静态NAT转换用
120.48.128.32 # 静态NAT转换用

在出口路由器进行静态 NAT 绑定:

1
2
R3(config)#ip nat inside source static 192.168.10.5 120.48.128.31
R3(config)#ip nat inside source static 192.168.20.6 120.48.128.32

在出口路由器上设置内网入口(路由器连接内网的接口)和公网出口(路由器连接公网的接口):

1
2
3
4
5
6
R3(config)#int e0/0 
R3(config-if)#ip nat inside
R3(config-if)#int e0/1
R3(config-if)#ip nat outside
R3(config-if)#exit
R3(config)#

最后来到 192.168.10.5 上 访问公网 120.48.128.24:

image-20240208211410827

来到 192.168.20.6 上 访问公网:

image-20240208211711483

发现可以上网。

可以通过如下命令查看 NAT 信息:

1
R3#show ip nat translations 

image-20240208211815562

image-20240208215231905

动态 NAT

将内网的所有主机通过出口路由器的 NAT 转换 实现可访问服务器:120.48.128.24 ,但是由于公网 IP 只有2个,实现同一时间内最大供两台电脑上网(超时时间调至 10 秒):

运营商分配公网 IP 如下:

1
2
3
4
5
# 连接互联网的接口用
120.48.128.30
# 动态NAT地址池用
120.48.128.31
120.48.128.32

配置一个访问控制列表(ACL),以确定哪些流量需要进行NAT转换(需求为所有内网机器)。

1
R3(config)#access-list 1 permit any 

配置一个公共IP地址池。这里运营商给的IP地址池:120.48.128.31 - 120.48.128.32:

1
2
3
4
# 第一种子网掩码写法
R3(config)#ip nat pool global_ip 120.48.128.31 120.48.128.32 prefix-length 24
# 第二种子网掩码写法
R3(config)#ip nat pool global_ip 120.48.128.31 120.48.128.32 network 255.255.255.0

配置 NAT 规则:

1
2
# 匹配 ACL 表 id 为 1 的规则 并使用 global_ip  地址池
R3(config)#ip nat inside source list 1 pool global_ip

在出口路由器上设置内网入口(路由器连接内网的接口)和公网出口(路由器连接公网的接口):

1
2
3
4
5
6
R3(config)#int e0/0 
R3(config-if)#ip nat inside
R3(config-if)#int e0/1
R3(config-if)#ip nat outside
R3(config-if)#exit
R3(config)#

由于只有公网IP池中只有两个公网IP,故而只能允许两台主机同时上网:

image-20240208214801018

image-20240208214816474

image-20240208214828118

第三台电脑已无法上网。

默认 NAT 表示已记录了某个公网IP和私有IP的对应关系,该关系短时间内不会解出,因此当另一台主机不上网时,是无法即时让另外一台上网,故而需要调整超时时间:

默认超时为 24 小时。

1
R3#show ip nat translations verbose

image-20240208215311053

可以通过如下命令调整:

1
R3(config)#ip nat translation timeout 10    # 设置超时时间为10秒

此时已经超时时间修改为10秒,如果 10 秒内该主机没有上网,则不会占用公网IP,可以供其他主机上网。

PAT

端口地址转换配置比较简单,只需要加上 overload 即可。具体请参考 动态 NAT 配置。

1
R3(config)#ip nat inside source list 1 pool global_ip overload 

image-20240208220056479

可以发现,三台主机同时上网,使用的都是一个公网IP,只是端口不一样 ,该转换方式在现网中使用是最多的。