LVS 中的单包调度及出包源地址

LVS 中的单包调度及出包源地址

我在 NAT 模式下使用 LVS (ipvsadm) 来为多个“realserver”负载平衡 UDP 流量。我使用单数据包调度,以便将来自客户端上单个源端口的流量分发到不同的 realserver。

然而,我看到的是,源自真实服务器并发送回客户端的 UDP 数据报将其源 IP / 端口设置为真实服务器的 IP / 端口,这让客户端感到困惑,因为它希望收到源 IP / 端口与他发送原始数据报的 IP / 端口匹配的回复。

这确实非常奇怪,因为 LVS 应该将真实服务器“隐藏”在虚拟 IP / 端口后面。

看来,如果我关闭单包调度,传出数据报的源 ip / 端口由 LVS 正确重写。

有人遇到过这种情况吗?如果是这样,该如何解决?

答案1

如果你仍然感兴趣:

我认为单包调度不期望它刚刚调度的包有响应,因此不存储连接信息。然后当响应返回时,LVS 无法找到它的连接,因此不知道要使用哪个源 IP/端口。

这似乎是设计使然。在这里搜索“OPS 是为没有原始数据包回复的设置而实现的”,你会看到一些解释。

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.UDP.html

解决方案是为 UDP 连接设置持久超时(如果您希望快速响应,可以将其设置得较低),从而明确设置连接时间。既然您可以这样做,OPS 就没有必要记住连接。

相关内容