如何查找 IPVS 正在将虚拟 IP 路由到的真实 IP

如何查找 IPVS 正在将虚拟 IP 路由到的真实 IP

我正在尝试找到隐藏在虚拟 IP 后面的问题服务器(使用 LVS/ipvs)。我有一个测试程序,它会将请求发送到虚拟 IP,直到收到错误响应,但我如何知道对虚拟 IP 的请求被路由到哪个真实 IP?

在执行虚拟 IP 魔术的盒子上,这是虚拟 IP 配置(针对我关心的服务):

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
...
TCP  10.1.0.254:5025 nq
  -> 10.1.0.5:5025                Route   1      0          1         
  -> 10.1.0.6:5025                Route   1      0          5         
  -> 10.1.0.7:5025                Route   1      0          2         
  -> 10.1.0.9:5025                Local   1      0          3         
  -> 10.1.0.11:5025               Route   1      0          3         
...

我的客户端程序正在向 10.1.0.254:5025 发送 TCP 请求,通常会得到良好的响应,但有时会得到糟糕的响应。有了这么少的服务器,我可以依次向每台服务器发送请求,直到找到罪魁祸首,但我想知道随着我们添加服务器,这种技术是否会扩展。有什么方法可以让我找出请求被路由到哪里?

  • 内核:Linux 2.6.32
  • 操作系统:Debian 测试版(不管现在叫什么)。
  • ipvsadm 是 1.25 版本,使用 ipvs v1.2.1 编译

答案1

这是 IPVS/ldirectord 的一个典型问题,您可以通过多种方式尝试解决此问题

  • 检查目标服务器上的日志以查找请求(不是很准确,但大多数情况下它可以覆盖账单)
  • 如果你的目标服务器回复了标题(如 apache 或 ftp),只需X-Served-by在欢迎标题中添加一个新的自定义标题或一些提示
  • 激活 ldirectord 上的日志记录,日志记录有点模糊,但我很确定它会很有用,只需logfile="/var/log/ldirectord.log"在全局选项中将其添加到 ldirectord.cf 中即可

答案2

ipvsadm -Lcn在 LB(又名“director”)上应该会列出您的连接。使用 Grep 搜索您要搜索的 IP。

答案3

最好的办法是在真实服务器上运行 tcpdump 来查看您的请求发往何处。

明白了。LVS-TUN 在虚拟接口上监听客户端地址,因为数据包被封装了,所以你无法根据用户 IP 来识别数据包

$ tcpdump -i tunl0 主机用户 IP

相关内容