温馨提示×

ubuntu iptables如何做负载均衡

小樊
42
2026-09-19 02:31:14
栏目: 云计算

在 Ubuntu 上使用 iptables 做负载均衡,常见做法主要有两种:

  1. iptables + statistic 模块(简单轮询)
  2. iptables + DNAT + ipvs(更专业)

下面重点讲 iptables 原生方式,以及说明局限和推荐方案。


一、iptables + statistic 模块(最常用)

适用场景

  • 对内网多个后端做 TCP/UDP 流量分发
  • 不需要会话保持
  • 后端在同一网段

示例:将 80 端口流量均衡到 3 台后端

假设:

  • 公网 IP:1.2.3.4
  • 后端:
    • 192.168.1.10
    • 192.168.1.11
    • 192.168.1.12

1. 开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

2. 添加 DNAT 规则(轮询)

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

3. 做 SNAT(关键)

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

二、random 模式(随机负载)

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

三、iptables 负载均衡的局限

❌ 不支持:

  • 健康检查
  • 会话保持(除非配合 conntrack)
  • 权重动态调整
  • 七层(HTTP 域名/URL)

✅ 适合:

  • 简单四层 TCP/UDP
  • 测试 / 内部系统

四、更推荐的方案(生产环境)

✅ 方案 1:IPVS(LVS)

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

✅ 方案 2:Nginx / HAProxy(七层)

  • 支持健康检查
  • 支持权重
  • 支持 HTTPS

五、总结

方式 难度 能力 推荐
iptables statistic 低 弱 测试
IPVS 中 强 生产
Nginx/HAProxy 中 最强 生产

如果你愿意,我可以:

  • 给你 完整脚本
  • 帮你 按 Ubuntu 22.04 配置
  • 或设计 高可用架构

直接说你的使用场景即可。

0 踩