LVS DR 模式(Direct Routing)

1. 核心概念与前提

在深入 DR 模式之前,必须明确 NAT 与 DR 的根本区别,以及"视角"的重要性。

🔹 关键定义:站在"请求包"的角度

  • DNAT (Destination NAT) :修改请求包的目标 IP(通常用于将 VIP 流量转发给 RS)。
  • SNAT (Source NAT) :修改请求包的源 IP(通常用于让响应包能正确返回)。
  • DR 模式的特殊性
    • 不改 IP :DR 模式既不进行 DNAT,也不进行 SNAT
    • 只改 MAC :它仅在链路层修改目标 MAC 地址
    • 视角统一 :无论请求还是响应,我们讨论的"转换行为"均基于客户端发出的原始请求包来定义。在 DR 模式中,这个包在网络层(IP)是完全透明的。

2. 架构拓扑与组件角色

🏗️ 网络结构图

📋 组件职责

组件 IP 配置 关键行为
Client 公网 IP 发起请求,目标为 VIP。
LVS (Director) VIP (物理网卡) DIP (内网网卡) 1. 响应 VIP 的 ARP 请求。 2. 接收请求包,根据算法选择 RS。 3. 仅修改目标 MAC 为选中 RS 的 MAC。 4. 转发给交换机。
RS (Real Server) RIP (物理网卡) VIP (Lo 回环接口) 1. 不响应 VIP 的 ARP 请求(静默)。 2. 接收目标 MAC 为自己、目标 IP 为 VIP 的包。 3. 处理业务。 4. 直接通过默认网关将响应包发回 Client(不经过 LVS)。

3. 数据包流转深度解析

🔄 完整生命周期(以 HTTP 请求为例)

阶段一:请求进入 (Client → LVS)
  • 动作:Client 发送 HTTP 请求。
  • 数据包特征
    • Src IP: 49.89.179.13 (Client)
    • Dst IP: 219.142.145.239 (VIP)
    • Dst MAC: LVS 的 MAC (因为 LVS 响应了 ARP)
  • 结果:数据包被路由到 LVS。
阶段二:LVS 调度 (LVS 内部处理)
  • 动作:LVS 收到包,发现目标是 VIP,查找调度表选中 RS-1。
  • 核心操作改写链路层头部
    • Src IP: 不变 (49.89.179.13)
    • Dst IP: 不变 (219.142.145.239)
    • Src MAC: 改为 LVS 的 DIP MAC (可选,通常是 LVS 出口 MAC)
    • Dst MAC: 改为 RS-1 的 MAC
  • 结果:数据包被扔回局域网,交换机根据 MAC 表直接转发给 RS-1。
阶段三:RS 处理 (RS-1 接收)
  • 动作:RS-1 网卡收到帧,检查 MAC 匹配。向上递交给 IP 层。
  • IP 层检查 :发现 Dst IP219.142.145.239
    • 正常情况:如果本机没有这个 IP,会丢弃。
    • DR 特配 :RS-1 的 lo:0 接口绑定了该 VIP,且内核参数允许接收(arp_ignore 设置得当),因此接受并处理
  • 业务处理:Web 服务生成响应数据。
阶段四:响应返回 (RS-1 → Client)
  • 动作:RS-1 构造响应包。
  • 数据包特征
    • Src IP: 219.142.145.239 (VIP) ------ 伪装成 VIP 回复
    • Dst IP: 49.89.179.13 (Client)
    • Gateway: RS-1 的默认网关(指向真实路由器,不是 LVS
  • 结果 :响应包绕过 LVS,直接经由交换机/路由器返回给 Client。

4. OSI 模型层级变化对比

这是理解 DR 模式高性能的关键:除了链路层,其他层完全透明。

OSI 层级 字段 原始包 (Client→LVS) 转发包 (LVS→RS) 响应包 (RS→Client) 变化情况
应用层 Data GET /index.html GET /index.html HTTP 200 OK ❌ 不变
传输层 Port Sport: 54321, Dport: 80 Sport: 54321, Dport: 80 Sport: 80, Dport: 54321 ❌ 不变
网络层 IP Src: Client, Dst: VIP Src: Client, Dst: VIP Src: VIP, Dst: Client 完全不变 (请求阶段)
链路层 MAC Dst: LVS_MAC Dst: RS_MAC Dst: Router_MAC 唯一改变点

💡 结论:因为不修改 IP 和端口,DR 模式支持所有基于 TCP/UDP 的应用,包括加密流量(HTTPS),且性能损耗极低。


5. 核心难点:ARP 风暴与抑制机制

DR 模式成败的关键在于:如何确保只有 LVS 响应 VIP 的 ARP 请求?

⚠️ 问题场景

如果 RS 也响应了 "Who has VIP?" 的 ARP 请求:

  1. 客户端或路由器可能会学到 RS 的 MAC 地址。
  2. 后续请求直接发给 RS,绕过 LVS。
  3. 后果:负载均衡失效,且由于 RS 可能未建立连接状态,导致丢包或连接重置。

🛡️ 解决方案:内核参数调优 (在 RS 上执行)

必须在所有 RS 上配置以下参数,实现 "ARP 隐藏"

1. 禁止响应 ARP 请求 (arp_ignore)
复制代码
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  • 含义 :只有当目标 IP 地址是接收网卡的主 IP时,才响应 ARP 请求。
  • 效果 :当 ARP 请求询问 VIP 时,RS 发现 VIP 绑定在 lo (回环) 接口,而请求是从 eth0 进来的,主 IP 是 RIP,因此不响应
2. 禁止主动宣告 ARP (arp_announce)
复制代码
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • 含义 :在发送 ARP 响应时,总是使用最佳本地地址(即接口的主 IP),而不是别名 IP(VIP)。
  • 效果:防止 RS 在任何情况下意外暴露 VIP 的 MAC 地址。
3. 实践中的 VIP 绑定

在 RS 上将 VIP 绑定到 lo:0,并设置为 /32 掩码:

复制代码
ifconfig lo:0 219.142.145.239 netmask 255.255.255.255 up
route add -host 219.142.145.239 dev lo:0

6. DR 模式优缺点总结

✅ 优点

  1. 高性能:LVS 只处理入站请求,出站响应由 RS 直接处理,LVS 几乎无瓶颈。
  2. 透明性:不修改 IP 和端口,支持任何应用协议(HTTP, HTTPS, FTP, MySQL 等)。
  3. 成本低:RS 可以是任何操作系统,无需特殊软件,只需内核参数调整。
  4. 扩展性强:理论上可支撑数万台后端服务器(受限于二层网络规模)。

❌ 缺点/限制

  1. 同网段限制 :LVS 和 RS 必须在同一物理网络(同一 VLAN/广播域),不能跨路由器(因为依赖 MAC 地址转发)。
  2. 配置复杂:需要在每台 RS 上手动配置 VIP 和 ARP 抑制参数。
  3. 不支持端口映射:无法像 NAT 模式那样将外部 80 端口映射到内部 8080 端口。

7. 快速部署检查清单 (Checklist)

在上线前,请逐项核对:

  • 网络拓扑:确认 LVS 和所有 RS 在同一交换机/VLAN 下。
  • LVS 配置
    • VIP 绑定在物理网卡。
    • 开启 IP 转发 (net.ipv4.ip_forward = 1)。
    • 配置 ipvsadm 规则。
  • RS 配置
    • VIP 绑定在 lo:0,掩码 /32
    • 关键 :已设置 arp_ignore=1arp_announce=2
    • 关键 :默认网关指向真实路由器,绝不能指向 LVS 的 DIP。
  • 验证测试
    • 在 Client 端 ping VIP,检查 ARP 缓存,确认 MAC 地址属于 LVS 而非 RS。
    • 在 LVS 和 RS 上同时 tcpdump,确认请求包 MAC 被改写,响应包不经过 LVS。
相关推荐
lulukanshijie5 分钟前
Packer 入门:自动化镜像构建工具
运维·其他·自动化
苦逼大学生被编程薄纱7 分钟前
Ext 文件系统基础:Linux 存储基石入门(下)
linux·运维·服务器
Lumos_77710 分钟前
Linux -- 进程
linux·运维·服务器
南境十里·墨染春水30 分钟前
linux学习进展 进程间通讯——共享内存
linux·数据库·学习
李白你好1 小时前
RedTeam-Agent无需手动操作,AI 接管所有渗透工具,让安全测试真正自动化
运维·人工智能·自动化
小此方1 小时前
Re:Linux系统篇(五)指令篇 ·四:shell外壳程序及其工作原理
linux·运维·服务器
其实防守也摸鱼1 小时前
sqlmap下载和安装保姆级教程(附安装包)
linux·运维·服务器·测试工具·渗透测试·攻防·护网行动
jingyu飞鸟2 小时前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_7772 小时前
Linux -- exec 进程替换
linux·运维·chrome
李白客2 小时前
国产数据库选型指南:从技术路线到实战要点
运维·数据库·数据库架构·迁移学习