iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。虽然 iptables 本身并不直接提供负载均衡功能,但它可以与 Linux 虚拟服务器(LVS)或 IPVS 模块结合使用,实现负载均衡。
以下是使用 iptables 和 IPVS 实现负载均衡的基本步骤:
首先,确保你的系统已经安装了 IPVS 相关的工具和模块。
sudo apt-get update
sudo apt-get install ipvsadm
加载 IPVS 内核模块:
sudo modprobe ip_vs
sudo modprobe ip_vs_rr # 轮询调度算法
使用 ipvsadm 命令配置 IPVS 规则。假设你有三个后端服务器,IP 地址分别为 192.168.1.101、192.168.1.102 和 192.168.1.103,并且你想将流量分发到这些服务器上。
sudo ipvsadm -A -t 192.168.1.100:80 -s rr # 添加一个 TCP 服务,虚拟 IP 为 192.168.1.100,端口为 80,使用轮询调度算法
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101 -g # 添加后端服务器 192.168.1.101
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102 -g # 添加后端服务器 192.168.1.102
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103 -g # 添加后端服务器 192.168.1.103
使用 iptables 将流量重定向到 IPVS 虚拟服务器。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE
确保 IP 转发功能已启用:
sudo sysctl -w net.ipv4.ip_forward=1
为了使更改永久生效,编辑 /etc/sysctl.conf 文件,添加或修改以下行:
net.ipv4.ip_forward=1
然后运行:
sudo sysctl -p
使用 ipvsadm 和 iptables 命令验证配置是否正确。
sudo ipvsadm -L -n
sudo iptables -t nat -L -v -n
通过以上步骤,你就可以使用 iptables 和 IPVS 实现基本的负载均衡功能。根据实际需求,你可以选择不同的调度算法(如 rr、wrr、lc、wlc 等),并配置更多的后端服务器和端口。