NAT、代理服务、内网穿透

一、NAT

NAT是解决当下IPv4地址不足的总要手段之一,其核心作用就是将局域网中的本地地址与公网上的IP地址建立起映射关系。

NAT并非路由器的默认功能,路由器要想进行NAT必须先经过提前配置。一般来说,NAT转化通常出现在网络的边界位置,即数据包从私有网络(内网)进入公共网络(外网)的出口路由器或网关上。

核心工作流程

假设家里的电脑(私有IP 192.168.1.100)想访问百度(公网IP 110.242.68.66)。

步骤 方向 数据包中的IP地址 NAT设备(路由器)做了什么?
1. 发出请求 内网 → 外网 源IP:192.168.1.100:12345 目标IP:110.242.68.66:80 地址转换 :将源IP替换为自己的公网IP(如1.2.3.4),并分配一个新端口(如56789)。 建立映射 :在NAT表中记录一条映射关系:192.168.1.100:123451.2.3.4:56789
2. 转发请求 NAT → 百度 源IP:1.2.3.4:56789 目标IP:110.242.68.66:80 数据包被发往互联网,此时源地址是合法的公网IP。
3. 返回响应 百度 → NAT 源IP:110.242.68.66:80 目标IP:1.2.3.4:56789 查找映射 :检查数据包的目标地址和端口(1.2.3.4:56789),在NAT表中找到对应的内网记录。
4. 转换并转发 NAT → 内网 源IP:110.242.68.66:80 目标IP:192.168.1.100:12345 地址还原 :将目标IP和端口换回内网地址192.168.1.100:12345,然后将数据包发给你的电脑。

同样的,NAT转化表中也会给每条对应关系带上一个生命周期。

NAPT

如果局域网内有多台主机同时访问同一个外网服务器(例如都访问百度),那么服务器返回的数据包中,目的IP都是NAT路由器的同一个公网IP。在这种情况下,NAT路由器是如何判定将每个返回的数据包正确转发给最初发起请求的那台内网主机的?

答案是NAT路由器不依赖目的IP,而是依赖传输层端口号 或ICMP标识符。它会为每个内网连接分配一个唯一的公网端口,并维护映射表;返回数据包到达时,根据目的端口查表,还原地址后精准转发给对应主机。

当然了,端口数量也是有限的,但是对于普通场景下是不太构成问题的。但端口号真的不足时,可以通过缩短对应关系的生命周期、增加IP地址、改用IPv6等方式来解决。

NAT缺陷

  • 无法主动连接:外网无法主动访问内网服务器(需手动配置端口转发)。

  • 额外开销:转换表的生成、维护、销毁消耗设备资源。

  • 状态依赖:NAT设备故障,所有TCP连接立即中断,无法恢复。

  • 破坏端到端原则:某些嵌入IP地址的协议(如FTP、SIP)需特殊ALG辅助。

  • 性能瓶颈:高并发时成为瓶颈,且易受DDoS攻击(耗尽端口表)。

二、代理服务器

代理服务器就是一个中间人,代表客户端向目标服务器发起请求,并将响应返回给客户端。

正向代理

正向代理服务器代表内网客户端外网目标服务器 发起请求。客户端明确知道代理的存在,并主动将请求发送给代理,由代理转发给真正的目标服务器,目标服务器看到的是代理的IP地址,而非客户端的真实IP。

核心特征

特征 说明
方向 客户端 → 代理 → 外网服务器
客户端感知 需要明确配置代理地址(或通过PAC自动配置)
目标服务器视角 看到的是代理的IP,看不到客户端真实IP
典型用途 突破访问限制、隐藏真实IP、缓存加速、上网行为审计

常见应用场景

  1. 翻墙/突破封锁:访问被屏蔽的国外网站(代理服务器位于境外)

  2. 匿名上网:隐藏自己的真实IP地址

  3. 企业上网管理:员工所有Web请求经过公司正向代理,便于审计、过滤、记录日志

  4. 缓存加速:代理缓存常用资源(如软件镜像站),多人访问时无需重复从外网下载

反向代理

反向代理服务器代表内网服务器 接收来自外网客户端 的请求。客户端无感知代理的存在,直接向目标域名发起请求,实际请求被反向代理拦截并转发给后端的真实服务器,服务器的响应也通过反向代理返回给客户端。

核心特征

特征 说明
方向 外网客户端 → 反向代理 → 内网服务器
客户端感知 完全无感知,客户端认为反向代理就是真正的服务器
真实服务器 隐藏在内网,对外不可见,IP不暴露
典型用途 负载均衡、高可用、SSL终结、缓存加速、安全防护

常见应用场景

场景 说明
负载均衡 反向代理将请求分发到多台后端服务器,分散服务器压力
SSL终结 反向代理处理HTTPS加密解密,后端服务器用HTTP即可,减轻负担
缓存加速 缓存静态内容(如图片、CSS),直接返回,无需请求后端
隐藏真实服务器 只暴露代理IP,后端服务器不直接面对公网,降低攻击风险
灰度发布/蓝绿部署 反向代理按规则将部分请求转发到新版本服务器
统一入口/API网关 微服务架构中,反向代理作为统一入口,路由到不同后端服务

三、内网穿透

内网穿透是指允许外网设备主动访问内网服务的技术。其核心要解决的问题正是NAT最大的缺陷:默认阻止外网主动连接内网。

前面已经知道,内网设备要想访问外网服务,必须经过运营商(或多层)NAT设备的地址转换。NAT设备会为每个主动发起的连接动态创建一个临时的转换表项,将内网私有IP:端口映射为一个临时的公网IP:端口。

那么,我们是否可以利用这个机制反向操作呢?

核心思路是:"利用"NAT的表项规则来实现穿透。 具体做法是:通过一个公网中介服务器,让通信双方提前获取并存储对方经过NAT转换后的临时公网地址(即NAT表项中的映射结果)。随后,双方直接向这个地址发起连接,利用大多数NAT设备"允许来自已连接地址的流量通过"的特性,从而实现外网对内网服务的主动访问。

这种技术就是内网穿透的典型实现方式之一(如UDP打洞)。

内网打洞

内网穿透是更大的目标,还可以通过第三方转发、端口转发等其他方式实现。 而内网打洞是实现内网穿透的一种技术,特指点对点直连、不经第三方转发数据的方式

相关推荐
CDN36011 小时前
节点智能调度实操:解决出海区域访问快慢不均、节点拥堵、跨洋延迟高,CDN 全网择优落地方案
运维·服务器·网络
roman_日积跬步-终至千里11 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
可乐鸡翅yeah_14 小时前
个人 / 外包流媒体项目交付实战,M3U8 验收与问题闭环完整工作流
运维·网络·python·低代码·django·m3u8·在线播放
黄俊懿15 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第十节:网关安全-单向加密
网络·数据库·计算机网络·安全·架构·系统架构·架构师
Patrick在香港15 小时前
Python 拉取城巴开放数据:406 条路线,香港岛巴士网络的数字画像
网络·python·数据分析·php·数据可视化·香港·开放数据
一直C15 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
Experience-摆渡15 小时前
自建 IP 轮换方案实战:健康探测 + 熔断剔除 + 粘性会话
网络·网络协议·tcp/ip
luj_176816 小时前
合法避税与投资评估实战指南
c语言·开发语言·网络·经验分享·算法
库玛西16 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https
暴力求解16 小时前
Linux网络---NAT代理服务、内网穿透
linux·网络·智能路由器