LVS NAT 模式

🚀 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 网络、负载均衡、云原生干货!

相关推荐
东北甜妹6 小时前
LVS-DR模式配置
lvs
Ap041514 天前
LVS介绍以及模式实现
lvs
天蓝不会忘记0214 天前
lvs,haproxy,keepalived,nginx,tomcat介绍和实验
nginx·tomcat·lvs
qizhideyu14 天前
LVS(Linux virual server)
linux·运维·lvs
在这habit之下14 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
Yiiz.14 天前
LVS实验
lvs
️️(^~^)14 天前
LVS实验
linux·服务器·lvs
gx234814 天前
1-LVS
linux·服务器·lvs
unfeeling_14 天前
LVS实验
lvs