NAT、TUN、DR三种模式

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 等变种,但主流还是这三种。
相关推荐
代码中介商1 小时前
Linux TCP 协议深度解析:从状态机到拥塞控制
linux·网络·tcp/ip
落羽的落羽1 小时前
【网络】TCP与UDP协议使用指南,Socket编程实现Echo服务
linux·服务器·网络·c++·网络协议·tcp/ip·机器学习
风落无尘10 小时前
《智能重生:从垃圾堆到AI工程师》——第五章 代码与灵魂
服务器·网络·人工智能
其实防守也摸鱼13 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
xlq2232214 小时前
50.UDP套接字
网络·网络协议·udp
南境十里·墨染春水14 小时前
linux学习笔记 网络编程——Socket入门与TCP客户端/服务器实现
linux·服务器·网络
qq_三哥啊15 小时前
【mitmproxy】通过 mitmproxy 的HTTP代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·http·代理模式
nikolay15 小时前
AI重塑企业信息安全:攻防升级与信任重构
网络·人工智能·网络安全
Yupureki15 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp
wapicn9916 小时前
设置好这一步,让你的SSL证书在到期前自动续期,永不过期
网络·网络协议·ssl