一、NAT基础知识
NAT(Network Address Translation,网络地址转换)是一种在计算机网络中广泛使用的技术,以下是关于它的一些基础知识:
1.定义与作用
- 定义:NAT 是一种将 IP 数据包中的 IP 地址转换为另一个 IP 地址的技术,一般用于实现私有网络与公共网络之间的通信。
- 作用
- 解决 IP 地址短缺问题:在私有网络中可以使用大量的私有 IP 地址,这些地址在内部网络中可以正常使用,但无法直接在互联网上路由。通过 NAT 技术,私有网络中的多个设备可以共享一个或少量的公网 IP 地址来访问互联网。
- 增强网络安全性:NAT 可以隐藏内部网络的拓扑结构和设备信息,外部网络只能看到 NAT 设备的公网 IP 地址,而无法直接访问内部私有网络中的设备,从而在一定程度上提高了网络的安全性。
- 一台服务器7x24小时开机,提供对外访问业务,需确保随时让别人访问到,随时处于安全状态
一服务器有公网IP,可以在Internet上路由,可以随时随地被访问到服务器开放的一切服务,每一套系统默认情况下都会开启一些常见的服务端口,假设一台网站服务器,要仅对外开放网站服务(http服务,80端中)那么其他的端口默认也是开启的,如果直接把服务器放在公网上,那么其他端口上的服务如果存在漏洞,服务器很容易被攻击,如果用防火墙一个一个关闭端口,会很麻烦,这时使用NAT静态转换技术就可以把服务器保护在内网中,使用NAT针对内网服务器IP的某一个端口服务,将其映射到公网IP上的某一个端上,别人再访问
服务器公网1P时是映射的某一项服务,如果访问其他没有映射的端口服务则会失败。
2.工作原理
- 基本原理:当内部网络中的设备发送数据包到外部网络时,NAT 设备会修改数据包的源 IP 地址,将其替换为 NAT 设备的公网 IP 地址,同时记录下这个转换关系。当外部网络的回应数据包返回时,NAT 设备再根据记录的转换关系,将目标 IP 地址转换回内部设备的私有 IP 地址,从而实现通信。
- 转换类型
- 静态 NAT:静态地将一个私有 IP 地址映射到一个公网 IP 地址,一对一的关系,常用于需要外部网络直接访问内部特定服务器的场景。
- 动态 NAT:从一个公网 IP 地址池中动态地为内部设备分配公网 IP 地址,当内部设备需要访问外部网络时,NAT 设备从地址池中选取一个未被使用的公网 IP 地址进行映射,使用完毕后再释放回地址池,多用于服务企业日常上网。
- 网络地址端口转换(NAPT):也称为 PAT,它不仅转换 IP 地址,还转换端口号。可以使多个内部设备通过同一个公网 IP 地址的不同端口号来与外部网络进行通信,实现了多个私有 IP 地址到一个公网 IP 地址的多对一映射,是目前应用最广泛的 NAT 方式。
3.NAT 的配置
- 配置要点
- 定义内部和外部接口:在 NAT 设备上,需要明确指定哪些接口连接到内部网络,哪些接口连接到外部网络。
- 配置地址转换规则:根据实际需求,配置静态 NAT、动态 NAT 或 NAPT 的转换规则,包括指定内部网络的 IP 地址范围、公网 IP 地址或地址池等参数。
- 示例:以锐捷路由器为例,配置动态 NAT 时,首先需要定义访问控制列表(ACL)来指定允许进行地址转换的内部网络地址范围,然后创建 NAT 地址池,最后将 ACL 和地址池关联起来,应用到相应的接口上。
4.NAT 的优缺点
- 优点
- 有效利用 IP 地址:通过地址转换,使多个内部设备能够共享公网 IP 地址,大大节省了公网 IP 地址资源。
- 增强网络安全:隐藏内部网络结构,减少了外部网络对内部网络的直接攻击面,一定程度上提高了网络的安全性。
- 便于网络管理:内部网络可以使用私有 IP 地址进行规划和管理,无需为每个设备分配公网 IP 地址,简化了网络配置和管理工作。
- 缺点
- 增加网络延迟:由于 NAT 设备需要对数据包的 IP 地址和端口号进行转换处理,会增加一定的处理时间,导致网络延迟略有增加。
- 影响某些应用程序的正常运行:一些基于端到端 IP 通信的应用程序,如某些 P2P 应用、IPsec VPN 等,可能会因为 NAT 的地址转换而出现兼容性问题,导致无法正常工作。
7.静态 NAT 配置
静态 NAT 是将一个私有 IP 地址静态地映射到一个公网 IP 地址,常用于需要外部网络直接访问内部特定服务器的场景。
! 进入全局配置模式
Router# configure terminal
! 定义内部服务器的私有IP地址和对应的公网IP地址映射
Router(config)# ip nat inside source static 192.168.1.100 203.0.113.1
! 指定连接内部网络的接口
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
! 指定连接外部网络的接口
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip nat outside
Router(config-if)# exit
! 保存配置
Router(config)# end
Router# write memory
上述配置中,将内部服务器的私有 IP 地址192.168.1.100
静态映射到公网 IP 地址203.0.113.1
,并指定了内部和外部接口。
8.动态 NAT 配置
动态 NAT 是从一个公网 IP 地址池中动态地为内部设备分配公网 IP 地址。
! 进入全局配置模式
Router# configure terminal
! 定义访问控制列表(ACL),允许内部网络的特定IP地址进行NAT转换
Router(config)# access-list 1 permit 192.168.1.0 0.0.0.255
! 创建NAT地址池
Router(config)# ip nat pool mypool 203.0.113.10 203.0.113.20 netmask 255.255.255.0
! 配置动态NAT转换规则,将ACL匹配的内部IP地址映射到地址池中的公网IP地址
Router(config)# ip nat inside source list 1 pool mypool
! 指定连接内部网络的接口
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
! 指定连接外部网络的接口
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip nat outside
Router(config-if)# exit
! 保存配置
Router(config)# end
Router# write memory
此配置中,允许内部网络192.168.1.0/24
的设备使用地址池mypool
中的公网 IP 地址进行访问。
9.网络地址端口转换(NAPT)配置
NAPT 是最常用的 NAT 方式,它可以使多个内部设备通过同一个公网 IP 地址的不同端口号来与外部网络进行通信。
! 进入全局配置模式
Router# configure terminal
! 定义访问控制列表(ACL),允许内部网络的特定IP地址进行NAT转换
Router(config)# access-list 1 permit 192.168.1.0 0.0.0.255
! 配置NAPT转换规则,将ACL匹配的内部IP地址映射到外部接口的公网IP地址
Router(config)# ip nat inside source list 1 interface GigabitEthernet0/1 overload
! 指定连接内部网络的接口
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
! 指定连接外部网络的接口
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip nat outside
Router(config-if)# exit
! 保存配置
Router(config)# end
Router# write memory
上述配置中,overload
关键字表示使用端口地址转换,内部网络192.168.1.0/24
的设备通过外部接口GigabitEthernet0/1
的公网 IP 地址访问外部网络。
查看配置文件(startup-config):①cd nvram: ②dir
查看保存的配置:show startup-config
10.补充
- 查看配置文件(startup-config):①cd nvram: ②dir
- 查看保存的配置:show startup-config
- PC直接与公网服务器通信:PC ping8.8.8.8
- 发包:源IP:192.168.1.10 目的IP:8.8.8.8
- 回包:源IP:8.8.8.8 目的IP:192.168.1.10
- 如果不做任何配置;服务器不能与PC相直接通信,公网不转发内网数据,不为内网做路由(除非专线服务)因此需在GW处做NAT转换源IP.将源IP转成出接口IP(将192、168.1.10转202.1.1.2)
- NAT非常消耗内存,数据量越大转换条且就越多占用GW内存越大,解决此问题可以设置两个网关
- 解决内部服务IP不够用的问题,一个公网最多65535个端口,每多一个公网IP就多65535个端口可建一个连继的公网地址池,将内网NAT到地址池内
二、项目实例
1.静态NAT
(1)静态NAT实验一
- 项目拓扑

- 项目实现
ISP配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为ISP
hostname ISP
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为202.1.1.1/24
ip address 202.1.1.1 255.255.255.0
退出到上一级
exit
退出到上一级
exit
使用telnet远程连接到202.1.1.2
telnet 202.1.1.2
开启NAT前:

开启NAT后:

GW配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为GW
hostname GW
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为202.1.1.2/24
ip address 202.1.1.2 255.255.255.0
退出到上一级
exit
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为192.168.1.1/24
ip address 192.168.1.1 255.255.255.0
退出到上一级
exit
开启telnet远程登陆,同一时间最多5个人同时登录
line vty 0 4
设置密码为1234
password 1234
开启认证
login
退出到上一级
exit
进入g0/1外网接口
interface g0/1
将g0/1接口标识为nat的出接口(ip nat outside(常用于连接外部的运营商接口)
ip nat outside
退出到上一级
exit
进入g0/0内网接口
interface g0/0
将g0/0接口标识为nat的入接口(ip nat inside(常用于连接内部的局域网接口)
ip nat inside
退出到上一级
exit
创建NAT映射,将内网的192.168.1.10端口23,映射到公网的202.1.1.2端口23上(因为telnet基于TCP所以使用的是TCP协议)
ip nat inside source static tcp 192.168.1.10 23 202.1.1.2 23
server配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为server
hostname server
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为192.168.1.10/24
ip address 192.168.1.10 255.255.255.0
退出到上一级
exit
关闭路由器路由功能
no ip routing
是
yes
设置网关地址为192.168.1.1
ip default-gateway 192.168.1.1
开启telnet远程登陆,同一时间最多5个人同时登录
line vty 0 4
设置密码为1234
password 1234
开启认证
login
(2)静态NAT实验二
- 项目拓扑

- 项目实现
ISP配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为ISP
hostname ISP
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为202.1.1.1/24
ip address 202.1.1.1 255.255.255.0
退出到上一级
exit
退出到上一级
exit
使用telnet远程连接到202.1.1.2
telnet 202.1.1.2
GW配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为GW
hostname GW
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为202.1.1.2/24
ip address 202.1.1.2 255.255.255.0
退出到上一级
exit
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为192.168.1.1/24
ip address 192.168.1.1 255.255.255.0
退出到上一级
exit
开启telnet远程登陆,同一时间最多5个人同时登录
line vty 0 4
设置密码为1234
password 1234
开启认证
login
退出到上一级
exit
进入g0/1外网接口
interface g0/1
将g0/1接口标识为nat的出接口(ip nat outside(常用于连接外部的运营商接口)
ip nat outside
退出到上一级
exit
进入g0/0内网接口
interface g0/0
将g0/0接口标识为nat的入接口(ip nat inside(常用于连接内部的局域网接口)
ip nat inside
退出到上一级
exit
创建NAT映射,将内网的192.168.1.10端口23,映射到公网的202.1.1.2端口8888上
ip nat inside source static tcp 192.168.1.10 23 202.1.1.2 8888
开启NAT前:

开启NAT后:

server配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为server
hostname server
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为192.168.1.10/24
ip address 192.168.1.10 255.255.255.0
退出到上一级
exit
关闭路由器路由功能
no ip routing
是
yes
设置网关地址为192.168.1.1
ip default-gateway 192.168.1.1
开启telnet远程登陆,同一时间最多5个人同时登录
line vty 0 4
设置密码为1234
password 1234
开启认证
login
2.动态NAT
(1)动态NAT实验一
- 项目拓扑

- 项目实现
ISP配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为ISP
hostname ISP
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为202.1.1.1/24
ip address 202.1.1.1 255.255.255.0
退出到上一级
exit
进入环回接口0
interface loopback 0
将环回接口0的IP设置为8.8.8.8/24
ip address 8.8.8.8 255.255.255.0
退出到上一级
exit
显示接口信息
show ip interface brief

GW配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为GW
hostname GW
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为202.1.1.2/24
ip address 202.1.1.2 255.255.255.0
退出到上一级
exit
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为192.168.1.1/24
ip address 192.168.1.1 255.255.255.0
退出到上一级
exit
设置默认路由 下一跳地址
ip route 0.0.0.0 0.0.0.0 202.1.1.1
创建标准ACL1,允许192.168.1.0网段的数据通过
access-list 1 permit 192.168.1.0 0.0.0.255
进入g0/1外网接口
interface g0/1
将g0/1接口标识为nat的出接口(ip nat outside(常用于连接外部的运营商接口)
ip nat outside
退出到上一级
exit
进入g0/0内网接口
interface g0/0
将g0/0接口标识为nat的入接口(ip nat inside(常用于连接内部的局域网接口)
ip nat inside
退出到上一级
exit
创建NAT映射
将ACL1匹配的条目映射到interface g0/1接口上,使用端口复用
ip nat inside source list 1 interface g0/1 overload
退出到上一级
exit
显示NAT表信息
show ip nat translations
显示正在运行的配置
show run
显示接口信息
show ip interface brief
PC配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为PC
hostname PC
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为192.168.1.10/24
ip address 192.168.1.10 255.255.255.0
退出到上一级
exit
关闭里路由功能
no ip routing
是
yes
将PC网关设置为192.168.1.1
ip default-gateway 192.168.1.1
退出到上一级
exit
显示接口信息
show ip interface brief
查看是否可与8.8.8.8通信
ping 8.8.8.8

(2)动态NAT实验二
- 项目拓扑

- 项目实现
ISP配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为ISP
hostname ISP
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为202.1.1.1/24
ip address 202.1.1.1 255.255.255.0
退出到上一级
exit
进入环回接口0
interface loopback 0
将环回接口0的IP设置为8.8.8.8/24
ip address 8.8.8.8 255.255.255.0
退出到上一级
exit
显示接口信息
show ip interface brief

GW配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为GW
hostname GW
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为202.1.1.2/24
ip address 202.1.1.2 255.255.255.0
退出到上一级
exit
进入g0/0接口
interface g0/0
将g0/0接口IP地址配置为192.168.1.1/24
ip address 192.168.1.1 255.255.255.0
退出到上一级
exit
设置默认路由 下一跳地址
ip route 0.0.0.0 0.0.0.0 202.1.1.1
创建标准ACL1,允许192.168.1.0网段的数据通过
access-list 1 permit 192.168.1.0 0.0.0.255
进入g0/1外网接口
interface g0/1
将g0/1接口标识为nat的出接口(ip nat outside(常用于连接外部的运营商接口)
ip nat outside
退出到上一级
exit
进入g0/0内网接口
interface g0/0
将g0/0接口标识为nat的入接口(ip nat inside(常用于连接内部的局域网接口)
ip nat inside
退出到上一级
exit
创建NAT地址池,名字为NAT,地址包含202.1.1.2到202.1.1.4子网掩码255.255.255.0
ip nat pool NAT 202.1.1.2 202.1.1.4 netmask 255.255.255.0
创建NAT映射
将ACL1匹配的条目映射到NAT地址池中,使用端口复用(当拥有多个公网IP时使用)
ip nat inside source list 1 pool NAT overload
退出到上一级
exit
显示NAT表信息
show ip nat translations
显示正在运行的配置
show run
显示接口信息
show ip interface brief

PC配置
进入特权模式
enable
进入全局模式
configure terminal
更改名称为PC
hostname PC
进入g0/1接口
interface g0/1
将g0/1接口IP地址配置为192.168.1.10/24
ip address 192.168.1.10 255.255.255.0
退出到上一级
exit
关闭里路由功能
no ip routing
是
yes
将PC网关设置为192.168.1.1
ip default-gateway 192.168.1.1
退出到上一级
exit
显示接口信息
show ip interface brief
查看是否可与8.8.8.8通信
ping 8.8.8.8
