Vmware虚拟机配置LVS/NAT模式遇到的坑。

这两天在研究LVS的负载均衡,先从最简单的LVS/NAT模式开始入手。

最后配置完之后能够相互之间Ping通,并且能够直接访问real服务器提供的web服务,而且防火墙也已经关闭了。

但是通过访问LVS服务器死活访问不了Real服务器,利用tcpdump和iftop监控软件查看了一下,发现握手出现的问题!

先说一下用于测试LVS/NAT模式的一些配置信息吧。

[真实] PC的网络:

外网IP:xxx.xxx.xxx.xxx这个是运营商动态分配给我的一个公网IP。

内网IP:192.168.123.1  使用Windows的[本地链接/宽带连接]共享互联网络访问到这个虚拟路由器上,这样虚拟机就能够访问互联网了。

内网IP:192.168.100.1

[虚拟机] LVS服务器:

外网IP、VIP:192.168.123.100

内网IP、DIP:192.168.100.10

[虚拟机] Real服务器:

外网IP:192.168.123.101

内网IP:192.168.100.11 网关 192.168.100.10

先说说我为什么要这么配置的理由,使用虚拟机安装的全新的CentOS 7,因为直接使用虚拟机不方便,我需要复制等等一些功能,所以那个192.168.123.x的网段是为了让我的Windows上的SecureCRT软件能够通过固定的IP建立SSH链接,这样我就能够很方便的配置虚拟机上面的Linux服务器了,所以我为两个服务器都配置了一个192.168.123.X的地址。

好了,理想中的一个流程应该是这样的:

客户端访问[192.168.123.100]  -> LVS服务器转发[192.168.100.11] -> Real服务器返回[192.168.100.10] -> LVS服务器返回[192.168.123.1] -> 客户端。

但是坑就出现了,我们知道,LVS/NAT模式本身需要Real服务器进行一些配置,就是上面的192.168.100.X网段,要把Real服务器的这个网关地址设置为LVS的DIP。这样Real服务器就能把东西发送到LVS服务器上,然后LVS服务器就能够继续转发回客户端。

在LVS/NAT模式中,LVS本身不会修改包的来源地址,这是因为Real服务器需要每一个客户端的IP地址,所以自然是万万不能修改的。

好了,有了上面的了解之后,相信大家应该猜出问题的所在了,那就是Real服务器本身拥有192.168.123.101的IP地址。所以被处理完毕的数据,直接被发送到了192.168.123.1上面去了!如下:

客户端访问[192.168.123.100]  -> LVS服务器转发[192.168.100.11] -> Real服务器返回[192.168.123.1] -> 客户端不认这个返回。

解决办法就是关掉Real服务器上面的192.168.123.101的网卡,此时Real服务器就会把数据包发给192.168.100.10也就是我们设置的网关地址。

其实出现这种问题就是路由的配置没有到位,使用默认的路由可能会出现这种情况!

种种巧合[恰好我需要通过SSH去控制虚拟机,恰好我又为每一个虚拟服务器配置了外网IP,恰好这个IP又在同一个网段],造成了这个大坑!

上一篇:effective java 学习心得


下一篇:Sybase alter 用法