子网路由

托pipe在位于同一子网的服务器上的应用程序无法引用托pipe在子网的负载平衡器上的域名(VIP)。

假设:服务器A和服务器B托pipe在同一个子网中。

服务器A上托pipe的应用程序连接到VIP(引用托pipe在服务器B中的应用程序)。

连接启动将从服务器A,通过VIP,到服务器B; 但是,响应直接从服务器B返回到服务器A.

服务器A不会接受这个响应,因为它只把原来的请求发送给VIP。

问题:在networking设置中这是否正常? build议的解决scheme是为服务器A创build一个特殊的内部到子网IP来调用服务器B上的应用程序:我不喜欢这个解决scheme,因为它可能会导致内部IP的繁琐,这可能是麻烦的pipe理。

另一种select是发芽子网….

任何想法或build议?

你正在做DSR(直接服务器返回)。 为使其正常工作,负载平衡器需要注意这一点,以便它只修改目标MAC地址,但保持数据包中的两个IP地址不变。 另外,VIP需要在负载均衡器后面的所有服务器的环回接口上进行configuration,以便接受在目标字段中具有VIP的传入数据包。 无论使用哪种服务,都需要configuration为使用VIP,除非绑定到0.0.0.0。 一旦你有了这些东西,一切都会起作用,就像这样:

  1. A在源端发送一个拥有自己的IP和MAC的数据包,在dest中使用VIP和LB的MAC。

  2. LB接收到数据包,将dst MAC从其自己重写到其中一个平衡服务器的MAC,并将其发送给B.

  3. B收到数据包,看到有效的dst IP(因为它是VIP,并且在回环上有VIP),将它踢到服务处理。

  4. 该服务以VIP和服务器MAC作为源,A的IP和MAC作为dest发送答案。

  5. 数据包到达A,将其识别为对原始请求的有效响应。

顺便说一句,你的标签是完全错误的,因为没有路由参与。 这主要是第2层技巧,在第3层上进行一些configuration修改。

参考: LBWiki