NAT协议

目录

NAT

前言

NAT地址转换表

NAT分类

前言

静态NAT

192.168.1.2访问200.1.1.2执行过程

动态NAT

192.168.1.2访问200.1.1.2执行过程

NAPT

192.168.1.2的5000端口访问200.1.1.2的80端口执行过程

基本命令

配置动态NAPT转换

定义内外网接口

配置NAPT

静态NAPT配置

定义内外网接口

配置静态NAPT

NAT

前言

  • 如今IPV4地址已经严重不够了,我们能够使用的只有A、B、C三类地址
  • IP地址分为公网IP和私网IP,公网IP只能在公网上使用,私网IP只能在私网上使用。
  • 公网上不允许出现私有IP地址(公网路由器不会配置指向私网路由器的路由表)

含义: NAT协议是将IP数据包头中的IP地址转换为另外一个IP地址的过程, 主要用于实现私有网络访问公有网络的功能。这种通过使用少量的IP地址代表较多的私有IP地址的方式,将有助于减少IP地址空间的枯竭

注意:

  • 网络地址转换主要完成了私网到公网地址的转换,一般是路由器或防火墙上来完成,不建议在三层交换机上配置。
  • NAT协议可以节约公网IP资源,也可以内网访问外网的真实IP

NAT地址转换表

  • NAT地址转换表就是路由器进行地址转换的依据。
  • NAT地址转换表记录了源IP与公网IP的映射关系(静态nat的NAT地址转换表需要自己手动配置)
  • NAT表中的公网地址不一定是路由器接口处的公网IP地址,也可以是其他公网地址。
  • 在配置NAT转换表之前,路由器要想启用NAT,那么必须首先定义内外网的路由端口
  • 内网中,数据包里面一定有源IP和目标IP,从内往外走目标IP不动,只改变源IP;从外往内走,源IP不动,只改变目标IP
  • 当我们配置好静态NAT后,那么就会生成NAT转换表。

NAT分类

前言

**注意:**以上都是24位子网掩码,其中第一个路由器分割了内网与外网。

静态NAT

**理解:**手动配置nat映射表,自己配置私网IP所对应的公网IP来进行nat转换(一对一转换)

192.168.1.2访问200.1.1.2执行过程

192.168.1.2需要上网,那么它就把该数据给了网关(源IP:192.168.1.2,目标IP:200.1.1.2),网关看到目标IP为200.1.1.2,那么根据路由表将此数据包路由到右侧端口,因为路由器配置了NAT,那么就会检查地址转换表(192.168.1.2------100.1.1.1)发现有源IP的匹配条目进而将源地址转换为100.1.1.1后将数据包从右接口发出(源IP:100.1.1.1,目标IP:200.1.1.2),之后就可以访问200.1.1.2,200.1.1.2收到了请求就会回应(源IP:200.1.1.2,目标IP:100.1.1.1)这个数据包发到了路由器1,路由器1配置了NAT,那么就检查目标IP,发现有匹配的项目,进而将目标IP转换为192.168.1.2进而发给192.168.1.2数据响应(源IP:100.1.1.1,目标IP:192.168.1.2)。

注意:

  • 这种方式在仅有1个公网IP地址的情况下,内网中仅有1台设备可以访问外网。
  • 上面这种方式中没有对端口进行转换,那么访问公网的特定端口就会转化到私网的特定端口上,如今也推出了静态NAPT,可以实现静态配置内网IP端口与公网IP端口的映射

动态NAT

**理解:**定义内外部地址池,动态随机转换,当有一个私网IP要访问互联网,那么就会自动拿出地址池里面的公网IP来进行对接转换,若再有一个私网IP想要访问外部网络,则会再从地址池中拿出公网IP对接(一对一转换)

192.168.1.2访问200.1.1.2执行过程

192.168.1.2需要上网,那么它就把该数据给了网关(源IP:192.168.1.2,目标IP:200.1.1.2),网关看到目标IP为200.1.1.2,那么根据路由表将此数据包路由到右侧端口,因为路由器配置了动态NAT,那么就会检查地址转换表,发现没有映射关系但配了动态NAT,那么就会把源IP拿去内部地址池比较,发现属于内部地址池(动态在NAT地址转换表补充至源IP),那么就从外部公网地址池拿出一个公网IP(动态的在NAT地址转换表补充至公网IP)在NAT地址表中形成一个转换关系(源IP:192.168.1.2;公网IP:100.1.1.1),同时将源IP转化为100.1.1.1将数据发到200.1.1.2(源IP:100.1.1.1,目标IP:200.1.1.2);(后面就和静态NAT一样了)

**注意:**动态NAT中的NAT地址转换表的条目将会在源IP设备停止发包的24小时后消失。

NAPT

前言:

  • 网络地址端口转换NAPT(Network Address Port Translation)是把内部地址映射到外部网络的一个IP地址的不同端口上。
  • NAPT相对于动态NAT来说,它实现了外部公网地址池的复用。

NAPT协议的NAT表

|-----------|------------|-----------|-----------|
| 源IP地址 | 公网IP地址 | 源端口号 | 路由器端口 |
| 内网设备1源IP | 公网地址 | 内网设备1开放端口 | 路由器监听端口1 |
| 内网设备2源IP | 公网地址 | 内网设备2开放端口 | 路由器监听端口2 |

注意:

  • 该表中对于没有消失的表项中路由器使用的端口号路由器不能用第二次
  • NAT表中的公网地址不一定是路由器接口处的公网IP地址,也可以是其他公网地址,当一个外部数据发过来的时候,就会检查目标IP是否与公网IP匹配,目标端口是否与路由端口匹配,若都匹配了则能转发数据到内网

192.168.1.2的5000端口访问200.1.1.2的80端口执行过程

192.168.1.2需要上网,那么它就把该数据给了网关(源IP:192.168.1.2,目标IP:200.1.1.2;源端口:5000,目标端口:80),网关看到目标IP为200.1.1.2,那么根据路由表将此数据包路由到右侧端口,因为路由器配置了NAT,那么就会检查地址转换表,发现没有映射关系但配置NAPT,于是就去拿源IP去内部地址池比较,发现属于内部地址池(将该地址动态在NAT地址转换表补充至源IP,将源端口补充至源端口),于是就从外部公网地址池复用一个公网IP(将该IP动态的在NAT地址转换表补充至公网IP,路由器随机开启端口1补充至路由器端口),形成路由表(源IP地址:192.168.1.2;公网IP:100.1.1.1;源端口:5000;路由器端口:1)后将公网地址作为源IP地址,路由器随机开启的端口作为源端口(源IP:100.1.1.1,目标IP:200.1.1.2;源端口:1,目标端口:80)将数据包发送到200.1.1.2;200.1.1.2收到后向100.1.1.1回复消息(源IP:200.1.1.2,目标IP:100.1.1.1;源端口:80,目标端口:1)路由器1配置了NAT于是就查看目标IP并且将其转化为源IP,查看目标端口号转化为源端口号(源IP:200.1.1.2,目标IP:192.168.1.2;源端口:80,目标端口:5000)并将数据发送给192.168.1.2的5000端口。

**注意:**使用NAPT协议可以复用公网地址,进而达到局域网内的多台设备仅用一个公网IP实现上网的目的。

基本命令

进入特权模式

**查看nat表:**show ip nat translations

**清空nat表:**clear ip nat translations

配置动态NAPT转换

定义内外网接口

进入路由器内网接口

**定义内网接口:**ip nat inside

进入路由器外网端口

**定义外网端口:**ip nat outside

**注意:**外网端口用来转换出去包的源IP,内网端口用来转换进来包的目标IP。

配置NAPT

进入全局配置模式

**定义内部地址池:**access-list 1 permit 内网IP地址 通配符掩码

  • 该ACL表主要是做匹配地址转换,来往的数据若符合上述规定则会做地址转换

**做NAPT动态映射:**ip nat inside source list 1 路由器公网接口 overload

  • 只要源IP满足ACL表号1,那么就允许使用路由器公网接口的IP地址做替换

**总结:**执行了以上的两个步骤,那么只要是ACL表允许的数据,都会允许做NAPT转换,进而实现了一个公网IP允许多个私网IP设备同时上网。

静态NAPT配置

定义内外网接口

进入路由器内网接口

**定义内网接口:**ip nat inside

进入路由器外网端口

**定义外网端口:**ip nat outside

配置静态NAPT

进入全局配置模式

将私网IP完整的映射到公网IP上

  • ip nat source static 私网IP地址 公网IP地址

将私网IP的端口映射到公网IP的端口上

  • ip nat inside source static 协议 私网IP 私网端口 路由器公网IP 路由器公网端口

注意:

  • 静态NAPT中的协议可选为tcp/udp
  • 静态NAPT配置后,访问路由器公网IP的端口,那么就会自动映射到私网IP的私网端口
相关推荐
爱吃喵的鲤鱼3 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡30 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study32 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
荒Huang1 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑1 小时前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭1 小时前
Java中的动态代理
java·开发语言·aop·动态代理