我有几台 Linux(Debian Wheezy)机器,它们有一个奇怪的问题。启动它们后,会创建一个额外的路由,必须先删除该路由,然后机器才能与同一子网上的其他机器通信。启动后,路由如下所示(公共 IP 被屏蔽):
~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
208.XXX.XXX.0 * 255.255.255.0 U 0 0 0 vmbr0
default 208.XXX.XXX.1 0.0.0.0 UG 0 0 0 vmbr0
208.XXX.XXX.0 路由阻止服务器与同一子网中的任何其他服务器通信。删除此路由后,一切又恢复正常。但是,重新启动后,此路由又恢复了。是什么创建了此路由?自动创建这样的路由是正常的吗?(换句话说,此路由真的有效吗?我必须删除它,这实际上表明我的网络其他地方存在问题?)
这台机器正在运行 Proxmox(这就是为什么接口显示“vmbr0”),因此这很可能是 Proxmox 的问题。我已经尝试在他们的论坛上发布这个问题,但没有得到任何回复。
或许更好的问题是问这个:这条路由的什么原因导致同一个 208.XXX.XXX.XXX 子网中的机器无法相互通信?
如果有帮助的话,这里是内容/etc/network/interfaces
(再次使用 XXX 避免发布公共 IP。我保证,这些 IP 的前 3 个八位字节匹配。):
auto lo
iface lo inet loopback
auto vmbr0
iface vmbr0 inet static
address 208.XXX.XXX.165
netmask 255.255.255.0
gateway 208.XXX.XXX.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
答案1
当您将 IP 地址添加到特定接口时(通过 DHCP 或手动使用 ifconfig),Linux 内核会将此 IP 的子网路由添加到该特定接口上。这是因为从逻辑上讲您是子网的一部分。
可能的问题有:
DHCP 服务器没有从正确的子网为您提供正确的 IP(您尝试连接的子网位于路由器后面)
arp 请求存在一些问题,因此您的主机只能通过路由器相互通信