一、NAT技术
1.1 NAT 转换表
NAT 设备(路由器/防火墙)内部维护一张状态表,表中每一条记录通常包含以下五元组信息:
| 字段 | 说明 |
|---|---|
| 内网 IP | 私有源地址 (如 192.168.1.100) |
| 内网端口 | 私有源端口 (如 54321) |
| 公网 IP | 转换后的全局地址 (如 203.0.113.1) |
| 公网端口 | 转换后的全局端口 (如 62000) |
| 协议类型 | TCP / UDP / ICMP 等 |
1.2 数据包处理流程
1.2.1 出站方向
当内网主机发起连接时,NAT 设备按以下步骤处理:
路由决策:确认数据包需要从 NAT 接口转发出去。
查表匹配:用 (内网IP, 内网端口, 目标IP, 目标端口, 协议) 查询现有表项。
命中:直接使用已有映射,执行地址/端口替换。
未命中:判定为新会话,进入下一步。
分配资源:从可用端口池中选择一个未被占用的公网端口。若使用多公网 IP 池,还需选择 IP 地址。
改写报文头:
将源 IP 替换为选定的公网 IP。
将源端口替换为选定的公网端口。
重新计算校验和:由于 IP 和端口发生变化,必须重新计算 IP 头部校验和、TCP/UDP 校验和(以及增量更新)。
创建表项:将新映射写入 NAT 表,启动超时计时器。
转发:将修改后的数据包送入出接口队列。
1.2.2 入站方向
当公网响应包到达 NAT 设备时:
查表匹配:用 (公网IP, 公网端口, 源IP, 源端口, 协议) 反向查询 NAT 表。
命中处理:
将目标 IP 还原为内网 IP。
将目标端口还原为内网端口。
重新计算校验和。
刷新该表项的超时计时器。
根据内网 IP 查找路由表,转发至内网。
未命中处理:若无对应表项且无静态映射规则,默认丢弃该数据包(这就是 NAT 天然阻挡外部主动连接的原因)。
1.2.3 完整流程
二、代理服务器
代理服务器是:位于客户端与目标服务器之间的中间服务器。
客户端不直接访问目标资源,而是将请求发送给代理服务器,由代理服务器代为请求,再将结果返回给客户端。
2.1 正向代理
【正向代理】—— 代理"客户端" 用户 ──→ [正向代理] ──→ 互联网(各种网站) 目的:帮用户访问外部资源(翻墙、匿名、绕过限制)
工作流程
1. 客户端配置代理地址(如 192.168.1.100:8080) 2. 客户端发起请求 → 目标: proxy:8080,请求体中携带目标URL 3. 代理服务器解析目标URL 4. 代理服务器向目标服务器发起请求 5. 目标服务器返回响应给代理 6. 代理将响应转发给客户端
2.2 反向代理
【反向代理】—— 代理"服务端" 用户 ──→ [反向代理] ──→ 内部服务器集群(A、B、C...) 目的:保护后端、负载均衡、缓存加速
反向代理工作流程
1. 客户端正常发起请求 → 目标: proxy:80(客户端不知道代理存在) 2. 反向代理接收请求 3. 根据规则(URL、Header、负载均衡算法)选择后端服务器 4. 代理向后端服务器转发请求(可能修改/添加Header) 5. 后端返回响应 6. 代理将响应返回给客户端
三、内网穿透
3.1 内网穿透的认识
内网穿透:将处于NAT/防火墙之后的内网设备或服务,通过某种技术手段暴露给公网用户访问的技术统称。
为什么需要内网穿透:让公网用户访问到私有ip的服务。
公网用户想访问你家里的电脑: 公网用户(8.8.8.8) ──→ ??? ──→ 你的电脑(192.168.1.100) 问题所在: ┌─────────────────────────────────────────────────────────┐ │ 1. 你的电脑没有公网IP(运营商分配的是内网IP或NAT后地址) │ │ 2. 192.168.1.100 是私有地址,公网路由不可达 │ │ 3. 路由器/防火墙默认拒绝入站连接 │ │ 4. 即使有公网IP,防火墙也会拦截未授权的入站请求 │ └─────────────────────────────────────────────────────────┘
网络层级:
┌──────────────────────────────────────────────────────────────┐ │ 公网 (Internet) │ │ 公网IP: 203.0.113.1 │ └───────────────────────────┬──────────────────────────────────┘ │ WAN口 ┌────────▼────────┐ │ 家庭路由器 │ ← NAT设备 │ 192.168.1.1 │ └────────┬────────┘ │ LAN口 ┌─────────────┼─────────────┐ │ │ │ ┌────────▼───┐ ┌─────▼──────┐ ┌──▼─────────┐ │ 电脑 │ │ NAS │ │ 智能家居 │ │192.168.1.2 │ │192.168.1.3 │ │192.168.1.4 │ └────────────┘ └────────────┘ └────────────┘ 这些私有地址(192.168.x.x / 10.x.x.x / 172.16~31.x.x) 公网完全无法直接路由到达
3.2 内网穿透的原理
核心原理: 内网设备【主动】向公网服务器建立【出站】连接(NAT允许出站) 然后利用这条已建立的连接,反向传输外部请求 ┌──────────┐ ┌──────────────────┐ ┌──────────┐ │ 公网用户 │ │ 公网中继服务器 │ │ 内网设备 │ │ │ │ (有公网IP) │ │ │ │ │────────→│ │←────────│ │ │ 请求 │ ②访问 │ s通过已有隧道 │ ①主动 │ 服务 │ │ │ │ 转发请求 │ 连接 │ │ │ │←────────│ │────────→│ │ │ 响应 │ ⑥返回 │ ⑤返回响应 │ ④处理 │ 响应 │ └──────────┘ └──────────────────┘ └──────────┘ 关键:步骤③是内网设备【主动发起】的出站连接 NAT对此完全放行(因为NAT允许出站) 之后所有通信都复用这条连接