Назад | Перейти на главную страницу

Как диагностировать сбой доступа в Интернет в системе Linux?

у меня есть VM работает на Xen. Виртуальная машина месяцами работала нормально, и внезапно прервался доступ к сети.

             Dom0                           DomU

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

Однако я все еще могу xm console из Dom0 и получить доступ к VM.

Я хотел бы понять, в чем причина проблемы. Я точно знаю, что если я перезапущу свой VM все вернется в норму (я знаю это, потому что это происходит не в первый раз) ...

Вот что я сделал до сих пор:

От ДомУ

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. Это означает, что пакеты не просто куда-то сбрасываются, они фактически где-то «забиваются» в гостевой системе. На физической машине это означает, что драйвер ядра и / или оборудование неисправны; аналогично, в виртуальной машине это означает, что у вас где-то есть низкоуровневый сетевой код с ошибками.

Прежде всего, убедитесь, что вы в курсе обновлений, особенно на хосте. Если вы используете очень старую версию своей ОС, возможно, сейчас самое время ее обновить - у Xen был много ошибок, исправленных за долгие годы.

Вы жестяная банкавременно, обойти это, увеличив net.core.wmem_max sysctl. Однако это не «исправление», а лишь обходной путь; предположительно, большее буферное пространство в конечном итоге снова заполнится, и вы вернетесь туда, где находитесь сейчас.

Вы не указываете, как вы управляете гостем. Если он полностью виртуализирован, возможно, в используемой вами эмулированной сетевой карте есть ошибка; virtio one - ваш лучший выбор, но если вы уже используете его, попробуйте e1000 вместо.