LVS TUN 模式(Tunneling)原理解读笔记
TUN 模式 = IP-in-IP 封装 + 跨网络转发 + RS 直连回包 —— 兼顾性能与灵活性,适合分布式部署。如需我为你生成TUN 模式数据包结构图(Mermaid)完整部署脚本或抓包分析示例(Wireshark),欢迎继续告诉我!
一、基本概念
|
项目 |
说明 |
|
全称 |
Tunneling(IP 隧道模式) |
|
工作层级 |
网络层(Layer 3) |
|
核心机制 |
LVS 调度器(DS)将客户端请求 封装在新的 IP 包中(IP-in-IP),通过隧道发送给后端真实服务器(RS);RS 解封装后处理原始请求,并直接响应客户端。 |
|
回包路径 |
RS 直接响应客户端(不经过 LVS),前提是 RS 有到客户端的路由(通常通过默认网关)。 |
|
关键特点 |
支持 跨子网、跨机房、跨地域 部署 RS |
二、为什么需要 TUN 模式?
- DR 模式限制:要求 DS 与 RS 在同一局域网(二层可达),无法跨子网。
- NAT 模式瓶颈:所有流量经过 LVS,性能受限。
- TUN 模式优势:
跨网络部署
响应不经过 LVS
性能优于 NAT
💡 适用场景:分布式集群、多 IDC 部署、云环境混合架构。
三、工作原理(数据流向)
客户端发起请求
- 客户端(CIP)向 VIP:Port 发送请求。
- 请求到达 LVS 主机(DS),因为 VIP 绑定在 DS 上。
LVS 封装请求(IP-in-IP)
- DS 根据调度算法选择一台 RS。
- 不修改原始 IP 包(源=CIP,目标=VIP)。
- 将整个原始 IP 包作为“载荷”,再套上一层新的 IP 头:
-
- 新源 IP = DIP(LVS 的内网 IP)
- 新目标 IP = RIP(RS 的公网或内网 IP)
📦 封装后结构:
[外层 IP 头:DIP → RIP]
└── [原始 IP 包:CIP → VIP]
└── [TCP/UDP + 数据]
RS 接收并解封装
- RS 收到封装包后,识别为 IPIP 协议(协议号 4)。
- 内核自动剥离外层 IP 头,还原出原始包(CIP → VIP)。
- RS 处理请求(需绑定 VIP,否则丢弃)。
RS 直接响应客户端
- RS 构造响应包:源 IP = VIP,目标 IP = CIP。
- 直接通过自身网关发往客户端(不经过 LVS)。
流程总结:
Client → LVS(封装)→ RS(解封 + 处理)→ Client(直连回包)
四、关键配置要求
|
组件 |
要求 |
|
LVS 主机(DS) |
- 绑定 VIP ) 使用 参数 |
|
真实服务器(RS) |
- 必须绑定 VIP(通常在 或 接口) 内核模块(支持解封装) |
|
网络 |
DS 与 RS 之间需 三层可达(可跨子网、跨公网) |
五、配置示例
1. 在 DS 上配置 LVS 规则(TUN 模式)
# 加载 IPIP 模块(如未加载)
modprobe ipip
# 添加虚拟服务
ipvsadm -A -t 203.0.113.100:80 -s rr
# 添加真实服务器(-i 表示 TUN 模式)
ipvsadm -a -t 203.0.113.100:80 -r 192.168.10.11:80 -i
ipvsadm -a -t 203.0.113.100:80 -r 192.168.20.12:80 -i
2. 在每台 RS 上配置
# 加载 IPIP 模块
modprobe ipip
# 启用 tunl0 接口(用于接收隧道包)
ip link set tunl0 up
# 绑定 VIP(/32,避免路由冲突)
ip addr add 203.0.113.100/32 dev lo
# 抑制 ARP(防止 VIP 冲突)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
⚠️ 注意:某些系统需手动创建 tunl0,但现代 Linux 通常自动创建。
六、TUN 模式的优缺点
|
优点 |
缺点 |
|
支持跨子网、跨机房部署 |
❌ 需要 RS 支持 IPIP 协议(部分云主机禁用) |
|
响应不经过 LVS,扩展性好 |
❌ 配置比 NAT 复杂 |
|
性能优于 NAT(无 SNAT 开销) |
❌ 包大小增加(+20 字节 IP 头),可能触发 MTU 问题 |
|
安全性较高(原始 IP 对 RS 可见) |
❌ 调试困难(需抓包看内外层) |
七、MTU 问题与优化
- 封装后包变大(原始 MTU 1500 → 实际 1520),可能被中间设备丢弃。
- 解决方案:
-
- 在 DS 和 RS 上设置 较小的 MTU(如 1480):
ip link set eth0 mtu 1480
-
- 或启用 TCP MSS 限制:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
八、TUN vs DR vs NAT 对比
|
特性 |
TUN |
DR |
NAT |
|
是否改 IP |
❌(但封装) |
❌ |
✅ |
|
是否改 MAC |
❌ |
✅ |
❌ |
|
是否封装 |
✅(IP-in-IP) |
❌ |
❌ |
|
回包走 LVS |
❌ |
❌ |
✅ |
|
跨子网支持 |
✅ |
❌ |
✅ |
|
性能 |
高 |
⭐最高 |
中 |
|
配置复杂度 |
中 |
高 |
低 |
九、典型应用场景
- 多地部署 Web 集群(如北京 + 上海机房)
- 云上 LVS + 本地 IDC 混合架构
- 需要保留客户端真实 IP(CIP)的场景
- 高可用负载均衡(配合 Keepalived)
总结一句话:
TUN 模式 = IP-in-IP 封装 + 跨网络转发 + RS 直连回包 —— 兼顾性能与灵活性,适合分布式部署。
如需我为你生成 TUN 模式数据包结构图(Mermaid)、完整部署脚本 或 抓包分析示例(Wireshark),欢迎继续告诉我!
更多推荐

所有评论(0)