温馨提示×

centos iptables怎样负载均衡

小樊
36
2026-09-21 00:01:32
栏目: 云计算

CentOS 上使用 iptables 做“负载均衡”,通常指 DNAT + statistic 模块 实现简单的流量分发(非真正 L4/L7 负载均衡)。下面按常见场景说明。


一、iptables 负载均衡原理

iptables 本身没有完整负载均衡功能,但可以通过:

  • DNAT:把请求转发到后端
  • statistic 模块:按概率或轮询方式选择目标

适合:

  • TCP/UDP 简单分流
  • 小规模、对健康检查无要求的场景

不适合:

  • 高级负载均衡(会话保持、健康检查)
  • 高并发生产环境(建议用 LVS / Nginx / HAProxy)

二、前置条件

1. 开启内核转发

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

2. 关闭 firewalld(或用 iptables 替代)

systemctl stop firewalld
systemctl disable firewalld

三、TCP 端口负载均衡示例(如 80 端口)

假设:

  • 公网 IP:192.168.1.100
  • 后端服务器:
    • 10.0.0.1
    • 10.0.0.2

1. NAT 表配置

iptables -t nat -A PREROUTING -p tcp --dport 80 \
  -m statistic --mode random --probability 0.5 \
  -j DNAT --to-destination 10.0.0.1:80

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

说明:

  • 第一条:50% 流量到 10.0.0.1
  • 第二条:剩余流量到 10.0.0.2

四、轮询方式(round-robin)

iptables -t nat -A PREROUTING -p tcp --dport 80 \
  -m statistic --mode nth --every 2 --packet 0 \
  -j DNAT --to-destination 10.0.0.1:80

iptables -t nat -A PREROUTING -p tcp --dport 80 \
  -m statistic --mode nth --every 2 --packet 1 \
  -j DNAT --to-destination 10.0.0.2:80

五、POSTROUTING 必须配置

否则回包不会经过网关:

iptables -t nat -A POSTROUTING -d 10.0.0.1 -j MASQUERADE
iptables -t nat -A POSTROUTING -d 10.0.0.2 -j MASQUERADE

或统一:

iptables -t nat -A POSTROUTING -j MASQUERADE

六、UDP 示例

iptables -t nat -A PREROUTING -p udp --dport 53 \
  -m statistic --mode random --probability 0.5 \
  -j DNAT --to-destination 10.0.0.1:53

iptables -t nat -A PREROUTING -p udp --dport 53 \
  -j DNAT --to-destination 10.0.0.2:53

七、保存规则(CentOS 7)

service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

八、常见坑

  1. 回包路径问题:必须 MASQUERADE
  2. 无健康检查:后端挂了仍会转发
  3. 连接不保持:statistic 是按包/概率,不是按连接
  4. CentOS 8 默认 nftables(iptables 是兼容层)

九、更推荐方案(生产)

  • LVS(IPVS):内核级,真正负载均衡
  • Nginx / HAProxy:HTTP / TCP 层
  • keepalived + LVS:高可用

如果你能说明:

  • CentOS 版本
  • 协议(TCP/UDP/HTTP)
  • 是否需健康检查

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

0