NAT、TUN、DR 是 LVS(Linux Virtual Server)负载均衡中最经典的三种工作模式(也叫转发模式),它们主要用于将客户端请求分发到后端真实服务器(Real Server,简称 RS)。
TUN 和 DR 很相似 ,两者都属于"三角模式"(Direct Server Return,DSR),即:
- LVS(Director)只处理入站请求(客户端 → LVS → RS)。
- 响应包(RS → 客户端)直接绕过 LVS 返回给客户端(避免 LVS 成为瓶颈)。
- 两者都要求在 RS 上配置 VIP(Virtual IP,虚拟 IP,通常绑定在 lo 接口上,且抑制 ARP 响应)。
它们的主要区别,一个改 IP(隧道层),一个改 MAC(链路层):
1. NAT 模式(Network Address Translation,地址转换)
- 工作原理 :LVS 作为网关,对请求包做 DNAT (改目标 IP 为 RS 的 RIP),响应包再做 SNAT(改源 IP 为 VIP)。
- 请求和响应都经过 LVS。
- 特点 :
- 配置最简单,后端 RS 可以用私有 IP,网关指向 LVS。
- 支持端口映射。
- 缺点:LVS 负载高(进出流量都走它),扩展性差(一般只能带 10-20 台 RS),适合小规模或需要端口映射的场景。
- 适用:后端服务器不在同一网段,或对配置要求低的情况。
2. DR 模式(Direct Routing,直接路由)
- 工作原理 :LVS 只修改请求包的目标 MAC 地址(改为选中 RS 的 MAC),IP 头保持不变(目标 IP 仍是 VIP)。RS 收到后直接用 VIP 作为源 IP 回复客户端。
- 作用在数据链路层(Layer 2)。
- 特点 :
- 性能最好(几乎无额外开销,无隧道封装)。
- LVS 和所有 RS 必须在同一物理网段/局域网(因为改 MAC 需要二层可达)。
- 不支持端口映射。
- 响应包直接返回,LVS 压力最小。
- 适用:高并发、大流量场景(如 Web 服务器集群),互联网公司最常用。
3. TUN 模式(IP Tunneling,IP 隧道)
- 工作原理 :LVS 不修改 原请求包,而是在外面再封装一层 IP 头(源 IP 为 LVS 的 DIP,目标 IP 为 RS 的 RIP)。RS 解封装后处理请求,用 VIP 作为源 IP 直接回复客户端。
- 作用在网络层(Layer 3)。
- 特点 :
- 和 DR 一样,响应包绕过 LVS,性能很高。
- 支持跨网段/不同 VLAN/甚至地理位置不同(因为用 IP 隧道路由)。
- 需要 RS 支持 IP 隧道协议(IPIP 或 GRE),有轻微的封装/解封装开销。
- 不支持端口映射。
- 适用:当 RS 和 LVS 不在同一局域网时(DR 做不到的场景)。
TUN 与 DR 的相似与区别总结(你提到的点)
-
相似之处:
- 都是 DSR(Direct Server Return),只改请求、不改响应。
- 响应包都直接从 RS → 客户端(源 IP 是 VIP)。
- RS 都需要配置隐藏的 VIP(在 lo 接口)。
- 性能都远高于 NAT,适合大规模集群。
- LVS 压力小,可扩展性强。
-
主要区别(正如你说的"一个是 IP 地址,一个是 MAC 地址"):
- DR :修改目标 MAC 地址 (二层转发),简单高效,但必须同网段。
- TUN :封装新 IP 头 (三层隧道),能跨网段/路由,但有隧道开销,且 RS 要支持隧道。
简单比喻:
- DR 像"同一楼层改门牌号(MAC)直接送货"。
- TUN 像"不同楼层/不同小区,用快递箱(隧道)套一层再送"。
实际选择建议
- 首选 DR:同网段 + 高性能需求(最常用)。
- 选 TUN:需要跨网段/不同机房时。
- 用 NAT:配置简单、小规模、或需要端口映射时。
- 还有 Full NAT 等变种,但主流还是这三种。