Virtual-Machines
如何診斷Linux系統上的網際網路訪問失敗?
我有一個
VM
執行Xen
。虛擬機執行了好幾個月,突然網路訪問中斷。Dom0 DomU .-------. bridge .-------. virtual link .------. | eth0 |----------| vif55 |-------x------| eth0 | '-------' '-------' | '------' | Seems to be broken somewhere here /
但是,我仍然可以
xm console
從Dom0
和訪問VM
.我想了解問題的根源是什麼。我可以肯定的是,如果我重新啟動,我的
VM
一切都會恢復正常(我知道這是因為這不是第一次發生)……這是我到目前為止所做的:
來自 DomU
xm console domu $ sudo su $ ifconfig
網路連接看起來沒問題。IP 沒問題,但是這些命令中的任何一個都會失敗:
$ ping dom0 $ ping 8.8.8.8
我得到的錯誤是:
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. ping: sendmsg: No buffer space available ^C --- 8.8.8.8 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 24002ms
我
fail2ban
的看起來並不壞:$ tail -n2 fail2ban.log 2015-07-31 19:41:52,851 fail2ban.actions[1854]: WARNING [ssh] Ban 218.65.30.61 2015-07-31 19:51:53,618 fail2ban.actions[1854]: WARNING [ssh] Unban 218.65.30.61 $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache tcp -- anywhere anywhere multiport dports http,https fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- anywhere anywhere
給出的可用磁碟空間
df
看起來沒問題。來自 Dom0
VM
正在執行:$xmlist | grep domu domu 55 4096 4 -b---- 670393.8
它連接到
vif55
:$iptables -L | grep domu ACCEPT all -- domu anywhere PHYSDEV match --physdev-in vif55.0
vif55
可用:$ ifconfig | grep vif55.0 vif55.0 Link encap:Ethernet HWaddr fe:ff:ff:ff:ff:ff inet6 addr: xxxx::fcff:ffff:xxxx:ffff/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:60965324 errors:0 dropped:0 overruns:0 frame:0 TX packets:130097868 errors:0 dropped:22 overruns:0 carrier:0 collisions:0 txqueuelen:32 RX bytes:3441407339 (3.2 GiB) TX bytes:161037189 (153.5 MiB)
vif55
連接到網橋:$ brctl show bridge name bridge id STP enabled interfaces eth0 8000.10604ba1432a no peth0 vif1.0 vif10.0 vif11.0 vif48.0 vif51.0 vif55.0 vif56.0 vif57.0 vif58.0 vif59.0 vif60.0 vif9.0
這個謎團的關鍵是你從中得到的錯誤
ping
:sendmsg: No buffer space available
。這意味著數據包不只是被丟棄在某個地方,它們實際上是在某個地方的來賓中“阻塞”了。在物理機中,這表明核心驅動程序和/或硬體存在錯誤;同樣,在 VM 中,這意味著您在某處有低級錯誤的網路程式碼。首先,確保您使用最新的更新檔,尤其是在主機上。如果您正在執行一個非常舊的作業系統版本,那麼現在可能是升級它的時候了——Xen 多年來已經修復了很多錯誤。
您可以
net.core.wmem_max
暫時通過增加sysctl.xml來解決它。但是,這不是“修復”,只是一種解決方法;大概較大的緩衝區空間最終會再次填滿,您將回到現在的位置。您沒有指定如何執行來賓。如果它是完全虛擬化的,那麼您正在使用的模擬 NIC 中可能存在錯誤;virtio 是您最好的選擇,但如果您已經在使用它,請嘗試使用它
e1000
。