NAT的三种形态

2024-05-01 04:58
文章标签 三种 nat 形态

本文主要是介绍NAT的三种形态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一篇讲NAT,NAT其实就是IP地址转换,转换是不区分公有IP还是私有IP,他只是有转换IP这个功能,灵活使用就可以了。

看一下分类

1、SAT 静态地址转换

一对一的地址转换。

2、DAT动态地址转换

将一个或者多个地址转换成一组地址中的一个或者多个,动态的决定哪两个IP进行转换。

3、PAT端口地址转换

将一个或者多个地址转换成出接口的IP的不同端口(port)。

1和2可能比较好理解,我来举个例子方便理解一下3。

我内网有192.168.1.0/24网段PC10台,网络采用固定IP网络,即网关出接口的IP是一个公网IP 202.99.99.99,PAT就是将内网的10台PC的IP进行转换,192.168.1.1转换成202.99.99.99 port:42000,192.168.1.2转换成202.99.99.99 port:42001,接口是我举例的不是真的,但是原理就是这样,通过不同的接口,区分不同的ip地址转换,当数据流结束以后,这个绑定会解除。

这里说一下,NAT其实很多地方都会用到,所以在ccna里我觉得他也是重点之一。

------------------------------------------------------------------------------------------------------------

废话不多说,我用一个实验,去说一下三种NAT怎么配置


我模拟了一个没有冗余的基本公司环境

1、AccessSW连接pc,DHCP获取1.1.1.100~150

2、WebSW连接的是一个Web服务器集群

3、AloneServer作为一个独立的发布的Server

4、CoreSW是核心三层交换机,上面会配置PC的DHCP

5、GW作为转发层设备,上面会有默认路由,回程路由

6、ISP作为运营商一端的设备,是无法配置路由等等的,我就给他配上IP,其他什么也不动。

我会把这些配置都配好,然后我们看一下,各个pc和Server能ping到哪里?为什么?

----------------------------------------------------------------------------------------------------------------

配置完成!然后测试,发现最远可以ping通GW的e0/0接口192.168.1.1,这时候你就说了,我不是给GW配了默认路由指向ISP么?对的,但是回程路由呢?ISP收到来自1.1.1.0网段,2.2.2.0网段,3.3.3.0网段,这么多私有地址,全世界会有无数个,他怎么知道谁是谁?(讲道理,GW和ISP之间使用的IP也必须是公有IP,大家自己脑补一下)

还有就是,ISP可是运营商的设备,他不可能让你去配置。那怎么办?内部网络不通,那我再试一下,从GW去pingISP所拥有的所有网段,发现没有问题,这是为什么?因为,GW和ISP是直连路由,ISP当然知道GW的存在,也知道怎么去GW。说道这里,我就简单的解释一下NAT到底做了些什么。

NAT会把一个指定的IP或者网段,转换成一个或者多个与对端设备可以通信的IP地址,也就是同网段,这个网段可以是私有,可以是公有,并且NAT会记录下这些转换,当接收到回程数据包的时候,就会一一的转发。

那么我内部有各种不同的IP环境,需要转换的方式不一样,这就需要NAT的三种模式解决这个问题。

接下来我会完成三种NAT

1、AloneServer做Static NAT(SAT)

2、WebServer集群做Dynamic NAT(DAT)

3、PC做Port NAT(PAT)

-------------------------------------------------------------------------------------------------------------

不管什么NAT都要先确定内部接口和外部接口(NAT是在GW上做的)

GW#conf t
GW(config)#int e0/1
GW(config-if)#ip nat inside                        //确定内部接口
GW(config-if)#int e0/0                           
GW(config-if)#ip nat outside                      //确定外部接口

---------------------------------------------------------------------------------------------------------------

先做SAT

GW(config)#ip nat inside source static 3.3.3.10 192.168.1.10
命令就这一句,我解释一下

ip nat-------创建nat

inside source---------内部源

static---------静态

3.3.3.10---------AloneServer的IP地址(内部本地IP---Inside local IP address)

192.168.1.10-----------------转换之后的IP(内部全局IP---Inside Global IP address)

注意:这里我再强调一下,192.168.1.0这个网段,如果是真实情况,应该是一个公有地址的网段

然后从AloneServer ping 一下 202.96.209.133就通了,我在ISP上起了debug ip icmp看一下收到的ping包是从哪里发来的

*Mar  1 00:45:02.911: ICMP: echo reply sent, src 202.96.209.133, dst 192.168.1.10

可以看到目标地址已经变成了192.168.1.10,转换成功

--------------------------------------------------------------------------------------------------------------------

接下来做DAT

1、做一个访问控制列表,之后会将网段和DAT进行绑定,由于一个路由器上未必只有一个DAT。

GW(config)#access-list 1 permit 2.2.2.0 0.0.0.255      //注意反掩码

2、设置转换之后的地址池(公网的)。

GW(config)#ip nat pool Web 192.168.1.100 192.168.1.200 prefix-length 24

Web是这个地址池的名字可以自定义

prefix-length是子网掩码\也可以用Netmask(可以打问号看一下,效果是一样的)

3、绑定

GW(config)#ip nat inside source list 1 pool Web

list1和Web进行绑定,然后从Web1和Web2 PING 202.96.209.133,就可以通了

检查debug

*Mar  1 01:02:35.783: ICMP: echo reply sent, src 202.96.209.133, dst 192.168.1.101
*Mar  1 01:02:39.847: ICMP: echo reply sent, src 202.96.209.133, dst 192.168.1.100

可以发现,他已经接收到了之前我规定的地址池网段,所发来的ICMP包

----------------------------------------------------------------------------------------------------------------

最后给PC做PAT

1、GW(config)#access-list 2 permit 1.1.1.0 0.0.0.255
1.1.1.0是pc的网段

2、GW(config)#ip nat inside source list 2 interface e0/0 overload

绑定NAT outside接口,并且设置复用(overlord)

PING测试

pc1和pc2都ping一下ISP的202.96.209.133,结果是通然后查看一下ISP的debug信息

*Mar  1 01:16:21.339: ICMP: echo reply sent, src 202.96.209.133, dst 192.168.1.1
*Mar  1 01:16:22.363: ICMP: echo reply sent, src 202.96.209.133, dst 192.168.1.1
发现都是GW的e0/0接口的IP,我在GW上使用查看NAT转换的命令

GW#sh ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.1.1:1024  1.1.1.100:22733    202.96.209.133:22733 202.96.209.133:1024
icmp 192.168.1.1:23245 1.1.1.100:23245    202.96.209.133:23245 202.96.209.133:23245
icmp 192.168.1.1:23501 1.1.1.100:23501    202.96.209.133:23501 202.96.209.133:23501
icmp 192.168.1.1:22221 1.1.1.101:22221    202.96.209.133:22221 202.96.209.133:22221
icmp 192.168.1.1:22477 1.1.1.101:22477    202.96.209.133:22477 202.96.209.133:22477
我截取了一下,1.1.1.100是PC1           1.1.1.101是pc2

可以看到他们被转换成了192.168.1.1的不同端口(port),他就是这么工作的。发过去是这个端口,回复也是这个端口,这样NAT就能知道,到底应该转发给谁了。

---------------------------------------------------------------------------------------------------------------




好了NAT就全部完成了,正常的CCNA其实也就到这里。之后我还会有一片HSRP和端口聚合的实验,基本上这个实验我会按照最真实的环境去配置,保证物理上的冗余,和线路上的冗余。

这篇关于NAT的三种形态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950766

相关文章

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter