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

ssh к dom0 и domU одновременно сбрасывает соединение с dom0

Когда сеть к domU подключена через конфигурацию моста, открытое ssh-соединение с dom0 и domU одновременно случайным образом разрывает соединение dom0 (сброс соединения одноранговым узлом) и не позволяет мне вернуться.

Авторизация осуществляется с помощью ключей ssh. Какие-нибудь советы по решению этого вопроса?

РЕДАКТИРОВАТЬ: некоторые подробности об окружающей среде

dom0

# cat /proc/version
Linux version 2.6.18-128.1.10.el5xen (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Thu May 7 11:07:18 EDT 2009

domU

# cat /proc/version
Linux version 2.6.9-78.0.22.ELxenU (mockbuild@builder10.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Thu Apr 30 19:39:33 EDT 2009

Xen версии 3.1.2-128.1.10.el5

Важная деталь, которую я сначала забыл упомянуть: это происходит только тогда, когда dom0 имеет связанный с ним внешний IP.

Текущее решение: нет внешнего IP на dom0, доступ к dom0 через domU -> dom0 path. Это может быть относительно безопасно, если у вас есть отдельный domU, который ничего не делает, кроме предоставления этого маршрута. Я все еще могу подключиться к dom0 удаленно и при необходимости перезагрузить другие машины.

EDIT2: дополнительная информация о MAC-адресах на dom0

dom0

# ifconfig|grep HWaddr
bond0     Link encap:Ethernet  HWaddr 00:04:23:DC:28:60  
bond0.100 Link encap:Ethernet  HWaddr 00:04:23:DC:28:60  
eth0      Link encap:Ethernet  HWaddr 00:04:23:DC:28:60  
eth1      Link encap:Ethernet  HWaddr 00:04:23:DC:28:60  
tap0      Link encap:Ethernet  HWaddr 7E:CE:49:45:3F:2E  
vif4.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif4.1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif22.0   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
xenbr0    Link encap:Ethernet  HWaddr 00:04:23:DC:28:60  
xenbr1    Link encap:Ethernet  HWaddr 00:04:23:DC:28:60

Казалось бы, действительно есть проблема с дублированием MAC-адресов.

Основываясь на информации, которую вы предоставили до сих пор, я бы предположил, что проблема связана с дублированием MAC-адреса, а отключения могут быть связаны с коммутатором, через который проходит порт Ethernet.

Тем не менее, будет некоторое дублирование MAC-адресов. Я только что проверил один из своих серверов Xen, над которым работал, и при запуске получаю следующее: ifconfig | grep HWaddr

eth0      Link encap:Ethernet  HWaddr 00:E0:81:2D:66:AC  
eth1      Link encap:Ethernet  HWaddr 00:E0:81:2D:66:AD  
peth0     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
peth1     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif0.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif0.1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif31.0   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
vif31.1   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
xenbr0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
xenbr1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  

Это на сервере RHEL5 Xen 3.0.3, поэтому я предполагаю, что различия в интерфейсах основаны на изменениях между 3.0.3 и 3.1.2. Кроме того, вы можете видеть, что оба моих интерфейса eth0 и eth1 - разные MAC-адреса, тогда как ваши оба идентичны. записи pethX и vifX.X являются виртуальными интерфейсами для Xen, поэтому MAC-адрес FE: FF: FF: FF: FF: FF вполне подойдет.

Xenbr0 - это мост, к которому подключен eth0, а xenbr1 - это мост для eth1, использующий тот же MAC-адрес. Интерфейс virbr0 является мостом для внутренней виртуальной сети и имеет MAC 00: 00: 00: 00: 00: 00 из-за включения протокола связующего дерева. Вы можете подтвердить мост в вашей системе, запустив brctl show что должно дать вам что-то вроде:

bridge name bridge id       STP enabled interfaces
virbr0      8000.000000000000   yes     
xenbr0      8000.feffffffffff   no  vif31.0
                            peth0
                            vif0.0
xenbr1      8000.feffffffffff   no  vif31.1
                            peth1
                            vif0.1

Без подробностей, запрошенных другими в комментариях к вашему вопросу, я предполагаю, что это какая-то странная проблема с маршрутизацией, например, неправильно настроенный NAT.

Один из способов обходного решения - запустить sshd на другом порту в domU или dom0 и посмотреть, работает ли это. Если это исправит разрывы соединения, то это подтвердит предположение, что NAT настроен неправильно, поэтому запись в таблице преобразования для порта 22-в / из-domU затирается записью для порта-22-в / из-dom0. Не оставляйте это «исправление», если оно работает - вам нужно будет решить проблему маршрутизации, иначе это вызовет другие проблемы в будущем.

Этот обходной путь также может иметь желаемый эффект, если у вас есть дублирующиеся MAC-адреса, как предлагает Катриэль, поэтому сначала проверьте эту возможность.

Я делаю это несколько раз и знаю, что этот метод будет работать. К тому же вам вообще не нужно думать о портах. Чтобы подключиться к терминалу хоста из гостевой виртуальной машины, я должен выполнить следующие действия. Способ настройки xenserver заключается в том, что существуют ограничения на трафик порта. Я попытался изучить это и работать с управляемыми методами, но потом понял, что у меня есть другой вариант. Это требует, чтобы виртуальная машина, на которой вы работаете, имела внешнее подключение к сети, в которой находится хост. Управление с помощью статических IP-адресов - простой способ сделать это.

ДОПУЩЕНИЯ:

  1. "host_a" (содержит vm_a)
  2. "vm_a" имеет общий IP-адрес с host_a и настроен внешний ник.
  3. "host_b"

Вы узнаете, правильно ли настроено предположение 2, если вы можете подключаться по ssh к другим машинам в сети из виртуальной машины. Это необходимо, потому что именно так мы будем подключаться к host_a. Чтобы подключиться из сеанса ssh на VM_A, вы можете подключиться к HOST_B через ssh.

так что ваш терминал будет выглядеть примерно так.

[root@vm_a]$ssh root@host_b
[roo@host_b]#ssh root@host_a

Теперь мы сделали забавный кружочек и подключились к главному терминалу. Есть и другие способы прямого подключения путем портирования, но для меня 2 строчки проще.