网络知识之NAT

NAT

一、基础知识

1、私网IP与公网IP

IP地址分为公网IP和私网IP,公网IP只能在公网上使用,而私网IP只能在内网中使用,公网上是不允许出现私有IP地址的,私网IP可以重复在内网使用。

2、私有IP地址范围

(1)A类:10.0.0.0/8 (10开头的)

(2)B类:172.16.0.0/16-172.31.0.0/16 (172.16开头的一直到172.31开头的)

(3)C类:192.168.0.0/16 (192.168开头的)

3、NAT基本概念

NAT是网络地址转换(Network Address Translations),其设计的出发点是解决ipv4地址不足的问题,使用少量的公网IP来代表大量的私网IP,但由于公网上是不能出现私网IP的,带私网IP的数据包路由器没有办法进行转发出去,因此私网IP在到达内网的出口处时,需要被拿掉,换成公网IP去上网,数据包回来时再把公网IP拿掉,换成私网IP,这个转换的技术就是NAT,即:NAT的主要功能是将公网IP和私网IP进行转换。

4、技术实现位置

NAT一般放在路由器(或者防火墙)上来完成,需要在特定的路由器(或者防火墙)上安装NAT软件,装有NAT软件的路由器又叫做NAT路由器。

二、NAT分类

由于路由器本身是不能根据IP地址来判断谁是私网IP谁是公网IP,所以我们要为其定义内外网端口,即:告诉路由器,哪边是内网,哪边是外网。如果是从内网向外网访问,那么路由器会转换源IP;如果是从外网到内网,那么路由器会转换目的IP。

NAT分为三类:静态NAT(并未被淘汰,有用武之地)、动态NAT(基本已经淘汰)、PAT(用的较多)

以下三种类型的举例都假设公司只买了一个公网IP,公司内部的所有设备都通过这个一个公网IP去访问外网。

(1)静态NAT

image-20230612170031977

静态NAT意味着NAT地址转换表中写入的记录是不变的,比如在上图示例中,NAT地址转换表规定了私网IP:192.168.1.1与公网IP:100.1.1.1可以进行转换,即:PC1可以访问外网。那么对于PC2(192.168.1.2)和Server1(192.168.1.3)就无法访问外网,因为NAT地址转换表中并不存在相关的条目信息,就算将条目中的192.168.1.1换成192.168.1.2192.168.1.3,或者加两个相关的条目,同一个时间也只能有一个私网IP去访问外网,因为我们假设的条件是公司只有一个公网IP,如果多个私网IP在同一时间去访问外网,采用静态NAT策略会导致外网在给我们回包之后,路由器没有办法区分这个包到底是给哪个私网IP的,所以如果公司只买了一个公网IP,采用静态NAT是不可取的。

(2)动态NAT

image-20230613095636938

动态NAT意味着NAT地址转换表并不是工程师事先写好的,而是动态生成的。公网IP放在外部地址池里,私网IP网段放在内部地址池里,二者采用动态NAT映射的方式。当私网IP需要访问外网时,比如PC1:192.168.1.1需要去访问200.1.1.1,那么NAT路由器就会将192.168.1.1这个地址与内部地址池进行比较,查询是否匹配,如果匹配则进行NAT转换。在转换时,会动态地将192.168.1.1100.1.1.1这个条目生成到NAT地址转换表中(注意:100.1.1.1这个IP是要从外部地址池里取出来的,不是复制)。当NAT路由器发现这个私网IP停止发包后,24小时之后这个条目会从NAT地址转换表中清除,那么这个公网IP100.1.1.1就又会重新回到外部地址池中。这就是采用了动态NAT,即:NAT地址转换表是动态生成的。这种方式虽然比静态NAT灵活了点,但是也存在问题,如果192.168.1.1这个PC一直在上外网,一直在使用100.1.1.1这个公网IP,那么内部地址池里的其他内网IP还是没有办法上网,因为公网IP一直都没有归还到外部地址池里。

(3)PAT

(Port Address Translations,端口地址转换,也叫端口复用技术)

image-20230613112553011

静态NAT和动态NAT都无法解决多个私网IP同时访问外网的需求,PAT就在动态NAT的基础上加了个复用技术,即:外部地址池中的地址是可以复用的,当192.168.1.1想去访问外网时,路由器会将私网IP192.168.1.1与内部地址池进行匹配,如果属于内部地址池,则允许进行转换。由于采用了复用技术,所以外部地址池中的地址不是取出来之后写入NAT地址转换表中,而是复制地址,将其写入表中,表中的每个条目除了要有私网IP和公网IP以外,还会写入数据包的源端口(比如这个例子中,源端口就是5000),并且NAT路由器会额外为其写入一个随机的端口(比如这个例子中,就是1),当转换完成后,新的数据包会以公网IP作为源地址,路由器分配的随机端口作为源端口,发送给外网。采用这种方式,如果192.168.1.12同时也想去访问外网,依旧会按照上述步骤操作,路由器会为其写入另外一个随机的端口(比如是2,路由器会自动识别表中已经分配的端口号,防止重复),这样对于被访问的外网地址来讲,会以为是100.1.1.1这个IP用不同的两个端口访问了两次,所以都会回包,路由器接收到回包后,会根据随机分配的端口号在NAT地址转换表中进行条目寻找,找到对应的私网IP,并根据随机端口号与源端口号的映射关系,找到私网IP最原始的源端口,转换后发回给私网IP,这样就实现了:在公司只买一个公网IP的情况下,不同的内网地址还可以同一时间访问外网。

(4)注意事项

  • 对于动态NAT和PAT而言,NAT地址转换表是从内到外访问时才生成的,而不是从外到内。
  • 由于端口号的范围是0-65535,所以在PAT策略中路由器随机分配的端口号也是这个范围,那么NAT地址转换表中的最多条目数就是有限的,而且每个电脑如果有多个端口号去访问外网,那么也会占据多个路由器随机分配的端口号,所以也有限制。因此公司只买一个ip也是不够的,解决这个问题的方式就是买多个公网ip。
  • 如果公司内网中的某台服务器,我们希望外面可以上网的网民都可以访问到,我们不可能将私网IP告诉网民来让其访问,这是不可能访问到的,那我们应该如何做呢?首先能想到的是,把路由器出口的外网地址(比如例子中的100.1.1.1)给网民,然后网民访问时根据NAT地址转换表来找到私网IP,但是NAT地址转换表的生成是基于从内到外的访问,从外到内访问是没办法生成NAT地址转换表的,而且对于服务器而言,不可能经常去访问外网,那么NAT地址转换表就无效。因此PAT只是适用于从内到外的访问,静态NAT才能解决这个问题,即:静态NAT和PAT都是会用到的,静态NAT虽然不灵活,但并没有被淘汰。
posted @ 2023-06-13 11:47  6小1  阅读(191)  评论(0编辑  收藏  举报