NAT、代理服务、内网穿透

发布于:2025-05-27 ⋅ 阅读:(23) ⋅ 点赞:(0)

一.NAT技术

NAT技术是为了解决IPv4协议中,IP地址不足的问题。NAT能够将私有IP对外通信时转为公网IP,私有IP可以重复,但在同一内网中是唯一的,而公网IP在全球内都是唯一的。

我们在进行消息路由的过程中,NAT技术会将我们的源IP地址一直进行替换,当替换到出入口路由器(进入公网)之后,就不再进行替换了。但我们一直有一个问题还没有解决:从公网向内网发送数据的时候,我们到了出入口路由器之后怎么将消息路由到对应的内网主机呢?

并且,一个出入口路由器里面的内网环境非常复杂,里面可能包含了多个重复的内网IP,如果这些内网IP同时访问公网中的同一个服务器,那么它们源ip替换的时候,不就变成了相同的两个报文了? 

NAPT表

在每个路由器上,除了有一张路由表外,还有一张NAPT表,该表中记录了源Ip,源端口和替换之后的ip和端口之间的映射关系。因为有可能存在上面的那种情况(同时有相同的私有IP和port访问同一个公网服务器),所以,在进行srcIP的替换时,端口号也有可能发生变化!!!

如上图所示,两个私有IP + port在进行替换的时候,替换成了同一个公网IP,但port不同,而这样就能确定全网内唯一的一个进程。 

有了NAPT表,我们在向外进行通信的时候,就是构建该映射的过程。此时外网在向我们应答的时候,到了出入口路由器,通过查NAPT表,就可以得知该公网ip+port与内网ip+port之间的映射关系,就可以将消息转发到内网中了。

二.代理服务

1.正向代理

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

工作原理:

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

功能特点:

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

应用场景:

  • 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工 在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以 实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
  • 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上 的不良信息影响。
  • 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速 度,减少网络延迟
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以 实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。

2.反向代理 

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

基本原理:

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

应用场景:

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

 3.CDN

CDN,内容分发网络,我们可以将一些静态资源,部署到一些CDN节点上,用户在获取这些资源的时候,就不用访问源服务器,直接访问距离自己最近的CDN服务器,如果用户访问的这些资源CDN上没有,CDN转而向服务器对获取,并在该CDN上缓存在内容。

什么时候需要用到CDN呢?

  • 用户分布广:比如全国 / 全球用户访问同一网站,需就近获取内容。
  • 流量大 / 并发高:电商大促、视频直播等场景,避免源站被流量压垮。
  • 对速度敏感:如移动端 App、游戏客户端,要求资源加载毫秒级响应。
  • 静态资源占比高:若网站 80% 以上是图片、视频等静态内容,CDN 加速效果最显著

 

简单理解CDN是如何工作的:

传统的DNS域名解析,会直接解析到源服务器位置,让客户端直接连接该源服务器。而CDN采用的是智能DNS解析,客户端再通过域名访问服务器时,智能DNS会将该域名解析为距离客户端最近的一个CDN节点IP,而非源IP。接着客户端再向CDN节点申请资源时,就照常返回,如果该节点没有该资源,则从源站获取,再返回给客户端。

CDN缓存没有该资源时,需要进行回源操作,即申请特定资源。CDN 节点回源时,通常会携带用户请求的关键信息(如 URL、请求头),同时可能伪装成 “特定客户端”(如添加X-Forwarded-For头传递用户真实 IP),确保源站正确响应。

生活化的例子:

  • 传统 DNS 解析:像直接查地图找餐厅地址,所有人都去同一间餐厅(源站),人多会排队(响应慢)。
  • CDN 智能 DNS 解析:像查 “连锁餐厅地图”,系统根据你的位置推荐最近的分店(CDN 节点),分店有食材(缓存)就直接上菜,没有就从总厨房(源站)调货并备存。

4.科学上网 

当我们再国内访问外网的资源时,其实都要将请求推送到运营商构建的子网中,运营商路由器捕捉到你的请求是访问外网的资源,直接就对你的请求做了拦截。

而我们科学上网得本质,其实就是借助VPN对我们得请求拦截,并且对请求进行加密,然后VPN替我们访问位于香港得一台代理服务器,此时,运营商无法查看我们的请求内容,我们访问的也是合法的资源,这样我们得请求就到了代理服务器,代理服务器也安装了相同的软件,对我们的请求做解密,在替我们访问对应的外网服务器,并将资源替我们返回过来。

所以,科学上网得本质就是一种正向代理服务器,服务器替我们去访问,然后将结果替我们在返回。 

三.内网穿透 

在家庭、公司中,我们一般使用的都是私有IP,通过路由器得NAT技术,共享同一个公网IP访问公网资源。在这个过程中,会在路由器中,生成NAPT表,来映射私有IP和公网IP。

这也就是说,我们无法直接用公网IP访问局域网内的私有IP。

假设现在有两个不同局域网中的设备A、B,而B所在局域网为严格的NAT内网,无法从公网直接访问内网得B设备。此时我们需要使用B设备在对应的局域网中,主动连接中转服务器,构建一条通信隧道(私有IP + port 和公网IP + port 建立对应的映射关系)。此时A设备再通过访问中转服务器中指定得公网IP + port,中转服务器就可以将A发送过来的数据,通过已经建立好的隧道发送给B。

以上其实就是内网穿透的逻辑。 

内网穿透的应用场景:

  1. 远程桌面控制(如 B 是家庭电脑)
    • A 在公司通过公网访问中转服务器的端口,连接到 B 的远程桌面(如 RDP 协议)。
  2. 跨网络开发测试
    • B 运行本地开发的 API 服务,A 通过中转服务器的端口调试接口,无需将 B 暴露到公网。
  3. 智能家居联动
    • B 是局域网内的智能音箱或摄像头,A 在外地通过中转服务器访问其管理界面。

当我们再局域网中,使用私有IP访问抖音服务器,不是要再路由器中构建NAPT表,该表中保存了私有IP+port,和公网IP + port的映射关系。抖音再给我们应答的时候,就可以借助该NAPT表,将数据发送到局域网中。而这个过程并不属于内网穿透,因为这是NAT的经典正向转换场景。

对比维度 NAT(正向转换) 内网穿透(反向隧道)
核心目标 让内网设备共享公网 IP 访问外部资源 让公网设备能主动访问内网设备
数据流向 内网 → 公网(单向主动) 公网 ↔ 内网(双向,公网可主动)
NAT 表建立方式 内网设备主动发起连接时自动创建 需要内网设备提前与中转服务器建立反向隧道
典型场景 家用路由器上网、手机访问公网 APP 远程控制内网电脑、公网访问本地服务器
技术依赖 路由器内置 NAT 功能 中转服务器、反向代理(如 frp、ngrok)

四.内网打洞

当我们看观看直播的时候,主播会将直播消息发送到服务器中,观众观看直播,本质上就是方法该服务器,服务器将主播的消息转发给各个客户端。但是这样的工作模式,服务器的压力太大了。

我们可以让所有的客户端主动连接服务器,服务器在内部,交换客户端的公网IP和端口号。这样主播在直播的时候,就不用将数据推送到服务器,再有服务器转发了,而是直接拿着其他客户端的公网IP和端口号,进行p2p(用户到用户)的直接数据流动。

关键步骤(以 STUN 协议为例)

  1. 设备获取自身的 NAT 映射地址

    • 设备 A 和设备 B 分别向STUN 服务器(公网服务器)发送请求,STUN 服务器返回它们在 NAT 设备上的公网 IP + 端口(即 NAT 为设备分配的出口地址)。
    • 例如:
      • 设备 A 的私有地址:192.168.1.100:5000,NAT 映射地址:公网IP-A:8080
      • 设备 B 的私有地址:10.0.0.200:6000,NAT 映射地址:公网IP-B:9090
  2. 交换公网映射地址

    • 设备 A 和 B 通过信令服务器(如聊天服务器)交换彼此的公网映射地址。
  3. 尝试直接连接

    • 设备 A 用 B 的公网映射地址(公网IP-B:9090)发送数据,设备 B 用 A 的公网映射地址(公网IP-A:8080)发送数据。
    • NAT 的 “临时放行” 机制
      当 NAT 设备发现内网设备主动向某个公网地址发送数据时,会临时允许该公网地址的响应数据回流。因此,若 A 和 B 同时向对方的公网映射地址发起连接,NAT 可能会放行对方的数据包,从而建立直接通信。
  4. 中继转发(TURN 协议)

    • 若直接连接失败(如对称型 NAT),则通过TURN 服务器作为中继,转发双方数据(此时退化为中转模式,但仅在必要时使用)。

五.交换机

在一个局域网中,一个主机给另一个主机发送消息,局域网中所有的主机都能收到,只不过会在数据链路层进行mac帧检测,如果不是我,就丢弃。

在这个过程中,有可能会发生数据碰撞。而当我们引入了交换机,就在一定几率上降低了碰撞的概率。

比如,我们A主机给E主机发送数据,其他的所有主机都能收到,交换机就判断了,A主机在交换机的左侧,对于其他主机也一样。自此,交换机就有了该局域网中所有主机的大致方位。

现在,A在发消息给D主机时,交换机知道D在左边,所有就不会将消息发送到右边。同理,如果C主机要发消息给E,判断E在其右侧,则不会将数据发送到左侧。 


网站公告

今日签到

点亮在社区的每一天
去签到