ipvsadm:从内部网络访问负载平衡 IP

ipvsadm:从内部网络访问负载平衡 IP

我有以下情况:

ipvs-Loadbalancer - direct routing: 123.123.123.117
Realserver 1: eth0: 123.123.123.123 eth1: 10.10.0.1
Realserver 2: eth0: 123.123.123.124 eth1: 10.10.0.2
Random server on internal network: eth0: 10.10.0.44

负载平衡在外部 IP 上工作得很好。如果我连接到 123.123.123.117,我会收到来自 123.123.123.123 或 123.123.123.124 的响应。但如果我尝试从我网络内的随机服务器连接,它就不会起作用。

tcpdump 告诉我,请求通过负载均衡器到达 realserver,但没有响应。该设置在 Debian Squeeze 上确实有效,但自从我切换到 Ubuntu Trusty 后,它就不起作用了。

realserver 上的 route -n 告诉我:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         123.123.123.113 0.0.0.0         UG    0      0        0 eth1
10.10.0.0       0.0.0.0         255.255.0.0     U     0      0        0 eth0
123.123.123.112 0.0.0.0         255.255.255.240 U     0      0        0 eth1

有任何想法吗?

谢谢!

答案1

无法通过本地网络完成。我浪费了不少时间尝试 :)

问题是没有发生源 NAT,因此当客户端 123.123.123.99 连接到 123.123.123.117 时,它将被发送到 123.123.123.123 或 123.123.123.124。这些系统看到源 IP 是 123.123.123.99,并将响应直接发送到 123.123.123.99。然而,那里的客户端不期望来自 123.123.123.123 或 123.123.123.124 的任何流量,并发送 TCP RESET。同时它仍在等待来自 123.123.123.117 的响应,但该响应永远不会到来。

或者,将真实服务器(ipvs 进行负载平衡的地方)放在私有子网上,但是您需要一个单独的 (V)LAN。

答案2

好的,问题是内核会检查数据包是否可以通过其所来自的接口路由。如果不可以,则不会接受该数据包。

禁用真实服务器上的反向路径过滤器可以达到此目的:

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0

相关内容