我有一台安装了 Debian Xen 4.1 的服务器。稍后我将用字母 A 来指代这台服务器。该服务器有两个正在运行的虚拟服务器。我们用字母 B 和 C 来称呼这些服务器。
所有服务器 A(主机)、B(虚拟机)和 C(虚拟机)都具有公共 IP(它们只有公共 IP,没有其他 IP)服务器 A:xxx82 服务器 B:xxx83 服务器 C:xxx84
它们都具有相同的网络掩码和相同的网关。服务器 A 具有接口 xenbr0、vif2.0 和 vif3.0。服务器 B 具有接口 eth0(链接到 vif2.0)。服务器 C 具有接口 eth0(链接到 vif3.0)。我已检查路由和网关以及网络掩码是否正确。并且配置有效。
route -n (on server A)
Destination Gateway Genmask Flags Metric Ref Use
Iface
0.0.0.0 x.x.x.81 0.0.0.0 UG 0 0 0 xenbr0
x.x.x.80 0.0.0.0 255.255.255.240 U 0 0 0 xenbr0
route -n (on server B and C)
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 x.x.x.81 0.0.0.0 UG 0 0 0 eth0
x.x.x.80 0.0.0.0 255.255.255.240 U 0 0 0 eth0
这可能在几天、几周、几个月内有效,但随后发生了一些事情。虚拟服务器 B 突然无法再访问网关,并且没有人无法通过公共 IP 访问服务器 B。所有接口均已启动,路由仍然正确。服务器 A 和 C 可以 ping B,B 也可以 ping 它们。网关无法访问。我已经检查了主机(服务器 A)上的 iptables,它完全正确,没有任何变化。我已经阅读了主机服务器 A 和虚拟机 B 上的 dmesg、syslog 和我能想到的所有日志文件 - 但找不到任何相关错误。路由不再正常工作!而且什么都没有改变!
据我所知,唯一的解决办法是重启虚拟机。之后几个月它就可以正常工作了。
我可能已经阅读了数百个论坛和讨论,但还没有找到解决方案 - 通常他们的配置有问题,或者他们收到了一些错误消息。当服务器 B 无法再连接到网关时,服务器 C 工作正常,并且它们的网络设置相同(当然,除了不同的 IP)。
我还检查了 brctl,它显示 STP enabled 为“否”。这和那有什么关系吗?很难相信,因为 VM C 仍然运行良好。
如果有人能建议我该从哪里开始查找原因,我将不胜感激。我已经检查过 iptables、ifconfig、brctl、dmesg、logs 等很多次了,我已经想不出主意了。