【LVS入门宝典】LVS-TUN模式配置实战以及配置关键点:Real Server的路由表调整、ipip模块加载

目录

引言

[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/bash

    LVS TUN模式路由配置脚本

    VIP=203.0.113.100
    GATEWAY=198.51.100.1
    DEVICE=eth0

    case "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
    EOF

    chmod +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
    EOF

    sysctl -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
    EOF

    sysctl -p

6 总结

LVS-TUN模式的配置成功关键在于对两个核心技术的深入理解和正确配置:ipip模块加载和Real Server路由表调整。
通过掌握这些关键配置技术,运维团队可以成功部署高性能、高可用的LVS-TUN模式集群,为分布式系统提供可靠的负载均衡支持。在实际应用中,建议结合具体业务需求进行适当的调优和定制,充分发挥TUN模式跨子网部署的优势。

相关推荐
讯捷蓝达1 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.2 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界3 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落3 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨3 小时前
WSL2的安装与使用
linux·wsl
微小的鱼4 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng4 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹5 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_5 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes