LVS在kernel3.9 上的配置ipv6的问题

最近在3.9.0的内核上配置ipv6的LVS遇到了个问题,就是LB上经过ipvs模块选择了RS的数据怎么都发不到RS上面。在LB上面tcpdump 对应的eth是没有数据包出来的。
拓扑图如下:


LVS在kernel3.9 上的配置ipv6的问题_第1张图片
 
 
测试的时候,只配置了RS1,RS2是没有配的,当client 访问VIP的时候,
1)  在LB 上可以看到ipvsadm -lnc 的结果如下:

表明在模块ipvs中的连接是已经建立的了,而且通过查看ipvs的log,发送函数是调用成功的。
 
2)LB的路由表和邻居表的结果显示如下:
LVS在kernel3.9 上的配置ipv6的问题_第2张图片
 
路由是有的,但是邻居表中没有ip地址2001:192:168:3::203对应的的lladdr,这表明地址解析的时候根本没有解析到RS1的mac地址,通过查看ipvs的log,用邻居发现协议解析地址的时候,被请求节点多播地址
为ff02::1:ff a8: 3d6 (VIP的地址写成ipv6的形式是2001:64:c0 a8: 3d6),被请求节点多播地址应该为ff02::1:ff 00: 203 这样才能得到RS1上eth1的mac地址
 
尝试过手动添加RS1的mac地址,还是不行,因为根本原因不在找不到对应的mac地址上面,在ipvs模块中被请求节点多播地址的获取还是从路由表中得到的。
 
3)在LVS的mail-list中有人提到过这个问题,具体请参考:
http://archive.linuxvirtualserver.org/html/lvs-users/2013-06/msg00002.html
根据以上链接提出的解决方法,添加路由,还是不行。
当client访问VIP的时候路由表和邻居表的显示结果如下:
LVS在kernel3.9 上的配置ipv6的问题_第3张图片
虽然手动添加了路由,但是路由2001:192:168:3::/64 表明2001:192:168:3::203 是可以直接交付的,
所以没有走手动添加的主机路由,而是直接交付了,而且邻居表还是没有RS1的mac地址
 
4)为了让数据包走手动添加的路由,通过
ip -6 route add 2001:192:168:3::203/128 via 2001:192:168:3::203 table local  直接把路由添加到local_table中了,
这样就可以了,在LB上tcpdump 抓到的数据包的源地址,目的地址还有mac地址也是正常的,这时的路由表和邻居表如下:
LVS在kernel3.9 上的配置ipv6的问题_第4张图片
 
 在内核3.12上做过同样的测试,是不用配置路由的,看来应该是内核问题

你可能感兴趣的:(LVS)