【LVS入门宝典】LVS-TUN模式配置实战以及配置关键点:Real Server的路由表调整、ipip模块加载
目录
引言
1 LVS-TUN模式架构回顾与关键配置概览
1.1 TUN模式工作原理回顾
1.2 关键配置点总览
2 ipip内核模块深度解析与配置实战
2.1 ipip模块工作原理
2.2 ipip模块加载实战配置
2.3 ipip模块故障排查
3 Real Server路由表调整深度解析
3.1 TUN模式路由表特殊性分析
3.2 路由表调整实战配置
3.3 高级路由配置技巧
4 完整LVS-TUN模式配置实战
4.1 环境规划与准备
4.2 Director完整配置
4.3 Real Server完整配置
5 关键配置点故障排查与优化
5.1 ipip模块故障排查
5.2 路由表配置验证
5.3 性能优化配置
6 总结
引言
LVS(Linux Virtual Server)作为业界领先的负载均衡解决方案,其TUN(IP Tunneling)模式凭借独特的跨子网能力,在复杂网络环境中展现出卓越的适应性。然而,TUN模式的配置复杂度远高于其他模式,特别是Real Server的路由表调整和ipip模块加载等关键环节,往往成为实施过程中的难点和故障高发区。在实际生产环境中,许多运维团队在部署LVS-TUN模式时都会遇到类似的问题:为什么Real Server无法正确响应客户端请求?为什么隧道建立成功但数据包无法正常传输?这些问题的根源往往在于对路由表调整和内核模块加载等基础但关键的配置理解不够深入。
1 LVS-TUN模式架构回顾与关键配置概览
1.1 TUN模式工作原理回顾
LVS-TUN模式基于IP隧道技术,通过将客户端请求包封装在新的IP包中实现跨网络传输。其核心工作流程如下:
- 客户端请求:客户端向VIP发送请求包(CIP→VIP)
- Director封装:Director接收请求,通过IP隧道封装(DIP→RIP,协议号4)
- 隧道传输:封装包通过网络传输到Real Server
- Real Server解封装:Real Server解封装,处理原始请求(CIP→VIP)
- 直接响应:Real Server直接响应客户端(VIP→CIP)
1.2 关键配置点总览
在TUN模式配置中,以下几个关键点需要特别关注:
- ipip内核模块加载:确保系统支持IP隧道功能
- 隧道接口配置:正确创建和配置tunl0接口
- Real Server路由表调整:确保响应包正确路由
- ARP抑制配置:避免IP地址冲突
- 防火墙规则:允许隧道流量通过

2 ipip内核模块深度解析与配置实战
2.1 ipip模块工作原理
ipip模块是Linux内核提供的IP-in-IP隧道实现,它允许将一个IP数据包封装在另一个IP数据包中传输。在LVS-TUN模式中,ipip模块负责处理数据包的封装和解封装操作。
2.2 ipip模块加载实战配置
- 步骤1:检查内核支持情况
# 检查当前内核是否支持ipip模块
uname -r
# 输出示例:3.10.0-1160.el7.x86_64# 查看可用的隧道模块
find /lib/modules/$(uname -r) -name "*tunnel*" -o -name "*ipip*"# 检查模块依赖关系
modinfo ipip
- 步骤2:手动加载ipip模块
# 手动加载ipip模块
modprobe ipip# 验证模块加载状态
lsmod | grep ipip# 查看模块详细信息
modinfo ipip# 检查隧道接口支持
ip tunnel help
- 步骤3:配置模块自动加载
# 方法1:使用modules-load.d配置
echo "ipip" > /etc/modules-load.d/ipip.conf# 方法2:修改modprobe配置
echo "install ipip /sbin/modprobe --ignore-install ipip" > /etc/modprobe.d/ipip.conf# 方法3:直接添加到modules文件
echo "ipip" >> /etc/modules# 验证配置
systemctl restart systemd-modules-load
lsmod | grep ipip
- 步骤4:模块参数调优(可选)
# 查看可配置参数
modinfo ipip | grep parm# 设置模块参数(如果需要)
echo "options ipip log_level=2" > /etc/modprobe.d/ipip-options.conf# 重新加载模块
modprobe -r ipip
modprobe ipip
2.3 ipip模块故障排查
- 常见问题1:模块加载失败
# 检查内核配置
zcat /proc/config.gz | grep IPIP
# 或者
grep CONFIG_NET_IPIP /boot/config-$(uname -r)# 如果内核不支持,需要重新编译内核或使用支持的内核版本
- 常见问题2:模块依赖缺失
# 检查依赖模块
modprobe tunnel4
modprobe ip_tunnel# 手动加载所有依赖
modprobe -v ipip# 查看模块依赖关系
depmod -a
3 Real Server路由表调整深度解析
3.1 TUN模式路由表特殊性分析
在LVS-TUN模式中,Real Server的路由表配置尤为关键,原因在于:
- 非对称路由:请求包通过隧道到达,响应包直接返回客户端
- 多IP地址:Real Server同时拥有RIP、VIP和隧道IP
- 路由决策:需要确保响应包使用正确的源IP和出口接口
3.2 路由表调整实战配置
- 步骤1:查看当前路由表状态
# 查看完整路由表
route -n
# 或者使用ip命令
ip route show
ip route show table all# 查看路由缓存
ip route show cache# 查看策略路由
ip rule show
- 步骤2:配置VIP路由
# 添加VIP到lo接口
ip addr add 203.0.113.100/32 dev lo# 添加主机路由,确保VIP流量本地处理
ip route add 203.0.113.100/32 dev lo scope host# 验证路由配置
ip route get 203.0.113.100
# 预期输出:local 203.0.113.100 dev lo src 203.0.113.100 uid 0# 永久化配置(CentOS/RHEL)
cat >> /etc/sysconfig/network-scripts/route-lo << EOF
203.0.113.100/32 dev lo scope host
EOF
- 步骤3:配置响应包路由策略
# 创建自定义路由表
echo "200 lvs_tun" >> /etc/iproute2/rt_tables# 添加路由规则,确保响应包使用VIP作为源IP
ip rule add from 203.0.113.100/32 table lvs_tun
ip route add default via 198.51.100.1 dev eth0 table lvs_tun
ip route add 198.51.100.0/24 dev eth0 scope link table lvs_tun# 验证策略路由
ip rule show
ip route show table lvs_tun
- 步骤4:配置路由持久化
# 创建路由配置脚本
cat > /etc/init.d/lvs-tun-route << 'EOF'
#!/bin/bash
#
# LVS TUN模式路由配置脚本
#VIP=203.0.113.100
GATEWAY=198.51.100.1
DEVICE=eth0case "$1" in
start)# 添加VIP路由ip addr add $VIP/32 dev lo 2>/dev/nullip route add $VIP/32 dev lo scope host 2>/dev/null# 配置策略路由ip rule add from $VIP/32 table lvs_tun 2>/dev/nullip route add default via $GATEWAY dev $DEVICE table lvs_tun 2>/dev/nullip route add 198.51.100.0/24 dev $DEVICE scope link table lvs_tun 2>/dev/null;;
stop)# 清理路由配置ip route del $VIP/32 dev lo scope host 2>/dev/nullip addr del $VIP/32 dev lo 2>/dev/nullip rule del from $VIP/32 table lvs_tun 2>/dev/nullip route flush table lvs_tun 2>/dev/null;;
*)echo "Usage: $0 {start|stop}"exit 1;;
esac
EOFchmod +x /etc/init.d/lvs-tun-route
/etc/init.d/lvs-tun-route start# 设置开机自启动
chkconfig --add lvs-tun-route
chkconfig lvs-tun-route on
3.3 高级路由配置技巧
- 多VIP场景路由配置:
# 多个VIP的路由配置
VIP_LIST="203.0.113.100 203.0.113.101 203.0.113.102"for vip in $VIP_LIST; doip addr add $vip/32 dev loip route add $vip/32 dev lo scope hostip rule add from $vip/32 table lvs_tun_${vip##*.}
done
- 路由权重和优先级配置:
# 设置路由metric(优先级)
ip route add default via 198.51.100.1 dev eth0 metric 100 table lvs_tun
ip route add default via 198.51.100.2 dev eth0 metric 200 table lvs_tun# 使用ip route的pref参数
ip route add default via 198.51.100.1 dev eth0 pref 100 table lvs_tun
4 完整LVS-TUN模式配置实战
4.1 环境规划与准备
- Director: 203.0.113.10 (DIP), VIP: 203.0.113.100
- Real Server 1: 198.51.100.11 (RIP), 隧道IP: 10.0.0.2
- Real Server 2: 198.51.100.12 (RIP), 隧道IP: 10.0.0.3
- 客户端: 203.0.113.50 (CIP)
4.2 Director完整配置
- 步骤1:基础环境配置
# 系统更新
yum update -y# 安装必要软件
yum install -y ipvsadm iproute tcpdump# 关闭SELinux和防火墙
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
- 步骤2:VIP和隧道配置
# 配置VIP
ip addr add 203.0.113.100/32 dev eth0# 加载ipip模块
modprobe ipip
echo "ipip" > /etc/modules-load.d/ipip.conf# 配置隧道接口
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# 持久化配置
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 wlc# 添加真实服务器(隧道模式)
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# 保存配置
ipvsadm-save > /etc/sysconfig/ipvsadm# 配置持久化服务
systemctl enable ipvsadm
4.3 Real Server完整配置
- 步骤1:基础服务配置
# 安装Web服务(测试用)
yum install -y httpd
echo "Real Server 1 - TUN Mode" > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd# 基础网络配置
hostnamectl set-hostname rs1
systemctl stop firewalld
setenforce 0
- 步骤2:ipip模块和隧道配置
# 加载ipip模块
modprobe ipip
echo "ipip" > /etc/modules-load.d/ipip.conf# 配置隧道接口
ip tunnel add tunl0 mode ipip remote 203.0.113.10 local 198.51.100.11
ip addr add 10.0.0.2/24 dev tunl0
ip link set tunl0 up# 持久化隧道配置
cat > /etc/sysconfig/network-scripts/ifcfg-tunl0 << EOF
DEVICE=tunl0
BOOTPROTO=none
ONBOOT=yes
TYPE=IPIP
PEER_OUTER_IPADDR=203.0.113.10
PEER_INNER_IPADDR=10.0.0.1
MY_INNER_IPADDR=10.0.0.2
MY_OUTER_IPADDR=198.51.100.11
EOF
- 步骤3:路由表关键配置
# 配置VIP
ip addr add 203.0.113.100/32 dev lo# 创建自定义路由表
echo "200 lvs_tun" >> /etc/iproute2/rt_tables# 配置策略路由
ip rule add from 203.0.113.100/32 table lvs_tun
ip route add default via 198.51.100.1 dev eth0 table lvs_tun
ip route add 198.51.100.0/24 dev eth0 scope link table lvs_tun# 添加本地路由
ip route add 203.0.113.100/32 dev lo scope host
- 步骤4:ARP抑制配置
# 配置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# 禁用RPF过滤
for i in /proc/sys/net/ipv4/conf/*/rp_filter; doecho 0 > $i
done# 持久化配置
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
EOFsysctl -p
5 关键配置点故障排查与优化
5.1 ipip模块故障排查
- 诊断脚本:
#!/bin/bash
# ipip-module-check.shecho "=== IPIP模块状态检查 ==="# 检查模块加载
echo "1. 模块加载状态:"
lsmod | grep ipip || echo "ipip模块未加载"# 检查模块信息
echo -e "\n2. 模块信息:"
modinfo ipip 2>/dev/null || echo "ipip模块不可用"# 检查隧道支持
echo -e "\n3. 隧道支持:"
ip tunnel help 2>/dev/null | grep -i ipip || echo "IPIP隧道不支持"# 检查内核配置
echo -e "\n4. 内核配置:"
if [ -f /proc/config.gz ]; thenzcat /proc/config.gz | grep IPIP
elif [ -f /boot/config-$(uname -r) ]; thengrep CONFIG_NET_IPIP /boot/config-$(uname -r)
elseecho "无法检查内核配置"
fi
5.2 路由表配置验证
- 路由诊断工具:
#!/bin/bash
# route-diagnosis.shVIP="203.0.113.100"echo "=== 路由表诊断 ==="# 检查VIP配置
echo "1. VIP地址配置:"
ip addr show lo | grep $VIP || echo "VIP未配置在lo接口"# 检查路由规则
echo -e "\n2. 策略路由规则:"
ip rule show | grep $VIP || echo "VIP策略路由未配置"# 检查路由表
echo -e "\n3. 自定义路由表:"
ip route show table lvs_tun 2>/dev/null || echo "lvs_tun路由表未配置"# 测试路由路径
echo -e "\n4. 路由路径测试:"
ip route get $VIP from $VIP
5.3 性能优化配置
- 内核参数优化:
# 优化网络性能
cat >> /etc/sysctl.conf << EOF
# 隧道性能优化
net.core.netdev_max_backlog = 300000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864# 路由缓存优化
net.ipv4.route.max_size = 2097152
net.ipv4.route.gc_thresh = 2048# 隧道特定优化
net.ipv4.ipip.ttl = 64
net.ipv4.ipip.log_level = 0
EOFsysctl -p
6 总结
LVS-TUN模式的配置成功关键在于对两个核心技术的深入理解和正确配置:ipip模块加载和Real Server路由表调整。通过掌握这些关键配置技术,运维团队可以成功部署高性能、高可用的LVS-TUN模式集群,为分布式系统提供可靠的负载均衡支持。在实际应用中,建议结合具体业务需求进行适当的调优和定制,充分发挥TUN模式跨子网部署的优势。