在 Ubuntu 上使用 iptables 做负载均衡,常见做法主要有两种:
下面重点讲 iptables 原生方式,以及说明局限和推荐方案。
假设:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -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 -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 -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 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.5 \
-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
❌ 不支持:
✅ 适合:
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
| 方式 | 难度 | 能力 | 推荐 |
|---|---|---|---|
| iptables statistic | 低 | 弱 | 测试 |
| IPVS | 中 | 强 | 生产 |
| Nginx/HAProxy | 中 | 最强 | 生产 |
如果你愿意,我可以:
直接说你的使用场景即可。