目录

引言

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

1.1 NAT模式基本架构

1.2 环境规划

1.3 数据流向

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

2.1 ip_forward的作用与原理

2.2 启用ip_forward的多种方法

2.3 验证ip_forward状态

2.4 高级优化参数

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

3.1 iptables与LVS的关系

3.2 正确配置iptables规则

3.3 避免iptables与LVS冲突

3.4 保存iptables规则

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

4.1 SNAT与DNAT概念辨析

4.2 LVS NAT模式下的地址转换

4.3 高级SNAT/DNAT配置技巧

5 完整实战配置示例

5.1 Director服务器完整配置脚本

5.2 Real Server配置脚本

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

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等工具构建更加完善的负载均衡解决方案。

更多推荐