【LVS入门宝典】LVS NAT模式实战指南:ip_forward、iptables与SNAT、DNAT规则配置详解
目录
引言
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 ACCEPTiptables -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/iptablesecho "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 ACCEPTecho "Real Server配置完成!"
6 总结
LVS NAT模式虽然配置相对复杂,但掌握了这些关键点后,就能构建出稳定高效的负载均衡环境。随着经验的积累,我们可以进一步探索LVS的DR和TUN模式,或者结合Keepalived、HAProxy等工具构建更加完善的负载均衡解决方案。