一、基本概念

项目

说明

全称

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
- 开启 IPIP 模块(modprobe ipip


- 配置 ipvsadm

使用 -i

参数

真实服务器(RS)

- 必须绑定 VIP(通常在 lo

tunl0

接口)
- 加载 ipip

内核模块(支持解封装)
- 抑制 ARP 响应(同 DR 模式)
- 有到客户端的路由(一般设默认网关即可)

网络

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),欢迎继续告诉我!


 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐