目录
[1 LVS-TUN模式架构回顾与关键配置概览](#1 LVS-TUN模式架构回顾与关键配置概览)
[1.1 TUN模式工作原理回顾](#1.1 TUN模式工作原理回顾)
[1.2 关键配置点总览](#1.2 关键配置点总览)
[2 ipip内核模块深度解析与配置实战](#2 ipip内核模块深度解析与配置实战)
[2.1 ipip模块工作原理](#2.1 ipip模块工作原理)
[2.2 ipip模块加载实战配置](#2.2 ipip模块加载实战配置)
[2.3 ipip模块故障排查](#2.3 ipip模块故障排查)
[3 Real Server路由表调整深度解析](#3 Real Server路由表调整深度解析)
[3.1 TUN模式路由表特殊性分析](#3.1 TUN模式路由表特殊性分析)
[3.2 路由表调整实战配置](#3.2 路由表调整实战配置)
[3.3 高级路由配置技巧](#3.3 高级路由配置技巧)
[4 完整LVS-TUN模式配置实战](#4 完整LVS-TUN模式配置实战)
[4.1 环境规划与准备](#4.1 环境规划与准备)
[4.2 Director完整配置](#4.2 Director完整配置)
[4.3 Real Server完整配置](#4.3 Real Server完整配置)
[5 关键配置点故障排查与优化](#5 关键配置点故障排查与优化)
[5.1 ipip模块故障排查](#5.1 ipip模块故障排查)
[5.2 路由表配置验证](#5.2 路由表配置验证)
[5.3 性能优化配置](#5.3 性能优化配置)
[6 总结](#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/bashLVS 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/null
ip route add $VIP/32 dev lo scope host 2>/dev/null# 配置策略路由 ip rule add from $VIP/32 table lvs_tun 2>/dev/null ip route add default via $GATEWAY dev $DEVICE table lvs_tun 2>/dev/null ip 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/null ip addr del VIP/32 dev lo 2>/dev/null
ip rule del from VIP/32 table lvs_tun 2>/dev/null ip 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; do ip addr add vip/32 dev lo
ip route add vip/32 dev lo scope host ip 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; do
echo 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.sh
echo "=== 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 ]; then
zcat /proc/config.gz | grep IPIP
elif [ -f /boot/config-(uname -r) ]; then grep CONFIG_NET_IPIP /boot/config-(uname -r)
else
echo "无法检查内核配置"
fi
5.2 路由表配置验证
-
路由诊断工具:
#!/bin/bash
route-diagnosis.sh
VIP="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模式跨子网部署的优势。