1.NAT的运作:
你PC使用私有地址发包去往服务器,包是可以成功的到达服务器的。包其实也能回,包发给路由器,但是公网路由器没有私网路由就直接丢包了。如果想要使用私网的PC访问外网你只要让服务器收到报文在回包的时候,把回包的目的IP变成一个公有地址就可以了,这就是NAT所干的事情。
2.NAT的具体工作原理很简单:
就是路由器启用NAT技术之后当我收到从内到外的流量在它出去之前我把三层报头做一个修改,修改你三层报头的源IP地址,把源IP从私有地址变为公有地址把包发给外网,并且路由器会有记录把哪个私有地址转换为公有地址,这个记录会形成一个表项,把这个表项放在NAT的地址转换表里,接下来就把包发给公网了,这个时候在公网传输的数据包就不一样了。
因在内网传输的时候始发的IP是私有地址,当我这个包经过路由器到达外网的时候,我们的源IP不在是私有地址而是路由器转换后的公有地址,这个携带地址为公有地址的包也能到达服务器,服务器在回包的目的IP也是转换后的公有地址,路由器的路由表里肯定有公网路由,想办法让公网路由器收到回包的时候,能够让回包指向边界路由器就OK了,因公有地址全球唯一,只要通过操控路由让这些公网路由器收到回包能够把包回给边界路由器这就完事了。
因为当你路由器收到从内到外的回包的时候我做了NAT的路由器相比没做NAT的路由器在查路由表之前要多一步处理要根据回包的源目IP地址信息来判断这个报文是否满足回向转换的条件,如果满足了我在给你查路由表发包进内网之前得要给你做一个反向的地址转换,主要就是转换目的地址。要把你的目的地址从公有地址转换回私有地址并且发送给内网的PC,这就是往返的流程。
3.NAT带来最致命的问题是:
当你在边界路由器上布署的NAT之后最大的问题是一个连通性的问题。在整个网络环境中端到端都使用公有地址,从源到达目的地访问是没问题。当你使用私有地址结合NAT/PAT之后变成使用私有地址的PC发包去往外网公有地址的服务器去包没问题,回包因有NAT/PAT也能回得来。现在你要让公网的服务器主动发包去往内网PC,通过平常的NAT/PAT是做不到的,限制了报文访问能力。所以你外网想访问内网只有做VPN和专线。
4.静态NAT:
简单来说就是需要敲命令的方式来让路由器知道怎么完成这个NAT,命令很简单要把哪个私有地址转换成哪个公有地址,只要把命令敲好转换项就存在了。
静态NAT的好处是你使用了之后是能够清楚的知道把哪个私有地址转成哪个公有地址,就算当前这个私有地址PC没有发起任何网络连接,路由器没有收到从内到外的数据,没有实际的给它做过地址转换,这个不要紧。因为关于你的私有地址到公有地址的映射是我手工写出来的,是通过敲命令的方式写的,除非你把这个命令NO掉。还有另外一个用途称为服务器发布,就是有一个园区网内网有一台HTTP服务器,可能是公司的官网,那官网就需要别人访问,我们在通告外网的时候肯定是告诉外网,你们这些外网的成员想要访问服务器可以通过一个域名来访问,这个域名映射的肯定是一个公有的IP地址,这个服务器在内网不可能有公有IP,这个就需要做一个静态NAT让外网主动访问你。一般在园区网中总要有一些重要的服务器需要被外网主动访问,这些被外网主动访问的服务器做静态NAT是最好的解决局面方案。
相反静态NAT的缺点就很明显了,不适合大量布署,你每配置一条命令只能形成一条表项,而内网的主机有很多,这样配置量太大了。并且配置还不灵活。静态NAT只适合那些重要的服务器。
5.动态NAT:适合有很多终端节点时使用。在使用它的时候要在设备上定义两个东西
一个叫NAT的地址池,这个地址池里面放置的待被转换的公有IP地址,比如我设置一个地址池,这个地址池里面放置一百个地址,这一百个地址是公有地址,我能使用这一百个地址中的任何一个地址来给内网PC做NAT的转换,这个动态NAT是没有指定一对一映射,只要内网来一个PC,只要我符合条件我就在我的公网地址池里面挑出一个地址来做一个临时的转换,在临时转换的有效时间内我会有效记录私有地址到公有地址映射,如果不段时间没有发送数据,表项过期了我就把表项删除掉,宣布这个公有地址给其它人使用。
第二个是做ACL叫访问控制列表,指定源IP在哪个范围内的主机,你们发包去往外网的时候你们做转换。动态NAT有别于静态NAT的最大特点是,当你做了动态NAT之后,就算你创建好了地址池,就算你创建好了ACL,默认你的转换表项是空的,只有当你内网主机发包去往外网的时候,我收到了你从内到外的报文经过ACL匹配发现应该给你做NAT转换的时候我才会从我的公网地址池里面拿出一个地址做转换。它的特点是不需要配置很多命令就能让内网大量PC来做一个外网访问。
6.你在使用静态NAT和动态NAT的时候只能做到一对一的转换。它不能做到节约地址,初衷是节约IP地址,但是不能帮我们节约IP地址,所以要使用它的升级版。
7.升级版就叫PAT称为端口转换协议。我不仅能支持一对一的转换还能支持多对一的转换就是我可以拿一个公有地址给内网任意多个私有地址做一个转换。
PAT是有缺陷的为了弥补它这个缺陷,为了让边界路由器收到从外到内的回包的时候,我能够清晰的知道该给你怎样做回向转换,这个时候在给你做PAT的时候不但要给你做IP的转换映射记录,还要给你做端口的记录。
我通过记录流量的源目IP和源目端口后,就算我给多个私有地址转换成相同的公有IP,由于你们流量源目端口不一样,这个时候我可以通过端口号来识别,回包是回给哪个主机的,然后根据端口号信息做一个回向的转换。
所以说当你内网的PC发包去往外网的时候,如果我发现你们这多股流量通过端口和源目地址依旧能够区分你们彼此,这个时候仅仅记录你的源目地址和源目端口信息不做一个改变,当我无能为力的时候就是你从内到外多股流量当我给你转换了源地址,你们的流就是同一股流无法区分的时候,这时为了区分这股流才会给你做一个端口的转换。
8.在思科路由器上布署PAT的时候你可以选择做一个地址池,这个地址池的地址可以就使用路由器外网接口的IP,你可以把路由器外网接口的IP放在公网地址池里面去来给内网PC做一个转换,在思科领域中做PAT,你可以让公网路由器使用一个IP地址就可以让内网所有主机成功访问外网。
9.建议大家严格谨记一个原则,在做NAT和PAT时一定要把转换后的公有地址设置成外网接口同一个子网段内的地址,这样设置你不用操控任何的路由选择协议,不用操控任何的路由信息就可以完成回包的接收了。有这样一个原则在NAT的转换表里拥有私有地址到公有地址映射的时候,我会根据映射后的公有地址来响应任何人发送的ARP映射。
10.由于做了PAT之后路由器必须同时记录源目IP和端口号信息才能做一个流量的区分,只有TCP/UDP才有端口号,最早期在边界路由器上做了PAT之后,从内到外的只有TCP/UDP的流量才可以走,还有一个ICMP的流量,其它没有端口号的流量就不能成功访问外网。
HAPPY HALLOWEEN
不关注就捣蛋
本文分享自微信公众号 - 释然IT杂谈(gh_ad4551519762)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。