在 Debian 上使用 iptables 做“负载均衡”,通常是指 DNAT + 随机/轮询方式转发流量 到后端多台服务器。需要说明:iptables 本身不是专业的负载均衡器,功能有限(无健康检查、无加权),但适合简单场景。
下面按常见场景说明。
# 临时
sysctl -w net.ipv4.ip_forward=1
# 永久
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
Debian 通常使用:
iptables(legacy)nftables(新版默认)本文以 iptables 为例。
1.2.3.480192.168.1.10:80192.168.1.11:80192.168.1.12:80statistic 模块做轮询(推荐)iptables -t nat -A PREROUTING \
-d 1.2.3.4 -p tcp --dport 80 \
-m statistic --mode nth --every 3 --packet 0 \
-j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A PREROUTING \
-d 1.2.3.4 -p tcp --dport 80 \
-m statistic --mode nth --every 2 --packet 0 \
-j DNAT --to-destination 192.168.1.11:80
iptables -t nat -A PREROUTING \
-d 1.2.3.4 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.12:80
✅ 效果:
⚠️ 注意:这是“按包”负载,不是“按连接”
random 模式(更均衡)iptables -t nat -A PREROUTING \
-d 1.2.3.4 -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 \
-d 1.2.3.4 -p tcp --dport 80 \
-m statistic --mode random --probability 0.5 \
-j DNAT --to-destination 192.168.1.11:80
iptables -t nat -A PREROUTING \
-d 1.2.3.4 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.12:80
否则后端回包不会回来:
iptables -t nat -A POSTROUTING \
-p tcp -d 192.168.1.10 --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING \
-p tcp -d 192.168.1.11 --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING \
-p tcp -d 192.168.1.12 --dport 80 -j MASQUERADE
或简单点:
iptables -t nat -A POSTROUTING -j MASQUERADE
方法和 TCP 一样,只是:
-p udp
iptables 默认不支持连接级哈希,但可以用:
connmark + statistic(复杂,不推荐)apt install ipvsadm
示例:
ipvsadm -A -t 1.2.3.4:80 -s rr
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.10:80 -m
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.12:80 -m
✅ 支持:
如果是 HTTP:
| 方案 | 是否推荐 | 特点 |
|---|---|---|
| iptables DNAT | ❌ 简单用 | 无健康检查 |
| IPVS | ✅ 推荐 | 高性能 L4 |
| HAProxy | ✅ 推荐 | L4/L7 专业 |
| Nginx | ✅ HTTP | 易配置 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。