10、NAT、代理服务、内网穿透

发布时间:2026/6/6 21:07:57

10、NAT、代理服务、内网穿透 目录NAT 技术背景NAT IP 转换过程NAPTNAT 技术的缺陷代理服务器正向代理工作原理功能特点应用场景反向代理基本原理应用场景NAT 和代理服务器那么 NAT 和代理服务器的区别有哪些呢内网穿透什么是内网穿透为什么需要内网穿透常见实现方式frp 的内网穿透流程整体架构角色步骤 1本地端口映射配置步骤 2直接访问云服务器端口即可穿透“NAT 映射建立”与“TCP 连接”frp 内网穿透的本质内网打洞典型例子UDP 打洞实际应用中的技术局限性不能 100% 成功与 frp 的关系总结数据链路层网络层传输层应用层NAT 技术背景之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题NAT 技术当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能;• NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法:• 很多学校, 家庭, 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务 器上设置全局 IP;• 全局 IP 要求唯一, 但是私有 IP 不需要; 在不同的局域网中出现相同的私有 IP 是完全不影响的;NAT IP 转换过程• NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;• NAT 路由器收到外部的数据时, 又会把目标 IP 从 202.244.174.37 替换回 10.0.0.10;• 在 NAT 路由器内部, 有一张自动生成的, 用于地址转换的表;• 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;NAPT那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返 回的数据中, 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个 局域网的主机?这时候 NAPT 来解决这个问题了. 使用 IPport 来建立这个关联关系这种关联关系也是由 NAT 路由器自动维护的. 例如在 TCP 的情况下, 建立连接时, 就会 生成这个表项; 在断开连接后, 就会删除这个表项NAT 技术的缺陷由于 NAT 依赖这个转换表, 所以有诸多限制:• 无法从 NAT 外部向内部服务器建立连接;• 装换表的生成和销毁都需要额外开销;• 通信过程中一旦 NAT 设备异常, 即使存在热备, 所有的 TCP 连接也都会断开;代理服务器代理服务器是一种应用比较广的技术.• 翻墙: 广域网中的代理.• 负载均衡: 局域网中的代理代理服务器又分为正向代理和反向代理.正向代理• 正向代理Forward Proxy是一种常见的网络代理方式它位于客户端和目标 服务器之间代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请 求然后将请求转发给目标服务器最后将目标服务器的响应返回给客户端。通过这 种方式正向代理可以实现多种功能如提高访问速度、隐藏客户端身份、实施访问 控制等。工作原理• 客户端将请求发送给正向代理服务器。• 正向代理服务器接收请求并根据配置进行处理如缓存查找、内容过滤等。• 正向代理服务器将处理后的请求转发给目标服务器。• 目标服务器处理请求并将响应返回给正向代理服务器。• 正向代理服务器将响应返回给客户端。功能特点• 缓存功能正向代理服务器可以缓存经常访问的资源当客户端再次请求这些资 源时可以直接从缓存中获取提高访问速度。• 内容过滤正向代理可以根据预设的规则对请求或响应进行过滤如屏蔽广告、 阻止恶意网站等。• 访问控制通过正向代理可以实现对特定网站的访问控制如限制员工在工作 时间访问娱乐网站。• 隐藏客户端身份正向代理可以隐藏客户端的真实 IP 地址保护客户端的隐私。• 负载均衡在多个目标服务器之间分配客户端请求提高系统的可扩展性和可靠 性。应用场景企业网络管理企业可以通过正向代理实现对员工网络访问的管理和控制确保员工 在工作时间内专注于工作避免访问不良网站或泄露公司机密。公共网络环境在公共场所如图书馆、学校等提供的网络环境中通过正向代理可以 实现对网络资源的合理分配和管理确保网络使用的公平性和安全性。内容过滤与保护家长可以通过设置正向代理来过滤不良内容保护孩子免受网络上 的不良信息影响。提高访问速度对于经常访问的网站或资源正向代理可以通过缓存机制提高访问速 度减少网络延迟。跨境电商与海外访问对于跨境电商或需要访问海外资源的企业和个人正向代理可 以帮助他们突破网络限制顺畅地访问海外网站和资源。反向代理• 反向代理服务器是一种网络架构模式其作为 Web 服务器的前置服务器接收 来自客户端的请求并将这些请求转发给后端服务器然后将后端服务器的响应返回 给客户端。这种架构模式可以提升网站性能、安全性和可维护性等基本原理• 反向代理服务器位于客户端和 Web 服务器之间当客户端发起请求时它首先 会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web 服务器并将 Web 服务器的响应返回给客户端。在这个过程中客户端并不知道实际 与哪个 Web 服务器进行了交互它只知道与反向代理服务器进行了通信。应用场景• 负载均衡反向代理服务器可以根据配置的负载均衡策略将客户端的请求分发 到多个后端服务器上以实现负载均衡。这有助于提升网站的整体性能和响应速度 特别是在高并发场景下。• 安全保护反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址降低其被直接攻击的风险。同时它还可以配置防火墙、访问控制列表ACL等安全策略 对客户端的请求进行过滤和限制以保护后端服务器的安全。• 缓存加速反向代理服务器可以缓存后端 Web 服务器的响应内容对于重复的 请求它可以直接从缓存中返回响应而无需再次向后端服务器发起请求。这可以大 大减少后端服务器的负载提升网站的响应速度。• 内容过滤和重写反向代理服务器可以根据配置的规则对客户端的请求进行过滤 和重写例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需 求如 URL 重写、用户认证等。• 动静分离在大型网站中通常需要将静态资源和动态资源分开处理。通过将静 态资源部署在反向代理服务器上可以直接从反向代理服务器返回静态资源的响应 而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。• CDNContent Delivery Network内容分发网络就是采用了反向代理的原理NAT 和代理服务器路由器往往都具备 NAT 设备的功能, 通过 NAT 设备进行中转, 完成子网设备和其他子 网设备的通信过程.代理服务器看起来和 NAT 设备有一点像. 客户端像代理服务器发送请求, 代理服务器将 请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户 端.那么 NAT 和代理服务器的区别有哪些呢• 从应用上讲, NAT 设备是网络基础设备之一, 解决的是 IP 不足的问题. 代理服 务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.• 从底层实现上讲, NAT 是工作在网络层, 直接对 IP 地址进行替换. 代理服务器 往往工作在应用层. • 从使用范围上讲, NAT 一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.• 从部署位置上看, NAT 一般集成在防火墙, 路由器等硬件设备上, 代理服务器则 是一个软件程序, 需要部署在服务器上简单区分类型代表谁谁被隐藏客户端是否知情正向代理客户端客户端真实 IP是需配置反向代理服务器服务器真实集群否无感知正向代理替客户出门办事外人不知道客户是谁。反向代理替商家接客客人不知道背后是哪个店员服务。内网穿透什么是内网穿透内网穿透NAT Traversal / Intranet Penetration是一种技术用于让外网公网的设备能够访问位于内网如家庭、公司局域网中的设备。为什么需要内网穿透家庭、公司的设备通常位于NAT网络地址转换后面它们拥有私有 IP如192.168.x.x。外网无法直接主动连接这些私有 IP因为 NAT 只允许内网设备主动向外建立连接但禁止外网主动向内发起连接。内网穿透就是为了“打穿”这个限制让外网可以访问内网的服务例如 SSH、Web 服务器、远程桌面。常见实现方式端口映射UPnP / 手动配置路由器在路由器上做端口转发但需要公网IP且配置复杂。第三方穿透工具如 frp、ngrok、ZeroTier、花生壳等。其中frp是目前最流行的开源内网穿透工具。frp 的内网穿透流程图中描述了一个典型的frp使用场景在家的 Linux 机器内网上运行 SSH 服务22 端口希望能在公司或学校外网直接访问家里的 SSH。整体架构角色frps服务端部署在一台有公网 IP的云服务器上。frpc客户端部署在家里的 Linux 机器上内网。步骤 1本地端口映射配置配置把本地某个端口映射到 frps 的某个端口例如将家里 Linux 的 SSH 22 号端口映射到 frps 的 8888 端口在家里 Linux 机器上配置frpc.inifrp 客户端配置内容类似[ssh] type tcp local_ip 127.0.0.1 local_port 22 # 家里机器的 SSH 端口 remote_port 8888 # 云服务器上 frps 开放的端口同时在云服务器上运行frps并配置好frps.ini允许端口 8888 被使用。含义frpc 会主动与 frps 建立一条TCP 长连接并告诉 frps“凡是发到你 8888 端口的流量都通过这条连接转发给我我再转发给本地的 22 端口SSH”。步骤 2直接访问云服务器端口即可穿透直接访问云服务器的 8888 端口就能直接访问到家里的 Linux 机器的 22 号端口在公司或学校的电脑上执行ssh 你的云服务器公网IP -p 8888流量到达云服务器frps的 8888 端口 → frps 通过已经建立的 TCP 通道发给家里的 frpc → frpc 转发到本地的127.0.0.1:22→ SSH 服务响应 → 数据原路返回。结果外网用户感觉自己在直接连接云服务器的 8888 端口但实际上最终连接的是家里的 Linux SSH。“NAT 映射建立”与“TCP 连接”TCP 连接图中的“TCP 连接”指的是frpc 主动向 frps 发起的控制/数据连接。由于是内网主动发起NAT 会允许这个连接以及后续的复用通道从而“打洞”成功。NAT 映射建立当 frpc 连接到 frps 时NAT 路由器会在内部建立一条临时映射内网端口 → 外网端口frps 可以通过这条映射反向给 frpc 发数据。这就是穿透的核心frp 内网穿透的本质没有真正“打穿” NAT而是利用了一条由内网主动发起的双向隧道。内网设备需要主动连接公网服务器frps。公网服务器作为中继接收外网用户的请求并通过已有隧道转发给内网设备。外网用户只需访问公网服务器的某个端口就能间接访问内网服务。这种模式可以用于访问 SSH、远程桌面、Web 服务HTTP/HTTPS、游戏联机等任何基于 TCP/UDP 的服务。内网打洞“内网打洞”通常指P2P点对点NAT 穿透技术它能让两个都在内网NAT 后面的设备直接建立连接不需要公网服务器一直中转数据。之前的frp属于中继模式数据必须经过公网服务器。为什么叫“打洞”每个 NAT 就像一堵墙。墙上有临时的“洞”NAT 映射表项只有内网主动访问外网时才会开一个洞允许外部响应回来。打洞就是让双方同时主动访问对方在各自的墙上开出允许对方数据进入的临时洞。方式数据路径优点缺点中继如 frp设备A → 公网服务器 → 设备B稳定穿透成功率高服务器带宽压力大延迟增加打洞P2P 穿透设备A ←→ 设备B 直接连接不消耗服务器带宽延迟低成功率受 NAT 类型限制典型例子UDP 打洞假设设备 A公司内网IP 1.1.1.1:30000 NAT 映射后对外端口 50000设备 B家里内网IP 2.2.2.2:40000 NAT 映射后对外端口 60000有一个信令服务器公网只帮忙交换地址不中转数据。步骤A 和 B 分别连接信令服务器服务器记录它们各自的公网 IP 端口NAT 分配的临时映射。A 想联系 B 时从服务器拿到 B 的公网地址(2.2.2.2:60000)。A 向 B 的公网地址发送一个UDP 数据包这个包很可能被 B 的 NAT 丢弃因为 NAT 没见过来自 A 的流量。关键A 发送的同时通过信令服务器告诉 B“请你向我的公网地址(1.1.1.1:50000)也发送一个 UDP 包”。B 向 A 的公网地址发送 UDP 包。这时A 的 NAT 看到来自 B 的包由于 A 之前主动向 B 发过包NAT 会认为这是“响应”于是放行。B 的 NAT 同理。打洞成功A 和 B 可以直接通信。更通俗说法双方都先往对方的洞里扔一个石子让对方 NAT 记住自己然后就可以互相收发数据了。实际应用中的技术UDP 打洞最常用因为 UDP 无状态NAT 映射容易保持。TCP 打洞更复杂因为 TCP 有状态需要同时使用端口预测或 SO_REUSEADDR 等技巧。ICEInteractive Connectivity Establishment综合使用 STUN获取公网地址、TURN中继兜底、打洞等用于 WebRTC。局限性不能 100% 成功NAT 类型影响打洞成功率全锥形 NAT打洞容易地址限制锥形 NAT可以打洞端口限制锥形 NAT勉强可打对称 NAT几乎无法打洞因为 NAT 会为每个目标分配不同端口导致双方不知道对方的准确端口。此时只能退回到中继模式TURN 服务器。与 frp 的关系frp 默认是中继模式但它的xtcp插件实现了P2P 打洞基于 UDP。如果打洞成功frp 会切换为直连如果失败自动回落到中继。内网打洞 借助公网信令服务器交换地址让两台 NAT 设备互相主动发起连接直接在 NAT 墙上“开洞”实现 P2P 直连。总结数据链路层• 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据• 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内 容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;• 以太网帧格式• 理解 mac 地址• 理解 arp 协议• 理解 MTU网络层• 网络层的作用: 在复杂的网络环境中确定一个合适的路径.• 理解 IP 地址, 理解 IP 地址和 MAC 地址的区别.• 理解 IP 协议格式.• 了解网段划分方法• 理解如何解决 IP 数目不足的问题, 掌握网段划分的两种方案. 理解私有 IP 和公 网 IP• 理解网络层的 IP 地址路由过程. 理解一个数据包如何跨越网段到达最终目的地• 理解 IP 数据包分包的原因.• 了解 ICMP 协议.• 了解 NAT传输层• 传输层的作用: 负责数据能够从发送端传输接收端.• 理解端口号的概念.• 认识 UDP 协议, 了解 UDP 协议的特点.• 认识 TCP 协议, 理解 TCP 协议的可靠性. 理解 TCP 协议的状态转化.• 掌握 TCP 的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延 迟应答, 捎带应答特性.• 理解 TCP 面向字节流, 理解粘包问题和解决方案.• 能够基于 UDP 实现可靠传输. • 理解 MTU 对 UDP/TCP 的影响应用层• 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层• 能够根据自己的需求, 设计应用层协议.• 了解 HTTP 协议.• 理解 DNS 的原理和工作流程

相关新闻