iptables 本身不是分布式系统组件,它运行在单台 Linux 主机上,无法直接实现跨多节点的“分布式负载均衡”。

iptables 本身不是分布式系统组件,它运行在单台 Linux 主机上,无法直接实现跨多节点的“分布式负载均衡”。但常被误称为“分布式”的场景,实际是指:在边缘网关或入口节点上,用 iptables 做第一层流量分发,再结合后端集群(如多台 Web 服务器)构成事实上的负载均衡架构。这种架构虽非真正分布式调度(无全局状态、无服务发现、无健康检查),但在轻量级、静态拓扑、低复杂度场景中广泛使用。
关键在于策略分配的实现逻辑——不是靠 iptables 自身智能决策,而是通过规则顺序 + 模块(statistic、state、iprange)+ 链式匹配机制,模拟出轮询、随机、哈希等基础分发行为。
依赖前提必须满足
开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
并写入/etc/sysctl.conf持久化:net.ipv4.ip_forward = 1确保 FORWARD 链放行
否则 DNAT 后的数据包会被默认 DROP:iptables -A FORWARD -d 192.168.1.10 -p tcp --dport 80 -j ACCEPTiptables -A FORWARD -d 192.168.1.11 -p tcp --dport 80 -j ACCEPT
(需按实际后端 IP 补全)NAT 表权限与链位置正确
DNAT 只能在PREROUTING或OUTPUT链生效;SNAT/MASQUERADE 只能在POSTROUTING或OUTPUT链生效。
三种主流策略分配方式及适用场景
轮询分发(nth 模式,连接粒度或包粒度)
适合后端性能均一、无会话粘性要求的 HTTP/REST 服务。
- 按新连接轮询(推荐):
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.10:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.11:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j DNAT --to-destination 192.168.1.12:80
✅ 特点:每第 1、4、7…个新连接发往 192.168.1.10;第 2、5、8…发往 192.168.1.11;其余发往 .12。连接内所有包走同一后端。
随机分发(random 模式,概率可控)
适合对后端压力分布容忍波动、且不希望出现长周期倾斜的场景。
- 三台后端均分(各约 33%):
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 192.168.1.10:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode random --probability 0.50 -j DNAT --to-destination 192.168.1.11:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.12:80
⚠️ 注意:规则顺序不能颠倒。第二条概率是 剩余流量中的 50%,即整体约 33%;第三条承接剩余约 34%。
IP 哈希分发(稳定映射,伪会话保持)
适合需要客户端 IP 到后端固定绑定的轻量场景(如缓存一致性、日志归集)。
- 使用
iprange+hashlimit或addrtype辅助,但更常用的是--to-destination支持的 IP 段自动哈希:iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -j DNAT --to-destination 192.168.1.10-192.168.1.12:80
? 内核自动按源 IP 哈希选择目标,同一客户端始终落到同一后端(无显式配置,但行为可预期)。不支持权重调整。
回程路径处理(避免响应丢包)
若后端服务器默认网关不指向本机(常见于直连模式),需 SNAT 或 MASQUERADE:
使用 MASQUERADE(推荐,适配动态内网):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE或精确 SNAT(适用于网关固定):
iptables -t nat -A POSTROUTING -d 192.168.1.10 -j SNAT --to-source 192.168.1.1
规则持久化与验证
保存规则(Debian/Ubuntu):
sudo netfilter-persistent save查看 NAT 规则:
sudo iptables -t nat -vnL PREROUTING测试方法:
从不同客户端反复访问 VIP:80,用curl -v http://VIP+ 后端access.log确认分发效果;或用conntrack -L | grep :80查看连接跟踪条目归属。
不复杂但容易忽略

















