1

Я пытаюсь изучить OVS и KVM, и в целом разбираюсь в основных мостовых сетях в виртуальном мире (то есть между OVS, хостом VM и гостями KVM/Libvirt). Я использую ClearLinux (на основе systemd) на хосте VM.

Мой фактический вопрос выделен жирным шрифтом ниже, остальная часть этого поста, я надеюсь, поможет людям проконсультировать меня по этому вопросу.

РЕДАКТИРОВАТЬ:


Получил указание на SU от сетевого инжиниринга StackExchange. Если кто-нибудь знает какие-либо хорошие учебные курсы по OVS и KVM, пожалуйста, дайте мне знать :-)


Ссылки на данный момент:https://libvirt.org/formatdomain.html http://docs.openvswitch.org/en/latest/howto/libvirt/

Итак, я дошел до точки:

  1. Иметь мост овс (тестбридж)
  2. Подключил физическую сеть хоста (enp5s0) к тестбриджу
  3. Создано два виртуальных отводных устройства (virtualport1 и 2)
  4. Подключил краны к тестбриджу

OVS выглядит так:

sudo ovs-vsctl show

010aff41-dc37-410d-87dc-842a1a2cebeb
    Bridge testbridge
        Port "virtualport2"
            Interface "virtualport2"
        Port "enp5s0"
            Interface "enp5s0"
        Port testbridge
            Interface testbridge
                type: internal
        Port "vnet0"
            Interface "vnet0"
        Port "virtualport1"
            Interface "virtualport1"
    ovs_version: "2.8.1"

'enp5s0' - это физический порт на хосте vm. Он подключен к Cisco SG-300 (общий интерфейс switchport, транкинг связки vlans, общий pvid 25 и vlan 25 без тегов).

Существует внешний DHCP-сервер, работающий на всех соответствующих VLANS.

У меня есть гость libvirt под названием 'debian' (бонусные баллы за креативность), который настроен с помощью:

<interface type='bridge'>
  <mac address="00:16:3E:EF:61:91"/>
  <model type='virtio'/>
  <source bridge='testbridge'/>
  <virtualport type='openvswitch'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<graphics type='vnc' port='-1' autoport='yes' sharePolicy='allow-exclusive' passwd='PleaseDontHaxorMe'>
  <listen type='address' listen='0.0.0.0'/>
</graphics>

Во всяком случае, вот где я застрял. Мой вопрос:как получить удовольствие от L3 на интерфейсе vnet0 (т. Е. На гостевом vm 'debian'), поэтому у меня есть IP для VNC, чтобы выполнить установку (я использую debian netinst.iso)?

Никогда раньше этого не делал, я вроде предполагал, что он будет arp и появится через DHCP, а ip address show vnet0 покажет адрес VM для VNC ...Очевидно, нет, хотя. Это выглядит как на L2 (как показано ниже):

ip address show vnet0
16: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq master ovs-system state UNKNOWN group default qlen 1000
    link/ether fe:16:3e:ef:61:91 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:feef:6191/64 scope link
       valid_lft forever preferred_lft forever

Но делать:

sudo ovs-appctl fdb/show testbridge

Только кажется, что список Mac на порт 1 (enp5s0) не vnet0 ...

Если мне это удастся, я также хотел бы узнать, как настроить vnet0 на тестовом мосту ovs:

  1. Как порт доступа в vlan 100?
  2. Как транковый порт, на vlan 100, 150 и 151?
  3. Соединить какие-либо / все помеченные VLAN'ы с тем, что существуют на тестбридже?
  4. То же, что 3, но в том числе без тегов vlans?

РЕДАКТИРОВАТЬ 3:


https://blog.scottlowe.org/2012/11/07/using-vlans-with-ovs-and-libvirt/ Это в значительной степени охватывает перечисленные выше моменты. Также рассматривается, как использовать домен libvirt xml для исправления в виртуальной машине. Еще не все закончил, завтра попробую.


Тем не менее, я, вероятно, смогу решить эти последние 4 вещи самостоятельно, если я смогу запустить виртуальную машину, чтобы перехватить трафик на vnet0 и посмотреть, что на самом деле происходит ...

ПРИМЕЧАНИЕ: я намеревался подключить виртуальную машину к virtualport1, но где-то пропустил, и вместо этого он создал новый порт на тестбридже под названием «vnet0». Я уверен, что это можно исправить в libvirt domainxml с параметрами ovs здесь (приведу в порядок позже, а сейчас vnet0!): Https://libvirt.org/formatdomain.html#elementsNICSBridge

РЕДАКТИРОВАТЬ 2:


Я думаю, что этот бит решен согласно ссылке выше:

Вытащите uuid соответствующего порта, к которому хотите подключиться:

sudo ovs-vsctl list Port | grep 'name\|_uuid'

Добавьте его в XML-файл Libvirt соответствующей виртуальной машины:

<interface type='bridge'>
  <mac address="00:16:3E:EF:61:91"/>
  <model type='virtio'/>
  <source bridge='testbridge'/>
  <virtualport type='openvswitch'/>
    <parameters interfaceid='YOUR_UUID_GOES_HERE'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

ура

1 ответ1

0

Хорошо, оказывается, я XY'd это что-то ужасное ....

Все работало, я просто понятия не имел, как сделать установку без головы. Оказывается, что это легко сделать с помощью перенаправления портов SSH:

Прочитайте все о конфигурации XML домена VM (элемент относительно VNC в частности) здесь:

Некоторые краткие заметки об этом, хотя:

VNC Notes:
* Default - Guest binds it's VNC server to hosts loopback:
    <graphics type='vnc' port='-1' autoport='yes'/>
* The first guest gets screen 0/port 5900, the second guest gets screen 1/port 5901 etc.
* Requires SSH tunneling in order to gain access to the guest domain’s VNC console.
Better VNC Options:
    Guest listens on any host interface, port auto allocated:
        <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
    Guest listens on specified IP, port auto allocated, password protected:
        <graphics type='vnc' port='-1' autoport='yes' passwd='correcthorsebatterystaple'>
          <listen type='address' address='192.168.120.15'/>
        </graphics>
    Guest listens on specified IP and port, password protected with screen share policy:
        <graphics type='vnc' port='5904' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'>
          <listen type='address'  listen='192.168.120.15'/>
        </graphics>
    Guest listens on specified IP, auto websocket, password protected with screen share policy:
        <graphics type='vnc' websocket='-1' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'>
          <listen type='address'  listen='192.168.120.15'/>
        </graphics>

В итоге: убедитесь, что у вас правильно настроен элемент XML домена VM для VNC и что вы используете netinst iso. Настройте ваш мост OVS (если это то, что вы используете для виртуальной машины). Определите libvirt сетевой XML. Затем в XML-описании домена VM подключите его к ранее определенной сети libvirt, которая использует ваш мост OVS.

Проверьте порт прослушивания виртуальной машины (отметив, что он относится к значению по умолчанию; 0 означает, что все IP-адреса на 5900, 127.0.0.1:1 будут означать localhost на 5901 и т.д.).

sudo virsh vncdisplay $VM_NAME

SSH пересылает интерфейс к виртуальной машине, который в общем случае выглядит следующим образом:

ssh -N -L HOST_IP:HOST_PORT:localhost:5900 user@kvmhost

Пересылка Localhost 5901 в VM 5900:

ssh -N -L 5901:localhost:5900 user@kvmhost

Переадресация определенного внешнего IP-адреса хоста на виртуальную машину. '-fNT' используется для фоновой пересылки SSH без фактической остановки процесса, что освобождает сеанс консоли для его дальнейшего использования:

ssh -fNT -L 192.168.225.17:5901:localhost:5900 user@kvmhost

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .