跳转至

NAT技术、代理服务器和内网穿透

约 3334 个字 4 张图片 预计阅读时间 11 分钟

NAT和NAPT技术

NAT(Network Address Translation,网络地址转换)是一种将私有(内部)网络地址转换为公有(外部)IP地址的技术。NAT主要用于解决IPv4地址短缺问题,同时提供了一定的安全性

在前面网络层IP协议部分已经介绍过局域网内的主机向公网计算机发送数据的过程,但是当时并没有介绍公网机器向局域网内主机发送数据的过程。从直觉上,公网主机向局域网内主机发送信息的过程为公网主机将源IP地址作为目标IP地址返回数据,但是这样会遇到一个问题:此处的源IP地址是局域网主机的出入口路由器,这个路由器可能被需要主机连接,这就造成路由器收到公网主机发送的数据无法被转发

为了解决这个问题,就需要使用一张映射表,在这张映射表中需要填入局域网内主机的源报文中的源IP地址+端口和目的IP+端口与出口路由器的WAN口IP+端口和目的IP+端口的映射关系,而进行这一步的时机就是在某一台局域网内主机第一次对外发送数据(例如需要建立TCP连接时)。这张表也被称为NAT表,下面是只展示部分关键映射关系的NAT表:

内网地址:端口 公网地址:端口
源主机局域网IP和端口:10.0.0.10:1025
目标主机公网IP和端口:163.221.120.9:80
出入口路由器WAN口IP和端口:202.244.174.37:1025
目标主机公网IP和端口:163.221.120.9:80

有了这个映射关系,当目标主机再向IP地址和端口为202.244.174.37:1025的主机发送数据时,路由器收到这个数据会根据这个映射关系表将数据转发给源主机,即10.0.0.10:1025

但是,上面的转换表有一个很大的缺陷:如果存在两个局域网主机使用的端口相同,那么根据上表的转换过程,这两个主机在转换后都是202.244.174.37:1025,这样依旧无法解决局域网内不同的主机接收消息。所以在原来的NAT之上引入了其增强形式:NAPT(Network Address Port Translation,网络地址端口转换),NAPT与NAT的最大区别就在二者的转换效果上:NAT只会转换IP地址,而NAPT会同时转换IP地址和端口。下面是只展示部分关键映射关系的NAPT表:

内网地址:端口 公网地址:端口
源主机局域网IP和端口:10.0.0.10:1025
目标主机公网IP和端口:163.221.120.9:80
出入口路由器WAN口IP和端口:202.244.174.37:1025
目标主机公网IP和端口:163.221.120.9:80
源主机局域网IP和端口:10.0.0.11:1025
目标主机公网IP和端口:163.221.120.9:80
出入口路由器WAN口IP和端口:202.244.174.37:1026
目标主机公网IP和端口:163.221.120.9:80

在上表中,如果端口没有冲突,直接使用原来的端口,可以理解为端口改变了,只不过和原来端口一样。此时就不会出现使用相同端口的两台局域网主机无法被出入口路由器区分的问题

整个过程的示意图如下:

代理服务器

代理服务器(Proxy Server)分为两种:正向代理服务器和反向代理服务器

正向代理

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

其基本工作原理如下:

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

正向代理的特点有如下几点:

  1. 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度
  2. 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等
  3. 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站
  4. 隐藏客户端身份:正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私

常见的应用场景如下:

  1. 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密
  2. 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性
  3. 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响
  4. 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟
  5. 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源

反向代理

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

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

常见的应用场景如下:

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

NAT技术和代理服务器的区别

NAT和代理服务器虽然都能实现网络中转功能,但在工作原理、应用场景和功能特性上有显著差异。对比如下:

特性 NAT 代理服务器
工作层级 网络层(第3层) 应用层(第7层)
主要目的 解决IPv4地址短缺 提供中介服务和功能增强
数据处理 只修改IP/端口头部 可检查和修改整个数据包内容
协议支持 支持所有IP协议 通常限于特定协议(例如HTTP、HTTPS等)
配置方式 对应用程序透明 需要显式配置(正向代理)
部署位置 通常在网络边界(路由器) 可在网络任何位置(包括局域网和广域网)

内网穿透和内网打洞

内网穿透

内网穿透是指通过各种技术手段,使位于外网的设备能够访问内网服务器的一种方法。由于NAT和防火墙的存在,外网设备通常无法直接连接到内网服务,内网穿透技术就是为了解决这个问题。

内网穿透的原理

内网穿透的基本原理是建立一个"隧道",连接内网设备和外网服务器:

  1. 内网设备与公网服务器建立连接(通常是长连接)
  2. 内网设备通过该连接向公网服务器注册自己的服务
  3. 外网用户访问公网服务器时,公网服务器将请求转发至内网设备
  4. 内网设备处理请求并将响应通过已建立的连接返回

示意图如下:

主要穿透方式

  1. 端口映射:在路由器/防火墙上配置端口转发规则
  2. 反向代理:通过中间服务器转发流量
  3. 基于SSH的隧道:利用SSH协议建立加密隧道
  4. 中继服务:利用公网服务器中继内外网通信

常见内网穿透工具

  • frp/nps:开源的反向代理工具
  • ngrok:提供安全隧道服务的商业工具
  • 花生壳:面向个人用户的穿透服务
  • ZeroTier/Tailscale:基于SDN的虚拟网络

内网打洞

内网打洞(NAT打洞)是一种特殊的穿透技术,主要用于P2P(点对点)通信。它允许两个都处于NAT后的设备直接通信,无需持续依赖中间服务器转发数据。

内网打洞原理

  1. 双方通过公共服务器(中介服务器)交换各自的公网IP和端口信息
  2. 双方同时向对方发送UDP数据包,在各自的NAT上创建映射
  3. 一旦映射创建成功,双方就可以直接通信,不再需要中介服务器

示意图如下:

打洞技术分类

  1. UDP打洞:较容易实现,成功率高
  2. TCP打洞:较复杂,依赖于NAT设备的具体行为
  3. ICMP打洞:利用ping包穿透,使用较少

关键协议和技术

  • STUN (Session Traversal Utilities for NAT):帮助客户端发现自己的公网IP和NAT类型
  • TURN (Traversal Using Relays around NAT):当直接连接失败时提供中继服务
  • ICE (Interactive Connectivity Establishment):综合框架,结合STUN和TURN,尝试多种连接方式
  • UPnP/NAT-PMP:自动在路由器上配置端口映射

内网穿透与内网打洞的区别

特性 内网穿透 内网打洞
通信模式 客户端-服务器 点对点(P2P)
中间服务器 持续依赖中转 仅用于连接建立
应用场景 Web服务、远程管理 视频通话、文件共享
数据流量 经过中间服务器 直接在两点间传输
延迟 较高 较低
带宽消耗 中间服务器成本高 节省服务器带宽

应用场景

内网穿透应用场景

  • 远程访问家庭NAS或个人网站
  • 远程桌面/SSH连接到内网电脑
  • 临时对外发布内网服务
  • IoT设备远程控制

内网打洞应用场景

  • 视频会议/VoIP通话
  • P2P文件共享
  • 在线游戏
  • 分布式存储系统