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

ВМ на хосте KVM с тегированными VLAN

У меня есть две debian9.1-VM, работающие на одном KVM-хосте.
Если они оба подключены к VLAN1, я могу использовать ssh с одной виртуальной машины на другую.
Если они оба находятся в другой VLAN, они могут пинговать друг друга, но не могут использовать ssh.
Если в этой VLAN есть третья виртуальная машина на другом узле KVM, эта виртуальная машина может использовать ssh для двух других виртуальных машин, и они могут использовать ssh для этой виртуальной машины.

В чем причина того, что ssh не работает, если виртуальные машины работают на одном гипервизоре?
И что мне нужно изменить на хосте KVM, чтобы позволить виртуальным машинам на нем подключаться друг к другу - без наличия хоста KVM в этой VLAN?

В качестве теста я сделал новую установку debian9.1. Затем:

apt-get install vlan
modprobe 8021q
echo "8021q" >>/etc/modules

После этого я модифицировал /etc/network/interfaces на виртуальных машинах вот так:

allow-hotplug ens3
#iface ens3 inet dhcp
auto ens3.23
iface ens3.23 inet static
  address 192.168.23.11   # .12 / .21 on the other ones
  netmask 255.255.255.0
  vlan-raw-device ens3

Теперь виртуальные машины маркируют все пакеты для VLAN23. Я могу видеть эти теги на своем коммутаторе, если между виртуальными машинами на разных хостах KVM была связь.

И результат: (ВМ .11 и .12 находятся на KVM1, .21 - на KVM2)

.11 <-> .12 ==> no connect
.11 <-> .21 ==> connect
.12 <-> .21 ==> connect

РЕДАКТИРОВАТЬ: это уже не важно. Я нашел обходной путь.
Сетевые карты были включены virtio.
После установки их на rtl8139 все в порядке ... и теперь можно передавать по ssh с одной виртуальной машины на другую, даже если они работают на одном гипервизоре.

переход на старую эмулируемую сетевую карту не решает проблемы.

На самом деле, если ваши виртуальные машины находятся в разных VLAN, они вообще не должны иметь возможность общаться, и то, что они это делают, является очевидной ошибкой.

Сказав это, правильный способ маркировки виртуальных машин находится не внутри самой виртуальной машины, а путем создания тегированных интерфейсов на хосте, создания мостов поверх этих тегированных интерфейсов (так что у вас есть что-то вроде маркированного v-переключателя) и подключения ВМ в эти помеченные мосты.