我没胆量犯错 才把一切错过
--- 林夕 《我对不起我》---
一文了解NAT机制,代理服务,内网穿透
- [1 再谈 NAT 机制](#1 再谈 NAT 机制)
- [2 内网穿透与内网打洞](#2 内网穿透与内网打洞)
- [3 代理服务器](#3 代理服务器)
1 再谈 NAT 机制
NAT机制我们在解决IP地址不足的问题中提到过。为了解决IP地址不足的问题,采取了私有IP与公网IP的策略:
- 私有IP是随机分配的,保证在局域网中不重复,在不同子网中可以重复!
那么这样在网络通信过程中势必会造成问题,因为私有IP并不是唯一的,所以私有IP不能出现在公网通信中的。解决这个问题的机制就是NAT机制。NAT机制即在路由器进行转发时将报文源IP更换为路由器WAN口IP,**进行一次源IP地址替换!**这样就可以私有IP就不会出现在公网中!并且在通信过程中够可以层层向下找到唯一的主机!
上图中,NAT 路由器将源地址从 10.0.0.10
替换成全局的 IP 202.244.174.37
;NAT 路由器收到外部的数据时, 又会把目标 IP 从 202.244.174.37
替换回10.0.0.10
。
- 这个转换的基础是:在 NAT 路由器内部,有一张自动生成的,用于地址转换的表NAPT;
- 当
10.0.0.10
第一次向163.221.120.9
发送数据时就会生成表中的映射关系。
此时就会有一个新问题!应该局域网中的多台主机在经过路由器路由转发后,源IP都变成了路由器的WAN口IP,那么这样服务端发送回的报文到达路由器时,目的IP是路由器的WAN口IP。那么路由器如何知道这个报文是要传送给局域网中的哪台主机呢?
- 这时候 NAPT 来解决这个问题了,使用 IP+port 来建立这个关联关系!
路由器之中,进行转发时,维护了一张NAPT转换表。其中记录目的IP+端口号port
与 WAN口IP + 端口号port
的映射关系,互为键值。这两个都具有唯一性:局域网唯一,公网唯一!源IP发生替换,源端口也可能发生替换!这样保证了映射的唯一性!
每个路由器在转发过程中都会生成一份NAPT表,最终就可以到达公网进行通信!这样其实也说明了一个问题,公网是无法直接访问内网机器的,只有内网机器向公网发送过数据,建立过NAPT表,才能从外部进入内部!
所以NAT 技术是有缺陷的,由于 NAT 依赖这个转换表, 所以有诸多限制:
- 无法从 NAT 外部向内部服务器建立连接;
- 转换表的生成和销毁都需要额外开销;一般不需要担心性能不够!
- 通信过程中一旦 NAT 设备异常,即使存在热备, 所有的 TCP 连接也都会断开;
使用WIndows访问我们的Linux服务端时,我们仔细观察会发现服务端接收到的IP地址和WIndo端是不一致的!
这也是由于路由器NAT转发的结果!Linux服务上的实际获取到的IP是出入口路由器的WAN口IP
2 内网穿透与内网打洞
如果今天可以做到:
- 首先我们拥有一个云服务器.
- 并且我们在内网构建一个Linux机器,使用22端口部署了一个ssh服务,可以与云服务器建立一个连接。
- 云服务器也部署一个服务,可以将机器上所以8888端口获取的数据,可以转到内网的Linux服务器上!
- 这样云服务器8888端口与内网服务器的22端口就建立了映射;
- 那么其他内网的机器可以通过访问云服务器的8888端口就直接可以访问到内网的Linux机器了!
这样内网的机器就能访问另一台内网的机器了,这叫做内网穿透技术 !
这个我们可以在云服务器使用frp
软件进行内网穿透服务:
- 服务器:拥有一台具有公网IP地址的服务器,作为FRP的服务端。
- 客户端:需要穿透的内网机器,作为FRP的客户端。
那么为什么要进行内网穿透呢?内网穿透有这样的优点:
- 成本效益:内网穿透可以避免购买服务器公网IP地址的高昂成本,同时也能实现公网服务的功能。
- 访问限制:由于NAT(网络地址转换)和防火墙的存在,内网中的设备通常无法直接从外网访问。内网穿透技术可以帮助绕过这些限制,使得内网服务可以被外网访问。
- 资源共享:内网穿透使得个人或企业可以将其内网中的资源(如文件服务器、Web服务、数据库等)分享给外网的用户,而无需复杂的网络配置。
- 远程管理:系统管理员可以通过内网穿透技术,从外部网络远程管理内网中的服务器或设备,方便进行维护和监控。可以实现远程访问公司服务器进行办公!
- 开发与测试:开发者可以在内网环境中开发应用程序,并通过内网穿透技术让外网的测试人员或合作伙伴访问,以便进行测试和反馈。
- 安全性:内网穿透可以提供一种更安全的远程访问方式。通过配置,可以限制哪些外部地址可以访问内网服务,从而保护内网资源不被未经授权的访问。
上面的客户端,最终被云服务器获取的源IP是出入口路由器的WAN口IP。服务端这里通过配置会有内网服务器的IP地址与端口号,那么可不可以将服务端IP+port
发给客户端,客户端IP+port
发给服务端呢?
当然可以,这样客户端就可以直接向内网服务器进行访问,服务端也可以直接给客户端发送数据!这种技术就叫做内网打洞!这样就直接跨过了云服务器,在出入口路由器上打了一个洞,可以直接进行访问!
一些出入口路由器是不允许进行内网打洞,这里我们了解其原理就可以了!
3 代理服务器
在学校,公司这些地方会有对应的校园网,公司网。这样的网络可以提供更好的内网服务或者网络监视。在这个内网中,所有的机器都会先将数据发送到代理服务器上,进行一次处理,在进行转发。这就是一种正向代理服务。
- 正向代理(Forward Proxy) 是一种常见的网络代理方式, 它位于客户端和目标服务器之间, 代表客户端向目标服务器发送请求。
- 正向代理服务器接收客户端的请求, 然后将请求转发给目标服务器, 最后将目标服务器的响应返回给客户端。 通过这种方式, 正向代理可以实现多种功能, 如提高访问速度、 隐藏客户端身份、 实施访问控制等。
那么如何做到让所有的机器都会将报文发送到这台服务器上呢?就是通过路由器,在学校公司中,所有的网络配置都是统一进行管控的,最终都会将数据包发送到这个代理服务器上!这个过程是这样的:
• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求, 并根据配置进行处理, 如缓存查找、 内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求, 并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端
代理服务器有很多优点:
- 缓存功能: 正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时, 可以直接从缓存中获取, 提高访问速度。
- 内容过滤: 正向代理可以根据预设的规则对请求或响应进行过滤, 如屏蔽广告、阻止恶意网站等。
- 访问控制: 通过正向代理, 可以实现对特定网站的访问控制, 如限制员工在工作时间访问娱乐网站。
- 隐藏客户端身份: 正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私。
- 负载均衡: 在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性。
同样的还有反向代理服务器,用来保证调控服务器群。
反向代理服务器是一种网络架构模式, 其作为 Web 服务器的前置服务器, 接收来自客户端的请求, 并将这些请求转发给后端服务器, 然后将后端服务器的响应返回给客户端。 这种架构模式可以提升网站性能、 安全性和可维护性等。
- 反向代理服务器位于客户端和 Web 服务器之间, 当客户端发起请求时, 它首先会到达反向代理服务器。
- 反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器, 并将 Web 服务器的响应返回给客户端。
- 在这个过程中, 客户端并不知道实际与哪个 Web 服务器进行了交互, 它只知道与反向代理服务器进行了通信。
- 这样客户端只会访问这一个代理服务器,代理服务器调控流量,让服务器群负载均衡。
反向代理服务器有以下优点:
- 负载均衡: 反向代理服务器可以根据配置的负载均衡策略, 将客户端的请求分发到多个后端服务器上, 以实现负载均衡。 这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
- 安全保护: 反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址, 降低其被直接攻击的风险。 同时, 它还可以配置防火墙、 访问控制列表(ACL) 等安全策略,对客户端的请求进行过滤和限制, 以保护后端服务器的安全。
- 缓存加速: 反向代理服务器可以缓存后端 Web 服务器的响应内容, 对于重复的请求, 它可以直接从缓存中返回响应, 而无需再次向后端服务器发起请求。 这可以大大减少后端服务器的负载, 提升网站的响应速度。
- 内容过滤和重写: 反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写, 例如添加或删除请求头、 修改请求路径等。 这有助于实现一些特定的业务需求, 如 URL 重写、 用户认证等。
- 动静资源分离: 在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上, 可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度。 CDN(Content Delivery Network, 内容分发网络) 就是采用了反向代理的原理。
那么NAT和代理服务器的功能好像有点类似啊?
- 路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。
- 代理服务器看起来和 NAT 设备有一点像。 客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。
那么 NAT 和代理服务器的区别有哪些呢?
- 从应用上讲:NAT 设备是网络基础设备之一,解决的是 IPv4版本IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
- 从底层实现上讲:NAT 是工作在网络层,直接对 IP 地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲: NAT 一般在局域网的出口部署;代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
- 从部署位置上讲:NAT 一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。