Virtual-Machines

如何診斷Linux系統上的網際網路訪問失敗?

  • August 1, 2015

我有一個VM執行Xen。虛擬機執行了好幾個月,突然網路訪問中斷。

            Dom0                           DomU

.-------.  bridge  .-------. virtual link .------.
| eth0  |----------| vif55 |-------x------| eth0 |
'-------'          '-------'       |      '------'
                                  |
Seems to be broken somewhere here /

但是,我仍然可以xm consoleDom0和訪問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

引用自:https://serverfault.com/questions/710163