🚀 LVS NAT 模式全景解析:从数据包流转到底层原理
"负载均衡不是魔法,而是对网络协议的精准操控。"
------ 本文带你彻底搞懂 LVS 最经典的工作模式:NAT 模式
📌 一、什么是 LVS NAT 模式?
LVS(Linux Virtual Server) 是 Linux 内核自带的四层负载均衡器,支持三种工作模式:
- NAT 模式(Network Address Translation)
- DR 模式(Direct Routing)
- TUN 模式(IP Tunneling)
其中,NAT 模式是最早实现、最易理解、部署最简单的一种 。它通过修改数据包的 源/目标 IP 地址,实现请求转发与响应回传,适用于小规模集群或跨网段场景。
🖼️ 二、架构图解:NAT 模式下的数据流

[Client] → [Internet] → [LVS (VIP/DIP)] → [Switch] → [RS1 / RS2]
↑ ↓
└─────── 响应包原路返回 ─────┘
🔹 图中关键元素说明:
| 组件 | IP 地址 | 角色 |
|---|---|---|
| Client | 49.89.179.13 |
发起请求的客户端 |
| LVS | VIP: 219.142.145.239 DIP: 192.168.10.123 |
负载均衡器,对外提供 VIP,对内管理 RS |
| RS-1 | 192.168.10.110 |
真实服务器 1 |
| RS-2 | 192.168.10.120 |
真实服务器 2 |
| 交换机 | - | 连接 LVS 和 RS 的内网设备 |
💡 注意:所有 RS 的网关必须指向 LVS 的 DIP,这是 NAT 模式能正常工作的前提!
🔄 三、数据包完整生命周期(双向转换)
我们分"请求"和"响应"两个阶段,逐层拆解数据包的变化。
➤ 阶段一:客户端发送请求 → LVS 接收
原始请求包(Client → LVS):
Src IP: 49.89.179.13 (客户端)
Dst IP: 219.142.145.239 (VIP)
Src Port: 54321
Dst Port: 80
→ 数据包到达 LVS,触发 DNAT 规则。
➤ 阶段二:LVS 执行 DNAT(Destination NAT)
LVS 根据调度算法(如轮询、最小连接等)选择一个 RS(比如 RS-1),然后:
✅ 修改目标 IP:
原 Dst IP: 219.142.145.239 → 新 Dst IP: 192.168.10.110 (RS-1)
❗ 不修改源 IP(此时还未做 SNAT):
Src IP: 49.89.179.13 (保持不变)
转发包(LVS → RS-1):
Src IP: 49.89.179.13
Dst IP: 192.168.10.110
Src Port: 54321
Dst Port: 80
→ 数据包被发送到内网,由交换机送达 RS-1。
➤ 阶段三:RS 处理请求并生成响应
RS-1 收到包后:
- 检查目标 IP 是自己(
192.168.10.110)→ 接受 - 处理业务逻辑(如 Web 服务)
- 构造响应包:
响应包(RS-1 → LVS):
Src IP: 192.168.10.110 (RS-1 的 RIP)
Dst IP: 49.89.179.13 (客户端)
Src Port: 80
Dst Port: 54321
⚠️ 注意:这个包的源 IP 是 RS 的私有 IP,如果直接发给客户端,客户端会丢弃(因为不认识这个 IP)。
所以------必须经过 LVS 做 SNAT!
➤ 阶段四:LVS 执行 SNAT(Source NAT)
LVS 收到 RS 的响应包后,执行反向转换:
✅ 修改源 IP:
原 Src IP: 192.168.10.110 → 新 Src IP: 219.142.145.239 (VIP)
❗ 不修改目标 IP:
Dst IP: 49.89.179.13 (保持不变)
最终响应包(LVS → Client):
Src IP: 219.142.145.239 (伪装成 VIP)
Dst IP: 49.89.179.13 (客户端)
Src Port: 80
Dst Port: 54321
→ 客户端收到响应,认为是一直在和 VIP 通信,完全无感知!
🧩 四、OSI 层级变化对比表
| 层级 | 字段 | 请求包(Client→LVS) | 转发包(LVS→RS) | 响应包(RS→LVS) | 最终响应(LVS→Client) |
|---|---|---|---|---|---|
| 应用层 | Data | GET /index.html |
GET /index.html |
HTTP 200 OK |
HTTP 200 OK |
| 传输层 | Port | Sport:54321, Dport:80 |
Sport:54321, Dport:80 |
Sport:80, Dport:54321 |
Sport:80, Dport:54321 |
| 网络层 | IP | Src:C, Dst:VIP |
Src:C, Dst:RIP ✅ DNAT |
Src:RIP, Dst:C |
Src:VIP, Dst:C ✅ SNAT |
| 链路层 | MAC | Dst:LVS_MAC |
Dst:RS_MAC |
Dst:LVS_MAC |
Dst:Client_GW_MAC |
✅ 结论 :NAT 模式修改了网络层的 IP 地址(DNAT + SNAT),因此会影响加密协议(如 HTTPS)、Cookie、Session 等依赖 IP 的应用层特性。
⚙️ 五、NAT 模式配置要点
1️⃣ LVS 侧配置
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 添加虚拟服务(VIP:80)
ipvsadm -A -t 219.142.145.239:80 -s wrr
# 添加真实服务器(RIP:80)
ipvsadm -a -t 219.142.145.239:80 -r 192.168.10.110:80 -w 1
ipvsadm -a -t 219.142.145.239:80 -r 192.168.10.120:80 -w 1
2️⃣ RS 侧配置
# 设置默认网关为 LVS 的 DIP(至关重要!)
route add default gw 192.168.10.123
# 可选:关闭防火墙或放行 80 端口
iptables -F
❗ 如果 RS 的网关不是 LVS,响应包将无法回到 LVS,导致客户端收不到响应!
🆚 六、NAT vs DR 模式对比速查表
| 特性 | NAT 模式 | DR 模式 |
|---|---|---|
| 是否改 IP | ✅ 改(DNAT + SNAT) | ❌ 不改 IP,只改 MAC |
| 响应是否经 LVS | ✅ 是 | ❌ 否 |
| 性能 | ⭐⭐⭐ 中等(LVS 成瓶颈) | ⭐⭐⭐⭐⭐ 极高 |
| 是否支持端口映射 | ✅ 是(如 80→8080) | ❌ 否 |
| 是否支持跨网段 | ✅ 是 | ❌ 否(需同广播域) |
| 是否需要 ip_forward | ✅ 是 | ❌ 否 |
| 应用场景 | 小规模、复杂协议、跨网段 | 高性能 Web、API、同局域网 |
🎯 七、总结:NAT 模式的价值与局限
✅ 优势:
- 部署简单,无需特殊网络拓扑
- 支持端口映射、协议透明(除加密外)
- 适合测试环境、小型生产集群
❌ 劣势:
- 所有流量(请求+响应)都经过 LVS → 成为性能瓶颈
- 修改 IP 导致 HTTPS、FTP 等协议可能失效
- 需要 RS 网关指向 LVS → 增加单点故障风险
💡 八、延伸思考
- 如果你想突破 NAT 的性能瓶颈?→ 学习 DR 模式
- 如果你需要跨数据中心负载均衡?→ 学习 TUN 模式
- 如果你想结合 Keepalived 实现高可用?→ 下一篇预告!
📎 附录:常用调试命令
# 查看 IPVS 规则
ipvsadm -Ln
# 查看连接跟踪
conntrack -L
# 抓包验证 NAT 转换
tcpdump -i any host 219.142.145.239 -nn
# 检查路由表
ip route show
📣 结语
LVS NAT 模式虽然古老,但它是理解负载均衡底层机制的最佳入口。掌握它,你就掌握了"如何欺骗客户端"、"如何让后端服务器隐身"的网络艺术。
下一期,我们将深入 DR 模式,揭秘"只改 MAC 地址"的高性能奇迹!
✅ 喜欢本文?欢迎点赞、收藏、转发!
📬 关注我,获取更多 Linux 网络、负载均衡、云原生干货!