NAT的概括

NAT技术源于全球IP地址短缺,主要用于解决内网与外网的通信问题,提供安全性并控制流量。静态NAT是一对一的映射,动态NAT则从地址池中分配IP。NAPT/PAT通过端口转换进一步优化IP使用。Easy-ip直接使用接口IP进行转换,适合动态拨号环境。内存不足可能导致家用路由器性能下降,影响网络体验。
摘要由CSDN通过智能技术生成

知识点:

静态NAT

动态NAT

NAPT/PAT

Easy-ip

NAT-server

在vmware workstation的用户手册当中发现会有nat的存在,会在docker或kvm、net-filter框架当中看到nat身影。

NAT的产生是因为全球IP地址不足

中国互联网络信息中心

企业/个人—运营商—CNNIC(中国互联网信息中心)—APNIC—ICANN

APNIC:亚太地区注册机构,AP代表亚太地址,全世界一共有五个;

ICANN:IP地址最高的管理地址,2012宣布IP地址已经分配完成,下面的区域还有IP地址;

手机的4G网络拿到的也是一个私网地址,比如你在广州办了一张卡,但是你人在东北,那其实你的IP地址会显示在广州,因为你用的公网IP地址在广州。

没有NAT不能上网的原因不是中间的路由器不转发私网路由,而是回包没路由,它也不能加这个路由;

NAT好处:有效避免外网攻击,可以很大程序上提高网络的安全性

控制内网主机访问外网,同时也控制外网访问内网,解决了内外网不能互通的问题

家用路由器为什么那么差劲?直播、打游戏会卡,但是一重启就会好多了?

这其实与NAT有关,NAT的会话信息是存储在内存当中的,如果说你的同时上网的设备过多,内存会不足,所以就会出现这种情况。所以现在很多的家用路由器厂商都在强调自家的厂商内存够大,能同时支持几十人在线。

现在的运营商给的光猫都携带了路由器的功能,基本上的上网没有问题,我们在中小企业是否可以不买路由器,就直接使用光猫的路由功能呢?不建议这么做,因为光猫的性能其实不怎么好,由于是内存,如果大量产生了会话,那就会很容易出现网络卡顿的现象,所以说,我们最好自己购买的大内存路由器,然后将路由功能,尤其是NAT功能放到我们自己购买的路由器上,这样会话就存在在我们自己购买的路由器上,用户体验就会好很多;

静态NAT

静态最重要的特点就是一对一

  1. Int  出接口
  2. Int  gx/x/x
  3. #全局开启功能
  4. nat static enable开启NAT静态功能
  5. #在外网接口配置
  6. nat static global (与外网ip处于同一网段但未使用的ip)inside(允许内网的哪个ip出去)
  7. 查看静态ip的配置
  8. display nat static

注意:注意,你在配置静态NAT的时候不要使用当前接口上正在使用的NAT地址,你想呀,你如果这么做了?那下面的其它主机怎么上网

“与外网接口的IP处于同一网段的未使用地址”并不用直接配置到接口上,你只要在接口上实现NAT之后地址就会自动生效的。

当配置完之后,通过dis nat static就会发现生成两条永久信息,如下图所示:

[R1]dis nat session protocol icmp  #查看关于icmp的nat会话

     Protocol          : ICMP(1)

     SrcAddr   Vpn     : 192.168.0.1         #源ip是192.168.0.1                         

     DestAddr  Vpn     : 9.9.9.9                                        

     Type Code IcmpId  : 0   8   12611

     NAT-Info

       New SrcAddr     : 12.1.1.2         #把源IP给转换成了12.1.1.2

NOTE:此会话是缓存的,在nat不工作的时候是看不出来的,只有当nat一直工作的时候,这个缓存才会有,所以要在客户端一直ping 9.9.9.9才可以看到

静态NAT的用途?

极少情况下你需要做一对一的映射,一般是这样的场景,公司里面向运营商购买了一个网段,这个网段共有10多个地址,那我们公司平时上网用一个也就足够了,那还有那么多地址怎么办呢?其实很简单,当公司再有长时间的,需要做端口映射的服务,那你就直接让他直接剩下的公网地址,这样比较贴近于真实的场景,开发人员也比较喜欢这种方式。

动态NAT

动态NAT就是把可用的公网IP放在一个地址池里面,当主机需要公网地址的时候,从地址池里面拿一个,用完会自动释放,如果同时有多台主机在上网把地址池里面的公网IP地址耗尽,那新的主机需要上网的话,就得排队等前面的主机释放地址,就像我们去比较火的餐馆吃饭,没有桌了只能等前面的客人吃完。

nat address-gruop 1  58.57.50.51  58.57.50.55

acl 2000

rule 0 permit source 192.168.0.0 0.0.0.255

int g0/0/0 # 出接口

nat outbound 2000 address-group 1 no-pat  # no-pat就是不转换端口

dis nat address-group # 查看NAT地址池配置信息

dis nat outbound  # 查看动态NAT配置信息

dis nat seeesion all # 查看nat转换表,在ping的时候查看

NAT

“所谓的no-pat就是不去做端口转换,只做IP转换,也是一对一的映射,一个私有IP对应一个公有IP,只不过是动态的映射,所谓的动态映射,就是假设申请到一个公网地址区间,200.1.1.100-200.1.1.110这个10个IP,我把这个10个IP放到一个池里边,这个池现在有10个公网IP地址,当有私网用户访问外网时,就会从地址池中拿一个地址出来给他用,形成一个动态的映射关系。”

动态NAT有个细节需要注意,如果你是单个主机,PING了五次,那一次都单独对应一个IP地址,并不是每一个IP地址单独对应一台主机,并不会绑定某个主机,而是每一个数据包都会占用一个公网IP地址,这就会导致大量的占用公网IP和内存会话。你内网有三台主机需要上网,但是你公网地址只有三个,做这种动态NAT地址是不够的。

no-pat的真正含义,是不需要转端口,你想一下,A访问谷歌的443端口,B也同时访问谷歌的443端口,同时访问的话,如果路由器不转换端口的话,就必须一个公网地址对一个私网地址。

NAPT/PAT

全称:NAPT(network address port translation)

动态NAT我们看到了,非常消耗IP地址,这种方式其实是不适合我们上网的,所以动态NAT发展出了另一种NAT叫NAPT或是PAT,网络地址端口转换,允许多个地址映射到同一个公网地址的不同端口。

配置的话,在前面的基础上不加no-pat就可以了,通过不同的ID进行标识(type code icmpID),如下图所示:

ICMP由于没有端口号,所以用ID号进行标识,http就直接用端口号进行标识了。

Easy-ip

上面三种用并不是接口地址,你需要搞一个地址池,而easy-ip就可以直接使用接口上的配置IP地址进行NAT转换,就不用配置地址池了。

而且,现在我们家用路由器都是动态拨号,是无法将一个固定的地方放到地址池里面的,所以前三种方式都不适用于我们现在的环境,所以才有的easy-ip

思路与配置:

第一步:先写一个ACL做匹配,做匹配范围时没有隐含的允许所有通过,做访问控制时才有,比如我们上图的R1路由器让想内网的192.168.0.0/24这个网段都使用R1的12.1.1.1/19这个IP的话ACL就得这样写:

[R1]acl 2000  #定义一个ACL先把192.168.0.0/24这个网段给匹配上

[R1-acl-basic-2000]rule permit source 192.168.0.0 0.0.0.255

再次强调,ACL只有在做访问控制的时候才会有一个默认规则:没有配置住的都会允许,但是在这里我们没有做访问控制,只是做了匹配,所以并不会有用默认规则的存在。

第二步:到R1的外网接口(G0/0/1)上调用第一步定义的ACL。

当在G0/0/1接口调用了此ACL之后,每当这个接口匹配住一个数据报文,都会把其源地址转换为G0/0/1自己的IP

R1]int g0/1

[R1-GigabitEthernet0/1]nat outbound 2000  #出接口方向

原理:

192.168.0.1  ping  9.9.9.9的通信过程:当192.168.0.1的数据帧被R1的G0/0/1的接口给匹配住以后,都会向其网络层添加一个标记,如下所示:

那么此标记有什么用的?其实R1路由器内部会根据此标记维持一张表,假设是192.168.0.1ping9.9.9.9,R1给这个帧打的标记是2222,那么R1路由器会在内部生成这样一张表,如下图:

然后才把此数据包发出去,当此数据包回来的时候源IP成了9.9.9.9,目标IP成了R1的g0/0/1接口的IP也就是12.1.1.1,与数据发出时相比,源目标和目标IP都发生了变化,但是,序号依次还存在于ICMP的数据报文里面,此结果已经抓包验证过,如下图:

序号

源ip

替换为

目的ip

22222

192.168.0.1

12.1.1.1

9.9.9.9

然后才把此数据包发出去,当此数据包回来的时候源IP成了9.9.9.9,目标IP成了R1的g0/0/1接口的IP也就是12.1.1.1,与数据发出时相比,源目标和目标IP都发生了变化,但是,序号依次还存在于ICMP的数据报文里面,此结果已经抓包验证过,如下图:

可以此数据帧与上面的请求时的数据帧对比,发现此序号是相同的,于是R1路由器会根据此序号把此数据帧的目标IP替换成192.168.0.1。

以上阐述的都是ping包,也就是ICMP协议,我们知道ICMP是网络层的协议,没有端口的概念,但是当内网的PC访问外网的WWW服务器时,R1是怎样转换的呢?这时候R1就不是通过在ICMP里面打标记实现了,因为一旦有了端口之后,客户端源端口因为是随机的,所以客户端的端口号就是现成的标记,R1路由会把源端口号当做是标记

NAT-server

 

 

 interface GigabitEthernet0/1

注意,这里的外网映射的IP不能是g0/0/1接口的IP

# 而应该替换成current-interface,就是这么设计的。

# nat server protocol tcp global 12.1.1.2 80 inside 192.168.0.2 80

# 验证,会发现直接”绑定死了“

所以应该配置成

nat server protocol tcp global current-interface 80 inside 192.168.0.2 80

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值