ubuntu防火墙如何实现负载均衡
导读:Ubuntu 防火墙实现负载均衡的可行路径 在 Ubuntu 上,负载均衡通常借助内核的 Netfilter/iptables 或 IPVS(LVS) 完成;若使用 firewalld,更多是做端口转发与策略编排,底层仍依赖上述内核能力。下...
Ubuntu 防火墙实现负载均衡的可行路径
在 Ubuntu 上,负载均衡通常借助内核的 Netfilter/iptables 或 IPVS(LVS) 完成;若使用 firewalld,更多是做端口转发与策略编排,底层仍依赖上述内核能力。下面给出三种常用做法与关键配置要点,便于按场景选择。
方案一 使用 iptables statistic 模块做端口转发均衡
- 适用:简单的四层转发(DNAT)到多台后端,快速落地。
- 思路:在 nat/PREROUTING 用 statistic 模块按“每第 N 个包/随机概率”分发到不同后端,在 nat/POSTROUTING 做 SNAT/MASQUERADE 回包。
- 示例(轮询分发到两台后端,LB 外网卡为 eth0):
#!/usr/bin/env bash set -e # 启用转发 sudo sysctl -w net.ipv4.ip_forward=1 # 清空规则 sudo iptables -t nat -F # 轮询:第1个包到 192.168.1.200:80,其余到 192.168.1.201:80 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -m statistic --mode nth --every 2 --packet 0 \ -j DNAT --to-destination 192.168.1.200:80 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -j DNAT --to-destination 192.168.1.201:80 # 回程源地址转换 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE - 概率分发示例(3 台后端,概率分别为 1/3、1/2、余下):
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -m statistic --mode random --probability 0.33 \ -j DNAT --to-destination 192.168.1.101:80 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -m statistic --mode random --probability 0.50 \ -j DNAT --to-destination 192.168.1.102:80 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -j DNAT --to-destination 192.168.1.103:80 - 提示:基于“每包/每流”的转发对长连接(如下载、视频)可能带来乱序或会话粘滞问题;如需会话保持,可改用基于源地址的更粗粒度分发策略。
方案二 使用 IPVS LVS 与 Keepalived 构建高性能四层负载均衡
- 适用:高并发、生产级四层转发,支持 NAT/DR/TUN 模式与健康检查、主备高可用。
- 思路:用 Keepalived 管理 VRRP 虚拟 IP(VIP)与 IPVS 调度;后端服务器按模式配置(如 DR 模式需抑制 ARP 响应并在本地回环绑定 VIP)。
- 关键步骤与示例:
- 安装组件:
sudo apt-get install ipvsadm keepalived - 开启转发:
sudo sysctl -w net.ipv4.ip_forward=1 - Keepalived 配置片段(主节点示例,VIP 为 192.168.98.100,调度算法 wrr,NAT/DR 按需选择):
global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 120 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.98.100 } } virtual_server 192.168.98.100 80 { delay_loop 6 lb_algo wrr lb_kind DR # 或 NAT/TUN persistence_timeout 50 protocol TCP real_server 192.168.98.7 80 { weight 1 TCP_CHECK { connect_timeout 3 } } real_server 192.168.98.14 80 { weight 2 TCP_CHECK { connect_timeout 3 } } } - DR 模式后端要点(在每台 realserver 上执行):
VIP=192.168.98.100 ip addr add $VIP/32 dev lo:0 ip route add $VIP dev lo:0 sysctl -w net.ipv4.conf.lo.arp_ignore=1 sysctl -w net.ipv4.conf.lo.arp_announce=2 sysctl -w net.ipv4.conf.all.arp_ignore=1 sysctl -w net.ipv4.conf.all.arp_announce=2 - 启动:
sudo systemctl start keepalived(主备部署时,备节点 state 为 BACKUP、priority 更低)。
- 安装组件:
方案三 使用 firewalld 做端口转发与分发编排
- 适用:已有 firewalld 管理策略,需将单端口分发到本机多个服务端口(如 80→8080/8081)。
- 示例(将 80 端口分发到本机 8080 与 8081,按概率近似分流):
sudo apt-get install --reinstall firewalld sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8081 sudo firewall-cmd --reload - 说明:firewalld 的富转发规则可更细粒度控制,但多目标“均衡”通常仍需借助 iptables statistic 或上层 L4/L7 代理 实现。
方案对比与选型建议
| 方案 | 工作层次 | 典型场景 | 优点 | 局限 |
|---|---|---|---|---|
| iptables statistic | 四层 DNAT | 快速把端口分发到少量后端 | 配置简洁、无需额外守护进程 | 无健康检查、会话保持能力弱、长连接可能受影响 |
| IPVS LVS + Keepalived | 四层 L4 | 高并发、生产级、需高可用 | 调度算法丰富、可跨模式、支持健康检查与 VRRP | 部署与网络模式(NAT/DR/TUN)配置更复杂 |
| firewalld 转发编排 | 四层转发策略 | 已有 firewalld 的统一管理 | 与 firewalld 策略集成、易纳入现有体系 | 均衡能力有限,通常需配合其他组件实现多后端分发 |
- 选型建议:
- 快速临时分流或实验环境:优先 iptables statistic。
- 生产高并发与高可用:选择 IPVS LVS + Keepalived(必要时配合后端健康检查脚本)。
- 已采用 firewalld 的运维体系:用 firewalld 做端口转发与策略入口,底层仍建议接入 iptables/IPVS 实现均衡。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu防火墙如何实现负载均衡
本文地址: https://pptw.com/jishu/757881.html
