这是我几年来一直忽视的一个问题。
我有一台运行 Linux 3.16.0-4-amd64 的 Debian 稳定服务器。启动几分钟到几小时后,服务器会失去出站网络连接,并停止响应 SSH 和 ping。打开 SSH 连接会挂起。不过,我在该主机上运行了 3 个基于 KVM 的虚拟机,它们实际上可以运行数年而没有任何连接问题。我也可以重新启动它们。
/etc/network/interfaces
:
auto lo
iface lo inet loopback
iface eth0 inet manual
auto br0
iface br0 inet static
address xxx.xxx.xxx.6
netmask 255.255.255.0
network xxx.xxx.xxx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
日志没有显示任何有趣的内容。其中唯一与网络相关的消息如下,它通常在启动后 10-15 分钟出现,但可能在断开连接前数小时出现:
kernel: br0: Multicast hash table maximum of 512 reached, disabling snooping: eth0
route -n
断开连接时输出ip addr
不会改变。ping 8.8.8.8
说:
From OWN_IPv4 icmp_seq=1 Destination Host Unreachable
禁用 IPv6(我目前不使用)没有帮助。
编辑:无论虚拟机是否正在运行,都会发生这种情况。我只是觉得很奇怪,它们有连接,而主机却没有,这就是我提到它们的原因。除了偶尔的 SSH 扫描外,不应该有任何流量。
答案1
这台机器已经连续 16 小时没有断过网络连接,所以我很确定它已经“修好了”。我所做的是使用一个/etc/network/interfaces
没有定义桥接的文件进行启动:
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
address xxx.xxx.xxx.6
netmask 255.255.255.0
network xxx.xxx.xxx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers SOME_IP SOME_OTHER_IP
两个小时后(为了确保万无一失),我/etc/network/interfaces
从问题中复制了内容并运行:
ip address flush eth0 scope global && ifup br0
四分钟后,多播哈希表又满了,但我不在乎。又过了两个小时,我启动了虚拟机。
因此,显然使用桥接器启动会使系统在一段时间后失去连接,而启动后添加桥接器似乎有效。但不知道为什么会这样。