NAT、代理服务、内网穿透

1、NAT

1.1、NAT过程

之前我们讨论了IPv4协议中IP地址数量不充足的问题。NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。
NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法。
很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP。
全局IP要求唯一,但是私有IP不需要。在不同的局域网中出现相同的私有IP是完全不影响的。

在这里插入图片描述
如图,客户端A要给服务器发送消息,源地址就是客户端A的IP地址10.0.0.10,目标地址为163.221.120.9,然后客户端A拿着目标地址与自己所在子网的子网掩码进行按位与,客户端A也不知道这个IP地址是哪的,但是可以肯定的是绝对不在当前子网中,所以转发给路由器。路由器再转发给服务器,但是内网IP是不能出现在公网上的,所以将源地址替换成路由器的WAN口地址202.244.174.37,而路由器的10.0.0.1称为LAN口地址。替换后转发给服务器,将来服务器应答的时候,源地址为163.221.120.0,目标地址为202.244.174.37。但是应答到了路由器之后怎么再转发给客户端A我们还不知道。
对原始报文中的源IP地址进行替换,替换成途径路由器的WAN口IP的过程,我们称之为NAT(Network Address Translation)网络地址转换。


1.2、NAPT

在这里插入图片描述
客户端A给服务器发数据,源IP+端口为10.0.0.10:1025,目的IP+端口为163.221.120.9:80,首先判断目标IP不在当前子网,转发给路由器,路由器在进行源IP替换的时候,还会构建一张NAPT转换表。左边是源IP+源端口和目的IP+目的端口。右边也是如此,只不过第一行的源IP+源端口替换成路由器的了。所以路由器对报文中的源IP+端口进行替换,还会形成如图所示的映射关系,然后转发给服务器。而由于第一次建立了映射关系,之后主机A再发送给服务器到达路由器这里直接进行查表替换源IP地址即可。

左侧源IP标识了客户端A所在子网中唯一一台主机,源端口标识了该主机上的唯一一个进程。然后目的IP标识了全网唯一一台主机,目的端口标识了目的主机上的唯一一个进程。所以左侧整个部分是唯一的。右侧源IP+源端口也是具有唯一性,目的IP+目的端口同样如此,所以右侧整个部分也是唯一的。左侧和右侧都是一个四元组,并且都具有唯一性。左侧和右侧是互为键值的一组映射关系。

服务器收到后要做响应,源IP地址+端口为163.221.120.8:80,目的IP地址+端口为202.244.174.37:1025,所以服务器先转发给路由器,路由器收到后根据这四元组反向再查NAPT,将目的IP地址+端口替换为10.0.0.10:1025,然后进行内网转发,转发给客户端A。


如果在我们的内网中不止一台主机访问目标服务器呢?如果一台主机上的多个客户端访问目标服务器呢?
在这里插入图片描述
现在客户端B也要给服务器发数据,源IP+端口为10.0.0.11:1025,目标IP+端口为163.221.120.9:80,转发给路由器后,路由器要建立两个四元组的映射关系,这时候右边的源IP地址就是202.244.174.37,也就是路由器的WAN口地址,但是端口号1025已经被客户端A映射关系用过了,因此这时候需要换一个端口比如1026,然后路由器进行源IP+端口的替换,替换成202.244.174.37:1026,再转发给服务器。
服务器接收后要进行应答,源IP+端口为163.221.120.9,目的IP+端口为202.244.174.37:1026,转发给路由器,路由器再查表然后替换源IP+端口为10.0.0.11:1025,进行内网转发。

在进行NAT转换的时候,不仅会替换源IP,还可能替换源IP+源端口。

如果是一台主机上的多个进程,比如主机C上的多个进程,端口号分别为1000、2000、3000,那么将来表中就直接建立映射关系,右边的源IP就是路由器的WAN口IP地址,然后根据端口1000、2000、3000是否已经被用过了,如果没被用过直接用就行了,如果被用过了就换一个值。

在这里插入图片描述
所以对于之前的例子,主机向抖音服务器请求短视频,首先经过家用路由器,家用路由器做一次NAPT转发给运营商路由器,运营商路由器再做一次NAPT,转发给抖音服务器。抖音服务器响应先转发给运营商路由器,运营商路由器查NAPT表更换dstip转发给家用路由器,家用路由器再查表更换dstip转发给主机。
所以从内网到外网路由器就要做一次NAPT,当到了公网就不需要了。第一次路由器可能没有映射关系,路由器就会给你建立映射关系,从此之后路由器只要直接查表即可。如果长时间不用路由表就会清理,因此映射关系是动态生成的。


你的主机访问云服务器,服务器上打印出来的IP地址并不是你的内网IP。
在这里插入图片描述
如图,我们云服务器起了一个httpserver,然后使用电脑的浏览器访问主页,在云服务器这里打印客户端的IP和端口信息,我们发现客户端的IP地址为:36.248.247.252。

在这里插入图片描述
然后我电脑连接的是学校的网络,在windows命令行输入ipconfig查看内网IP为:10.22.140.88。
很显然,服务器端打印的IP地址和我们的内网IP地址是不一样的。实际上服务器端打印的IP地址就是运营商出入口路由器IP地址!


2、内网穿透

在这里插入图片描述
场景:我想在学校远程登陆上我家里的Linux服务器
首先你的学校是一个内网环境,你家里也是一个内网环境。我们在你家的机器上启动一个程序,这个程序用来与云服务器建立TCP连接,云服务器也启动一个程序用来与你家里的这台机器建立TCP连接。当你家里的机器和云服务器建立好了TCP连接,那么从内网到外网就都建立了NAPT映射关系,云服务器也可以发数据给你家里的机器。这时候你在学校里,你在学校的机器直接去访问云服务器,比如http或ssh,然后云服务器接收到后什么也不管,通过建立好的TCP连接转发给你家里的这台机器。比如你家里的机器部署了sshd远程登录服务,你学校这台机器直接访问云服务器进行登录,然后云服务器直接转发给你家里的机器,所以你就成功登陆上了你家里的这台机器。你在学校的机器就以登录云服务器的方式变相的登录上了你家里的机器,所有的请求都会转发给家里的这台机器。
学校里的主机就好像远程访问到了家里的这台主机,这种技术我们称为内网穿透。

使用的远程桌面控制todesk就是这个原理。另外大一点的公司都有会自己的内网,比如今天你不在公司所在地,而在你的家里,然后公司对外提供了一台云服务器和一个认证客户端,你通过认证客户端输入一些信息,经过这台服务器的认证你就可以访问公司内网的资源,实现在家办公。


3、内网打洞

在这里插入图片描述
今天老师在学校里面使用学校的内网开了一个直播给同学们上课,同学们在家里使用家里的内网登录直播平台观看老师上课。假设这个直播平台叫做XX直播平台,主机A向XX直播的服务器发起上课请求,所以在运营商运营商出入口路由器就会构建NAPT映射关系,服务器收到的源IP地址+端口为122.133.111.199:8888。然后你在家里登录直播平台请求听课,所以你的数据经过运营商出入口也会构建NAPT映射,服务器收到的源IP地址+端口为8.9.10.11:9999。然后老师在上课,云服务器会采集直播信息然后转发给正在看直播的所有同学。

现在XX直播服务器直接将之前获取的,你的运营商出入口路由器IP地址+端口:8.9.10.11:9999,推送给老师的客户端。同时将老师所在的运营商出入口路由器IP地址+端口:122.133.111.199:8888,推送给你的客户端。现在老师在直播,老师的客户端直接就将直播数据通过:8.9.10.11:9999推送给你的主机B。那么如果今天不止你在看直播,把其他同学的出入口路由器IP地址+端口号通过服务器都推送给老师的客户端,老师就能直接将数据发给其他同学了。同理,同学发送的弹幕,就能通过服务器推送给你的IP地址+端口号,不经过XX直播服务器,直接发送给老师的客户端。这时候就不需要再经过服务器转发,而是直接通过运营商网络转发。
只要发出去消息,出入口路由器NAPT一旦构建,就相当于在各自的路由器打了一个洞,可以让外部通过这个洞口进来,这就叫做内网打洞。
那么今天老师直播的内容还要有录播信息,因此服务器也将自己的IP地址+端口推送给老师的客户端,因此老师客户端不仅会将数据直接发送同学,还会发给服务器,然后服务器将数据保存下来即可。


3、代理服务器

3.1、正向代理

在这里插入图片描述
在学校会有一台服务器,当你想要使用校园网上网,就需要通过学校给你的客户端进行认证,这个服务器上就会有一个认证平台,当你认证成功就给你分配一个IP,这时候你就可以上网了。这时候你上网的所有报文都会经过学校的代理服务器,代理服务器就会帮你去请求,请求后响应回来,代理服务器再将报文转发给你。
所有客户端上网的请求都会定向到代理服务区,由代理服务区统一进行外网请求,这个代理服务区是靠近客户端,这种代理服务器叫做正向代理服务器。
也就是只有这台代理服务器可以访问外网,我们要访问必须得先认证通过,允许你的报文走路由器转发给正向代理,再由正向代理转发。

正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。

工作原理
• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求,并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端。

功能特点
• 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。
• 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
• 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
• 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
• 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。


3.2、反向代理

在这里插入图片描述
右边是一家互联网公司,要对外提供很多服务。当公司的代理服务器接收到客户端请求后,并不做处理,而是在后台选择一台服务器,转发给这台服务器去做处理。代理服务器可以将客户端出入口路由器IP+端口推送给选择的服务器,将来服务器处理完后直接推送回客户端,这是一种做法。也可以让服务器处理好后推送给代理服务器,代理服务器再返回给客户端。

反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。

基本原理
反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。

应用场景
负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。
缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。
动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理。


NAT和代理服务器:
从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行FQ,另外像迅游这样的加速器,也是使用代理服务器。
从底层实现上讲,NAT 是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层。
从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值