在 Ubuntu 上用 iptables 做负载均衡,通常指的是 对进入的流量(如 TCP/UDP)分发到多个后端服务器。iptables 本身不是专业负载均衡器,但可以通过 statistic 模块 或 DNAT + 多目标 实现简单负载均衡。
下面按常见场景说明。
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode nth --every 2 --packet 0 \
-j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.11:80
说明:
--mode nth:轮询模式--every 2:每 2 个包--packet 0:从第 0 个包开始iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode random --probability 0.5 \
-j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-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.10:80,192.168.1.11:80
⚠ 注意:
echo 1 > /proc/sys/net/ipv4/ip_forward
或永久生效:
# /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -A POSTROUTING -j MASQUERADE
否则后端服务器回包路径不正确。
iptables 负载均衡的缺点:
| 方案 | 特点 |
|---|---|
| LVS (ipvs) | 内核级,性能好 |
| Nginx | HTTP/HTTPS 层 |
| HAProxy | TCP/HTTP 专业 LB |
| Keepalived + LVS | 高可用 |
ipvsadm -A -t 1.2.3.4:80 -s rr
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.10 -m
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.11 -m
如果你能说明:
我可以给你更精确的 iptables 或 LVS 配置方案。