【LVS入门宝典】LVS NAT模式实战指南:ip_forward、iptables与SNAT、DNAT规则配置详解

目录

引言

[1 LVS NAT模式架构回顾与配置规划](#1 LVS NAT模式架构回顾与配置规划)

[1.1 NAT模式基本架构](#1.1 NAT模式基本架构)

[1.2 环境规划](#1.2 环境规划)

[1.3 数据流向](#1.3 数据流向)

[2 核心配置一:ip_forward启用与优化](#2 核心配置一:ip_forward启用与优化)

[2.1 ip_forward的作用与原理](#2.1 ip_forward的作用与原理)

[2.2 启用ip_forward的多种方法](#2.2 启用ip_forward的多种方法)

[2.3 验证ip_forward状态](#2.3 验证ip_forward状态)

[2.4 高级优化参数](#2.4 高级优化参数)

[3 核心配置二:iptables规则管理与优化](#3 核心配置二:iptables规则管理与优化)

[3.1 iptables与LVS的关系](#3.1 iptables与LVS的关系)

[3.2 正确配置iptables规则](#3.2 正确配置iptables规则)

[3.3 避免iptables与LVS冲突](#3.3 避免iptables与LVS冲突)

[3.4 保存iptables规则](#3.4 保存iptables规则)

[4 核心配置三:SNAT/DNAT规则深度解析](#4 核心配置三:SNAT/DNAT规则深度解析)

[4.1 SNAT与DNAT概念辨析](#4.1 SNAT与DNAT概念辨析)

[4.2 LVS NAT模式下的地址转换](#4.2 LVS NAT模式下的地址转换)

[4.3 高级SNAT/DNAT配置技巧](#4.3 高级SNAT/DNAT配置技巧)

[5 完整实战配置示例](#5 完整实战配置示例)

[5.1 Director服务器完整配置脚本](#5.1 Director服务器完整配置脚本)

[5.2 Real Server配置脚本](#5.2 Real Server配置脚本)

[6 总结](#6 总结)


引言

Linux Virtual Server(LVS)的NAT模式因其配置相对简单、兼容性强的特点,成为许多企业入门负载均衡的首选方案。然而,在实际部署过程中,许多工程师常常在ip_forward配置、iptables规则管理和SNAT/DNAT设置等关键环节遇到问题,导致服务无法正常工作。

1 LVS NAT模式架构回顾与配置规划

1.1 NAT模式基本架构

在LVS NAT模式下,整个系统包含以下核心组件:

  • 负载均衡器(Director):运行LVS的核心设备,负责流量分发
  • 真实服务器(Real Server):实际提供服务的后端节点
  • 虚拟IP(VIP):对外提供服务的IP地址
  • 目录器IP(DIP):Director与后端通信的内部IP
  • 真实IP(RIP):后端服务器的实际IP地址

1.2 环境规划

|---------------|------|------------------|---------|
| 角色 | 网络接口 | IP地址 | 说明 |
| Director | eth0 | 192.168.1.100/24 | 对外服务VIP |
| Director | eth1 | 192.168.2.100/24 | 内部通信DIP |
| Real Server 1 | eth0 | 192.168.2.101/24 | Web服务器1 |
| Real Server 2 | eth0 | 192.168.2.102/24 | Web服务器2 |
| 客户端 | eth0 | 192.168.1.50/24 | 测试客户端 |

1.3 数据流向

2 核心配置一:ip_forward启用与优化

2.1 ip_forward的作用与原理

ip_forward(IP转发)是Linux内核的一个参数,控制是否允许系统在不同网络接口间转发数据包,在LVS NAT模式下,Director需要接收外网数据包并转发到内网服务器,因此必须启用IP转发功能。

2.2 启用ip_forward的多种方法

  • 临时启用(重启后失效):

    方法1:直接修改proc文件系统

    echo 1 > /proc/sys/net/ipv4/ip_forward

    方法2:使用sysctl命令

    sysctl -w net.ipv4.ip_forward=1

  • 永久启用(配置持久化):

    编辑sysctl配置文件

    vi /etc/sysctl.conf

    添加或修改以下行

    net.ipv4.ip_forward = 1

    使配置立即生效

    sysctl -p

2.3 验证ip_forward状态

复制代码
# 检查当前ip_forward值
cat /proc/sys/net/ipv4/ip_forward

# 或使用sysctl检查
sysctl net.ipv4.ip_forward

# 预期输出:net.ipv4.ip_forward = 1

2.4 高级优化参数

复制代码
# 增加端口范围,支持更多连接
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range

# 优化TCP时间等待参数
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

# 增加最大连接跟踪数
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max

3 核心配置二:iptables规则管理与优化

3.1 iptables与LVS的关系

在LVS环境中,iptables常用于:

  • 管理网络访问控制
  • 实现端口转发辅助功能
  • 提供网络安全防护
  • 处理LVS之外的网络流量

3.2 正确配置iptables规则

  • 清空现有规则(谨慎操作):

    清空所有规则链

    iptables -F
    iptables -t nat -F

    删除用户自定义链

    iptables -X
    iptables -t nat -X

    设置默认策略(生产环境需谨慎)

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT

  • 配置LVS专用规则:

    允许VIP相关流量

    iptables -A INPUT -d 192.168.1.100 -j ACCEPT

    允许健康检查流量

    iptables -A INPUT -s 192.168.2.0/24 -p tcp --dport 80 -j ACCEPT

    允许Real Server返回流量

    iptables -A FORWARD -s 192.168.2.0/24 -j ACCEPT
    iptables -A FORWARD -d 192.168.2.0/24 -j ACCEPT

3.3 避免iptables与LVS冲突

  • 问题1:iptables丢弃LVS流量

    检查并添加规则允许LVS流量

    iptables -I INPUT -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

  • 问题2:CONNMARK冲突

    如果需要使用连接标记,确保正确配置

    iptables -t mangle -A PREROUTING -d 192.168.1.100 -p tcp --dport 80 -j MARK --set-mark 1

3.4 保存iptables规则

复制代码
# CentOS/RHEL 6及以下
service iptables save

# CentOS/RHEL 7+
iptables-save > /etc/sysconfig/iptables

# Ubuntu/Debian
iptables-save > /etc/iptables/rules.v4

4 核心配置三:SNAT/DNAT规则深度解析

4.1 SNAT与DNAT概念辨析

  • SNAT(Source NAT):修改数据包的源地址,常用于内网设备访问外网
  • DNAT(Destination NAT):修改数据包的目标地址,常用于端口转发和负载均衡
    在LVS NAT模式中,同时使用了SNAT和DNAT技术:
  • 入站方向:DNAT(VIP→RIP) + SNAT(CIP→DIP)
  • 出站方向:SNAT(RIP→VIP) + DNAT(DIP→CIP)

4.2 LVS NAT模式下的地址转换

  • 传统NAT方式配置:

    DNAT规则:将访问VIP的流量转发到RIP

    iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.101

    SNAT规则:修改返回流量的源地址

    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.100

  • LVS集成方式(推荐):

    使用ipvsadm管理NAT规则,更高效且与LVS深度集成

    ipvsadm -A -t 192.168.1.100:80 -s rr
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.101:80 -m
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.102:80 -m

4.3 高级SNAT/DNAT配置技巧

  • 多WAN口SNAT配置:

    根据出口接口选择不同的SNAT地址

    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100
    iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.2.100

  • 端口映射配置:

    将外部8080端口映射到内部80端口

    ipvsadm -A -t 192.168.1.100:8080 -s rr
    ipvsadm -a -t 192.168.1.100:8080 -r 192.168.2.101:80 -m
    ipvsadm -a -t 192.168.1.100:8080 -r 192.168.2.102:80 -m

5 完整实战配置示例

5.1 Director服务器完整配置脚本

复制代码
#!/bin/bash
# LVS-Director配置脚本

# 设置变量
VIP=192.168.1.100
DIP=192.168.2.100
RIP1=192.168.2.101
RIP2=192.168.2.102
PORT=80

# 1. 启用IP转发
echo "启用IP转发..."
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1 > /dev/null

# 2. 清理现有规则
echo "清理现有规则..."
iptables -F
iptables -t nat -F
ipvsadm -C

# 3. 配置iptables基础规则
echo "配置iptables规则..."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# 允许VIP相关流量
iptables -A INPUT -d $VIP -j ACCEPT
iptables -A FORWARD -d $VIP -j ACCEPT

# 4. 配置LVS虚拟服务
echo "配置LVS虚拟服务..."
ipvsadm -A -t $VIP:$PORT -s rr

# 添加真实服务器
ipvsadm -a -t $VIP:$PORT -r $RIP1:$PORT -m
ipvsadm -a -t $VIP:$PORT -r $RIP2:$PORT -m

# 5. 配置SNAT规则(确保返回流量经过Director)
echo "配置SNAT规则..."
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source $DIP

# 6. 保存配置
echo "保存配置..."
service ipvsadm save
iptables-save > /etc/sysconfig/iptables

echo "LVS Director配置完成!"

5.2 Real Server配置脚本

复制代码
#!/bin/bash
# Real Server配置脚本

# 设置变量
DIP=192.168.2.100

# 1. 设置默认网关指向Director
echo "设置默认网关..."
route add default gw $DIP

# 2. 配置Web服务(示例)
echo "配置Web服务..."
yum install -y httpd || apt-get install -y apache2

# 创建测试页面
echo "Hello from Server $(hostname)" > /var/www/html/index.html

# 3. 启动服务
systemctl start httpd || systemctl start apache2
systemctl enable httpd || systemctl enable apache2

# 4. 确保防火墙允许80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

echo "Real Server配置完成!"

6 总结

LVS NAT模式虽然配置相对复杂,但掌握了这些关键点后,就能构建出稳定高效的负载均衡环境。随着经验的积累,我们可以进一步探索LVS的DR和TUN模式,或者结合Keepalived、HAProxy等工具构建更加完善的负载均衡解决方案。

相关推荐
hhcgchpspk3 小时前
flask获取ip地址各种方法
python·tcp/ip·flask
---学无止境---3 小时前
九、内核数据结构之list
linux·数据结构·list
error:(3 小时前
【Linux命令从入门到精通系列指南】apt 命令详解:Debian/Ubuntu 系统包管理的现代利器
linux·ubuntu·debian
bing_feilong3 小时前
树莓派4B+ubuntu20.04设置国内源
linux
范桂飓3 小时前
win11 安装 WSL2 Ubuntu 并支持远程 SSH 登录
linux·ubuntu·ssh
慌糖3 小时前
自动化接口框架搭建分享-pytest
运维·自动化·pytest
DeeplyMind3 小时前
AMD KFD的BO设计分析系列3-4:Linux DRM GEM mmap 与 drm_vma_offset_node 机制详解
linux·drm·opengl驱动·drm_gem_object
知白守黑2673 小时前
HAProxy负载均衡
运维·负载均衡
红尘客栈23 小时前
构建高可用 LVS-DR + Keepalived 负载均衡集群实战指南
运维·负载均衡·lvs