在 Ubuntu 上使用 iptables 做负载均衡,常见方式主要有两种:
下面分别说明。
适用于 DNAT 场景,把流量分发到多台后端服务器。
# 开启内核转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 \
-m statistic --mode nth --every 2 --packet 0 \
-j DNAT --to-destination 2.2.2.2:80
iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 \
-j DNAT --to-destination 3.3.3.3:80
iptables -t nat -A POSTROUTING -j MASQUERADE
--mode nth:轮询(第 0、2、4… 包走第一条)--mode random --probability 0.5:随机 50%随机示例:
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode random --probability 0.5 \
-j DNAT --to-destination 2.2.2.2:80
✅ 简单
❌ 不支持健康检查
❌ 连接不保证 sticky
Ubuntu 内置 IPVS(LVS),性能好,支持多种调度算法。
sudo apt update
sudo apt install ipvsadm
以 NAT 模式为例:
ipvsadm -A -t 1.1.1.1:80 -s rr
ipvsadm -a -t 1.1.1.1:80 -r 2.2.2.2:80 -m
ipvsadm -a -t 1.1.1.1:80 -r 3.3.3.3:80 -m
调度算法:
rr:轮询wrr:加权轮询lc:最少连接iptables -t nat -A POSTROUTING -j MASQUERADE
在新 Ubuntu(18.04+)上,更推荐:
| 方案 | 适合场景 |
|---|---|
| iptables statistic | 简单测试 |
| iptables + IPVS | 生产负载均衡 |
| nginx / haproxy | HTTP 层 |
如果你愿意,可以告诉我:
我可以给你一套可直接用的配置。