温馨提示×

debian iptables如何做负载均衡

小樊
44
2026-09-07 18:11:10
栏目: 云计算

在 Debian 上使用 iptables 做“负载均衡”,通常是指 DNAT + 随机/轮询方式转发流量 到后端多台服务器。需要说明:iptables 本身不是专业的负载均衡器,功能有限(无健康检查、无加权),但适合简单场景。

下面按常见场景说明。


一、前置条件

1. 开启内核转发

# 临时
sysctl -w net.ipv4.ip_forward=1

# 永久
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2. 确认 iptables 可用

Debian 通常使用:

  • iptables(legacy)
  • nftables(新版默认)

本文以 iptables 为例。


二、基于 iptables 的 TCP/UDP 负载均衡(DNAT)

示例需求

  • 公网 IP: 1.2.3.4
  • 监听端口: 80
  • 后端服务器:
    • 192.168.1.10:80
    • 192.168.1.11:80
    • 192.168.1.12:80

1. 使用 statistic 模块做轮询(推荐)

iptables -t nat -A PREROUTING \
  -d 1.2.3.4 -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 \
  -d 1.2.3.4 -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 \
  -d 1.2.3.4 -p tcp --dport 80 \
  -j DNAT --to-destination 192.168.1.12:80

✅ 效果:

  • 第 1 个包 → 192.168.1.10
  • 第 2 个包 → 192.168.1.11
  • 其余 → 192.168.1.12

⚠️ 注意:这是“按包”负载,不是“按连接”


2. 使用 random 模式(更均衡)

iptables -t nat -A PREROUTING \
  -d 1.2.3.4 -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 \
  -d 1.2.3.4 -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 \
  -d 1.2.3.4 -p tcp --dport 80 \
  -j DNAT --to-destination 192.168.1.12:80

3. 开启 MASQUERADE(关键)

否则后端回包不会回来:

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 POSTROUTING -j MASQUERADE

三、UDP 负载均衡(如 DNS)

方法和 TCP 一样,只是:

-p udp

四、按“连接”负载(更接近真实 LB)

iptables 默认不支持连接级哈希,但可以用:

1. connmark + statistic(复杂,不推荐)

2. 使用 ipvs(强烈推荐)


五、更专业的方案(Debian 推荐)

✅ 方案 1:IPVS(L4 负载均衡,内核级)

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
ipvsadm -a -t 1.2.3.4:80 -r 192.168.1.12:80 -m

✅ 支持:

  • 轮询 / 加权
  • 健康检查
  • 连接级负载

✅ 方案 2:HAProxy / Nginx(L7)

如果是 HTTP:

  • Nginx(upstream)
  • HAProxy(更专业)

六、总结对比

方案 是否推荐 特点
iptables DNAT ❌ 简单用 无健康检查
IPVS ✅ 推荐 高性能 L4
HAProxy ✅ 推荐 L4/L7 专业
Nginx ✅ HTTP 易配置

如果你愿意,可以告诉我:

  • TCP / UDP / HTTP
  • 是否需要 健康检查
  • Debian 版本(11 / 12)

我可以直接给你一套可复制的配置

0