如何findIPVS路由虚拟IP的真实IP

我试图find隐藏在虚拟IP后面的问题服务器(使用LVS / ipvs)。 我有一个testing程序发送请求到虚拟IP,直到它得到不好的响应,但我怎么能告诉哪个真正的IP请求虚拟IP路由?

在虚拟IP魔术盒上,这里是虚拟IPconfiguration(对于我所关心的服务):

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
  • 操作系统:Debiantesting(无论这些日子是什么)。
  • ipvsadm是版本1.25,用ipvs v1.2.1编译

这是IPVS / ldirectord的一个相当典型的问题,你有几个select来尝试解决这个问题

  • 检查目标服务器上的日志查找请求(不是很准确,但大部分时间会包括账单)
  • 如果你的目标服务器回复了头文件(比如apache或ftp),只需在欢迎头文件中添加一个新的自定义头文件,如X-Served-by或者一些提示
  • 在ldirectord上激活日志logging,日志logging有点模糊,但我很确定它会很有用,只需在全局选项中添加到ldirectord.cf logfile="/var/log/ldirectord.log"

LB上的ipvsadm -Lcn (也ipvsadm -Lcn “导演”)应该列出你的连接。 grep为您正在search的IP。

最好的办法是在真实服务器上运行tcpdump,看看你的请求在哪里。

疑难杂症。 LVS-TUN在虚拟接口上监听客户端地址,因为数据包被封装了,您将无法根据用户的IP识别数据包

$ tcpdump -i tunl0主机USER_IP