![IPTables 内部负载平衡](https://linux22.com/image/563095/IPTables%20%E5%86%85%E9%83%A8%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1.png)
我正在尝试使用 IPTables 在同一个 LAN 内设置负载平衡(如果可能)。我的想法是模拟我们的主要负载平衡器,但在虚拟环境中,所有服务器都是虚拟机。
有一个网关服务器,它转发往返于虚拟服务器和现实世界的流量,我想使用该网关来平衡该虚拟局域网内的某些流量。
我的设置是:
- 网关服务器 -> 2 个接口:eth0(公共)、eth2(私有;10.xy0/24)
- 服务器A -> 1 接口:eth2(私有;10.xy0/24)
- ServerB -> 1 接口:eth2(私有;10.xy0/24)
在 ServerB 上有 2 个服务实例,分别监听端口 60003 和 60004。
我的目标是能够打开从 ServerA 到 GatewayServer:60002 的连接,并以循环方式平衡到 ServerB 的端口 60003 和 60004。
我已经能够通过 GateWay 服务器从 ServerA 打开到 ServerB 的连接,但是连接总是通过端口 60003 到达 ServerB,而永远不会到达另一个端口 60004。
我已经按以下方式设置网关:
-A POSTROUTING -i eth2 -s 10.x.y.0/24 -p tcp --dport 60002 -j DNAT --to-destination 10.x.y.18-10.x.y.18:60003-60004
-A POSTROUTING -o eth2 -j MASQUERADE
在 ServerB 上嗅探时,我看到数据包来自 GatewayServer,但总是到达端口 60003,如前所述。
任何想法?
答案1
您需要检查正在运行的内核版本,因为 2.6.11-rc1 之后的内核已删除了您想要使用的功能。要查找您的内核版本,请使用 uname 例如
uname -r
2.6.32-71.el6.x86_64
来自 iptables 手册页
在 2.6.10 之前的内核中,您可以添加多个 --to-destination 选项。对于这些内核,如果您通过地址范围或多个 --to-destination 选项指定多个目标地址,则这些地址之间将进行简单的循环(循环中一个接一个)负载平衡。更高版本的内核(>= 2.6.11-rc1)不再具有将 NAT 到多个范围的能力。