温馨提示×

ubuntu iptables怎么负载均衡

小樊
49
2026-10-24 12:23:06
栏目: 云计算

在 Ubuntu 上用 iptables 做负载均衡,通常指的是 对进入的流量(如 TCP/UDP)分发到多个后端服务器。iptables 本身不是专业负载均衡器,但可以通过 statistic 模块 或 DNAT + 多目标 实现简单负载均衡。

下面按常见场景说明。


一、使用 iptables statistic 模块做负载均衡(推荐)

适用场景

  • 单台 Linux 作为网关 / 入口
  • 将流量随机或轮询转发到多台内网服务器

示例:将 80 端口流量均分到 192.168.1.10 和 192.168.1.11

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 个包开始
  • 第二条规则兜底,实现 1:1 分流

随机模式(更均匀)

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

二、多目标 DNAT(iptables 原生支持)

示例

iptables -t nat -A PREROUTING -p tcp --dport 80 \
  -j DNAT --to-destination 192.168.1.10:80,192.168.1.11:80

⚠ 注意:

  • 这是 连接级别随机
  • 同一连接不会切换后端
  • 不是严格轮询

三、开启 IP 转发(必须)

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

或永久生效:

# /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

四、POSTROUTING 必须配置

iptables -t nat -A POSTROUTING -j MASQUERADE

否则后端服务器回包路径不正确。


五、局限性(很重要)

iptables 负载均衡的缺点:

  • ❌ 无健康检查(后端挂了仍转发)
  • ❌ 不支持会话保持(除非靠连接)
  • ❌ 性能不如 LVS / Nginx / HAProxy
  • ❌ 多层 NAT 容易出问题

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

方案 特点
LVS (ipvs) 内核级,性能好
Nginx HTTP/HTTPS 层
HAProxy TCP/HTTP 专业 LB
Keepalived + LVS 高可用

七、示例: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

如果你能说明:

  • 是 TCP / HTTP / HTTPS
  • 是否 公网入口
  • 后端是否在 同网段

我可以给你更精确的 iptables 或 LVS 配置方案。

0 踩