目录
[1 LVS-TUN模式基础概念解析](#1 LVS-TUN模式基础概念解析)
[1.1 什么是LVS-TUN模式?](#1.1 什么是LVS-TUN模式?)
[1.2 TUN模式与DR、NAT模式的对比](#1.2 TUN模式与DR、NAT模式的对比)
[1.3 TUN模式的工作原理详解](#1.3 TUN模式的工作原理详解)
[2 LVS-TUN模式环境规划与准备](#2 LVS-TUN模式环境规划与准备)
[2.1 环境设计](#2.1 环境设计)
[2.2 系统基础环境配置](#2.2 系统基础环境配置)
[3 LVS-TUN模式详细配置实践](#3 LVS-TUN模式详细配置实践)
[3.1 负载均衡器(Director)配置](#3.1 负载均衡器(Director)配置)
[3.2 真实服务器(Real Server)配置](#3.2 真实服务器(Real Server)配置)
[3.3 高级隧道配置优化](#3.3 高级隧道配置优化)
[4 LVS-TUN模式关键技术深度解析](#4 LVS-TUN模式关键技术深度解析)
[4.1 IP隧道技术原理详解](#4.1 IP隧道技术原理详解)
[4.2 数据包流向深度分析](#4.2 数据包流向深度分析)
[4.3 调度算法与持久连接](#4.3 调度算法与持久连接)
[5 总结](#5 总结)
引言
Linux Virtual Server(LVS)作为开源负载均衡领域的佼佼者,提供了三种核心工作模式:NAT、DR和TUN模式。其中,TUN(IP Tunneling)模式凭借其独特的跨网络部署能力,在分布式场景中展现出无可替代的价值。
LVS-TUN模式通过IP隧道技术打破了传统负载均衡的地理限制,允许真实服务器分布在不同网络环境中,为构建跨地域、跨数据中心的负载均衡系统提供了技术可能。这种模式特别适用于云计算环境、CDN网络和全球分布式系统等场景。
1 LVS-TUN模式基础概念解析
1.1 什么是LVS-TUN模式?
- LVS-TUN模式是LVS的三种工作模式之一,它基于IP隧道(IP Tunneling)技术实现负载均衡
- TUN是"Tunnel"的缩写,这种模式的核心思想是通过封装原始IP数据包,在负载均衡器(Director)和真实服务器(Real Server)之间建立虚拟的通信通道
- 与DR模式不同,TUN模式不要求Director和Real Server位于同一物理网络段
- 通过IP隧道技术,Real Server可以分布在不同的网络位置,甚至跨越公网进行通信,这种架构为分布式系统提供了极大的灵活性
1.2 TUN模式与DR、NAT模式的对比
|---------------|----------|------------|-----------|
| 特性维度 | NAT模式 | DR模式 | TUN模式 |
| 网络要求 | 同一网络段 | 同一网络段 | 可跨不同网络 |
| 性能表现 | 较低(双向处理) | 高(直接返回) | 较高(隧道开销) |
| 配置复杂度 | 简单 | 中等(需ARP抑制) | 复杂(需隧道支持) |
| Real Server位置 | 必须同一网络 | 必须同一网络 | 可分布式部署 |
| 可扩展性 | 有限 | 良好 | 优秀 |
| 适用场景 | 小型集群 | 高性能集群 | 分布式集群 |
1.3 TUN模式的工作原理详解

请求处理阶段:
- 客户端发送请求:客户端向虚拟IP(VIP)发送请求包,源IP为CIP,目标IP为VIP
- Director接收请求:Director在VIP上接收请求包,根据调度算法选择一台Real Server
- IP隧道封装:Director将原始IP数据包封装在新的IP包中,新包源IP为DIP,目标IP为RIP
- 隧道传输:封装后的数据包通过IP网络传输到Real Server
响应处理阶段:- 解封装处理:Real Server接收隧道包,解封装恢复原始数据包(CIP→VIP)
- 请求处理:Real Server处理请求并生成响应数据
- 直接响应:Real Server直接将响应包发送给客户端,源IP为VIP,目标IP为CIP
- 客户端接收:客户端收到响应,认为来自VIP
2 LVS-TUN模式环境规划与准备
2.1 环境设计
|--------|----------|---------------|--------------|----------|
| 角色 | 主机名 | 公网IP | 内网IP | 隧道IP |
| 负载均衡器 | director | 203.0.113.10 | 192.168.1.10 | 10.0.0.1 |
| 真实服务器1 | rs1 | 203.0.113.11 | 192.168.1.11 | 10.0.0.2 |
| 真实服务器2 | rs2 | 198.51.100.22 | 192.168.2.22 | 10.0.0.3 |
| 客户端 | client | 203.0.113.50 | - | - |
网络规划说明:
- 公网IP:模拟互联网环境,Director和Real Server可以通过公网通信
- 内网IP:各节点的内部网络地址
- 隧道IP:用于IP隧道通信的虚拟IP地址段
- VIP(虚拟IP):203.0.113.100,对外提供服务的虚拟IP
2.2 系统基础环境配置
在所有服务器上执行基础配置:
-
步骤1:系统更新和基础软件安装
更新系统包
yum update -y
安装必要工具
yum install -y wget curl vim net-tools iproute tcpdump
关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config停止防火墙(生产环境应配置规则)
systemctl stop firewalld
systemctl disable firewalld -
步骤2:配置主机名和hosts解析
在director上
hostnamectl set-hostname director
在rs1上
hostnamectl set-hostname rs1
在rs2上
hostnamectl set-hostname rs2
配置hosts文件(所有节点)
cat >> /etc/hosts << EOF
203.0.113.10 director
203.0.113.11 rs1
198.51.100.22 rs2
203.0.113.100 www.example.com
EOF -
步骤3:配置网络接口
在director上配置VIP
cd /etc/sysconfig/network-scripts/
cat > ifcfg-eth0:0 << EOF
DEVICE=eth0:0
BOOTPROTO=static
IPADDR=203.0.113.100
NETMASK=255.255.255.255
ONBOOT=yes
EOFsystemctl restart network
3 LVS-TUN模式详细配置实践
3.1 负载均衡器(Director)配置
-
步骤1:安装必要的软件包
安装IPVS管理工具和隧道支持
yum install -y ipvsadm iproute
检查内核隧道支持
modprobe ipip
lsmod | grep ipip永久加载隧道模块
echo "modprobe ipip" >> /etc/rc.local
chmod +x /etc/rc.local -
步骤2:配置IP隧道接口
创建隧道接口tunl0
ip tunnel add tunl0 mode ipip remote any local 203.0.113.10
ip addr add 10.0.0.1/24 dev tunl0
ip link set tunl0 up验证隧道接口
ip addr show tunl0
ip route show table all配置隧道接口持久化
cat > /etc/sysconfig/network-scripts/ifcfg-tunl0 << EOF
DEVICE=tunl0
BOOTPROTO=none
ONBOOT=yes
TYPE=IPIP
PEER_OUTER_IPADDR=any
PEER_INNER_IPADDR=10.0.0.2
MY_INNER_IPADDR=10.0.0.1
MY_OUTER_IPADDR=203.0.113.10
EOF -
步骤3:配置IPVS规则
添加虚拟服务
ipvsadm -A -t 203.0.113.100:80 -s rr
添加真实服务器(通过隧道IP)
ipvsadm -a -t 203.0.113.100:80 -r 10.0.0.2:80 -i
ipvsadm -a -t 203.0.113.100:80 -r 10.0.0.3:80 -i查看IPVS规则
ipvsadm -Ln
保存IPVS规则
ipvsadm-save > /etc/sysconfig/ipvsadm
创建持久化服务
cat > /etc/systemd/system/ipvs-persist.service << EOF
[Unit]
Description=IPVS Rules Persistence
After=network.target[Service]
Type=oneshot
ExecStart=/sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm
ExecStop=/sbin/ipvsadm-save > /etc/sysconfig/ipvsadm
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable ipvs-persist -
步骤4:配置内核参数
启用IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
TUN模式特定参数
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.tunl0.rp_filter = 0" >> /etc/sysctl.conf应用配置
sysctl -p
3.2 真实服务器(Real Server)配置
在每台Real Server上执行以下配置:
-
步骤1:安装Web服务和隧道支持
安装Apache
yum install -y httpd
创建测试页面(在rs1上)
echo "Hello from Real Server 1 - TUN Mode" > /var/www/html/index.html
在rs2上
echo "Hello from Real Server 2 - TUN Mode" > /var/www/html/index.html
启动Web服务
systemctl start httpd
systemctl enable httpd -
步骤2:配置隧道接口
加载IPIP隧道模块
modprobe ipip
创建隧道接口(在rs1上)
ip tunnel add tunl0 mode ipip remote 203.0.113.10 local 203.0.113.11
ip addr add 10.0.0.2/24 dev tunl0
ip link set tunl0 up在rs2上
ip tunnel add tunl0 mode ipip remote 203.0.113.10 local 198.51.100.22
ip addr add 10.0.0.3/24 dev tunl0
ip link set tunl0 up验证隧道接口
ip addr show tunl0
-
步骤3:配置VIP和路由
在环回接口上配置VIP
ip addr add 203.0.113.100/32 dev lo
添加路由,确保响应包通过正确接口
ip route add 203.0.113.100/32 dev lo table local
避免RPF过滤问题
echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter -
步骤4:配置ARP抑制
创建ARP抑制脚本
cat > /etc/init.d/lvs-tun << 'EOF'
#!/bin/bashLVS TUN mode configuration script
VIP=203.0.113.100
case "$1" in
start)
# 配置ARP抑制参数
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce# 添加VIP到lo接口 ip addr add $VIP/32 dev lo # 配置路由 ip route add $VIP/32 dev lo scope host # 禁用RPF过滤 for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $i done ;;
stop)
# 移除VIP
ip addr del $VIP/32 dev lo 2>/dev/null# 恢复ARP参数 echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
EOFchmod +x /etc/init.d/lvs-tun
/etc/init.d/lvs-tun start设置开机自启动
echo "/etc/init.d/lvs-tun start" >> /etc/rc.local
chmod +x /etc/rc.local
3.3 高级隧道配置优化
-
步骤1:配置持久化隧道接口
创建隧道接口配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-tunl0 << EOF
DEVICE=tunl0
BOOTPROTO=none
ONBOOT=yes
TYPE=IPIP
PEER_OUTER_IPADDR=203.0.113.10 # Director公网IP
PEER_INNER_IPADDR=10.0.0.1 # Director隧道IP
MY_INNER_IPADDR=10.0.0.2 # 本地隧道IP
MY_OUTER_IPADDR=203.0.113.11 # 本地公网IP
EOF -
步骤2:配置隧道健康检查
创建隧道监控脚本
cat > /usr/local/bin/tunnel-monitor.sh << 'EOF'
#!/bin/bashTUNNEL_DEV="tunl0"
DIRECTOR_IP="10.0.0.1"
CHECK_INTERVAL=30while true; do
if ! ping -c 1 -W 1 -I TUNNEL_DEV DIRECTOR_IP &> /dev/null; then
logger "LVS-TUN: Tunnel is down, attempting to restart"
ip link set TUNNEL_DEV down ip link set TUNNEL_DEV up
sleep 5
fi
sleep $CHECK_INTERVAL
done
EOFchmod +x /usr/local/bin/tunnel-monitor.sh
创建systemd服务
cat > /etc/systemd/system/tunnel-monitor.service << EOF
[Unit]
Description=LVS TUN Tunnel Monitor
After=network.target[Service]
Type=simple
ExecStart=/usr/local/bin/tunnel-monitor.sh
Restart=always[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable tunnel-monitor
systemctl start tunnel-monitor
4 LVS-TUN模式关键技术深度解析
4.1 IP隧道技术原理详解
IP隧道是TUN模式的核心技术,理解其工作原理对于故障排查和性能优化至关重要。
封装过程分析:
- 原始数据包:CIP → VIP (TCP端口80)
- 封装后数据包:DIP → RIP (IP协议号4),内部包含原始数据包
- 协议号4:表示IP-in-IP封装,这是IP隧道的标准协议号
解封装过程:- Real Server收到DIP→RIP的数据包
- 内核识别协议号为4,进行IP-in-IP解封装
- 提取出原始数据包CIP→VIP,交给上层协议处理
4.2 数据包流向深度分析
-
在Director上抓包分析:
查看原始请求和隧道封装
tcpdump -i any -n host 203.0.113.100
同时查看eth0和tunl0接口
tcpdump -i eth0 -n host 203.0.113.10
tcpdump -i tunl0 -n -
在Real Server上抓包分析:
查看隧道包和解封装后的包
tcpdump -i eth0 -n ip proto 4
tcpdump -i tunl0 -n
tcpdump -i lo -n host 203.0.113.100
4.3 调度算法与持久连接
-
调度算法选择建议:
查看支持的调度算法
cat /proc/net/ip_vs_schedulers
根据场景选择算法
ipvsadm -E -t 203.0.113.100:80 -s wlc # 加权最少连接
ipvsadm -E -t 203.0.113.100:80 -s sh # 源地址哈希(会话保持) -
持久连接配置:
设置持久连接超时(秒)
ipvsadm -E -t 203.0.113.100:80 -p 3600
基于客户端IP的持久性
ipvsadm -A -t 203.0.113.100:80 -s sh -p 3600
5 总结
LVS-TUN模式作为一种先进的负载均衡解决方案,通过IP隧道技术实现了跨网络边界的服务器集群部署。与DR模式相比,TUN模式的最大优势在于支持分布式部署,适用于云计算、CDN等需要跨地域负载均衡的场景。然而,这种灵活性也带来了配置复杂性和性能开销的增加。
在实际应用中,建议根据具体业务需求选择合适的工作模式。对于同数据中心的集群,DR模式可能是更优选择;而对于分布式环境,TUN模式则展现出其独特价值。