Установка JUNIPER VRR через CLI на гипервизоре KVM в LINUX (Centos/Ubuntu). Cеть — macVtap-bridge

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

Данная статья является пошаговым руководством по установке Juniper VRR на KVM в Linux Centos или Ubuntu. VRR будет смотреть в локальную сеть, поэтому с ним можно будет поднять соседство с железных сетевых устройств.

Сеть будет настроена с помощью macvtap-бриджа в LAN. Будет также создан скрипт qemu, включающий мультикаст на macVtap-интерфейсах, возникающих при старте виртуальной машины, благодаря чему с ней можно будет поднять OSPF-соседство.

Centos или Ubuntu могут быть реальными или виртуальными.

В данном примере:

  • subnet 172.24.224.0/27

  • gw=172.24.224.10

  • Linux with KVM ip = 172.24.224.18/27

  • VRR 20 ip = 172.24.224.26/27

  • Linux user = “avk

1. Устанавливаем Сentos или Ubuntu.

А) Вариант с Centos

Для Centos необходимо сначала сделать DISABLE SELINUX:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Проверяем, должно ответить, что SELinux status: disabled:

sestatus
 SELinux status: disabled:
SELinux status: disabled:

Удаляем NetworkManager:

yum remove NetworkManager

В случае лабы можно сделать:

systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld

*Либо не выключаем, но тогда разрешаем всё, что нужно.

yum update

Ставим полезное:

yum install -y mc at nano vim wget open-ssh openssh-clients man bind-utils bzip2 unzip zip ntp sysstat bash-completion vnstat net-tools lsof tcpdump groupinstall virtualization-client virtualization-platform virtualization-tools open-vm-toolssols

Cтавим KVM + необходимое остальное:

yum install-y kvm qemu-kvm qemu-img libvirt python-virtinst bridge-utils virt-install libvirt-python bridge-utils virt-manager virt-viewer libguestfs-tools libvirt-client libguestfs

Б). Вариант с Ubuntu

Ставим Ubuntu, например 21 server.

Устанавливаем в нём KVM + необходимое:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils net-tools virtinst virt-manager

Далее - ОДИНАКОВО для Centos/Ubuntu > > >


2. Добавляем своего пользователя (здесь пользователь - “avk”) в группы libvirt и kvm:

sudo usermod -aG libvirt avk 
sudo usermod -aG kvm avk

3. Активируем сервис LIBVIRTD:

systemctl enable libvirtd
systemctl start libvirtd
systemctl enable libvirtd.service
service libvirtd status

Отл:

Libvertd started OK
Libvertd started OK

4. Делаем нашему Centos/Ubuntu - перезагрузку:

reboot

5. На всякий случай (этого (почти) не может быть, но на всякий и чтобы знать как оно устроено) проверяем, - есть ли default network - она должна быть ("Таков Путь"):

virsh net-list –-all
Default-network - есть
Default-network - есть

Если, вдруг, её нет - создаем default network в режиме NAT:

nano /tmp/default.xml

Копи-пастим туда вот это:

<network>
  <name>default</name>
  <bridge name="virbr0"/>
  <forward mode="nat"/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254"/>
    </dhcp>
  </ip>

Теперь используем наш default.xml для создания default-network:

virsh net-define /tmp/default.xml

virsh net-start default

virsh net-autostart default

6. Создаём STORAGE POOL с именем “images”:

virsh pool-define-as images dir - - - - "/var/lib/libvirt/images"
virsh pool-list --all
virsh pool-build images
virsh pool-start images
virsh pool-autostart images
virsh pool-info images

Теперь KVM настроен, можно начинать установку Juniper VRR, например вот этого:

vrr-bundle-kvm-20.4R1-S1.2.tgz

В распакованном виде, Juniper VRR версии 20 состоит из двух файлов:

junos-x86-64-20.4R1-S1.2.img

metadata.img

7. Копируем образ в /var/lib/libvirt/images/vrr20/ - с помощью MC либо WinSCP:

Проверяем MD5:

md5sum vrr-bundle-kvm-20.4R1-S1.2.tgz

Распаковываем:

tar -xvf vrr-bundle-kvm-20.4R1-S1.2.tgz

После распаковки появится подпапка с именем, например, 20.4R1-S1.2 – из которой (лично мне так удобнее) файлы перемещаем в папку vrr20:

mv /var/lib/libvirt/images/vrr20/20.4R1-S1.2/* /var/lib/libvirt/images/vrr20/

8. Запускаем установку VRR - одной строкой с помощью утилиты virt-install импортом двух дисков с именами junos-x86-64-20.4R1-S1.2.img и metadata.img. RAM = 4192 mb:

virt-install --name vrr20 --ram 4192 --import --disk=/var/lib/libvirt/images/vrr20/junos-x86-64-20.4R1-S1.2.img --import --disk=/var/lib/libvirt/images/vrr20/metadata.img

В том окне, где мы запустили инсталляцию будет “Waiting for the installation to complete":

Чтобы попасть в саму установку JUNOS - в отдельном терминале до этой машины говорим:

virsh console vrr20

Дожидаемся окончания установки, логинимся root, ставим пароль на root и выключаем машину:

set system root-authentication plain-text-password Passvd_2000
commit 
Request system power-off    

"Request system power-off" нужен, чтобы установка завершилась. После чего можно переходить к настройке сети.

9. Настройка сети (MACvTAP-bridge to LAN)

После request system power-off (машина VRR20 выключается) появляется файл vrr20.xml, в котором мы будем редактировать настройку сети – сделаем bridge в LAN с помощью MACVTAP.

Выясняем имя сетевой карты Centos/Ubuntu, смотрящей в LAN:

ip address

Выяснив, что (в данном примере) имя нашей сетевой карты, смотрящей в LAN = “eno16777736”, идём в следующий пункт.

10. Редактируем выключенную машину vrr20:

virsh edit --domain vrr20

Попадаем в редактирование (vi либо nano) xml-документа. Скроллим вниз до <interface type=’network’ – это сетевой интерфейс, который создается автоматически при инсталляции VRR:

Заменяем весь этот блок - <interface> на новый. В нём “type network”, заменяется на ‘direct’, а source network заменяем на source dev=eno1677736 (выясненное в пункте 9):

   <interface type='direct'>
      <source dev='eno16777736' mode='bridge'/>
      <model type='e1000'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

Обратите внимание на "slot='0x03'" – делаем в нашем новом блоке таким же, как в том который было до этого, либо любое другое значение, но не повторяющееся больше ни разу в файле!

Проверить можно заранее сделав cat + grep по xml-файлу нашего vrr20.xml (ну или grep -i "slot=" /etc/libvirt/qemu/vrr20.xml) :

cat /etc/libvirt/qemu/vrr20.xml | grep “slot=”

Здесь видно, что для второго интерфейса можно взять, например, слот 0x08, т.к. как он ни разу в файле не встречается. Второй интерфейс может понадобиться для mgmt или резервирования доступности VRR. В VMWARE можно сделать, например, один сетевой интерфейс нашего Centos/Ubuntu в режиме NAT, второй - bridge.

Заканчиваем редактирование vrr20. Если редактор VI это будет:

press Escape 
shift +: 
wq!

Если nano, то:

Ctrl+O + press Enter
Ctrl+X

11. Запускаем VRR20

virsh start --domain vrr20

Машина запускается, смотрим ещё раз сеть командой ip address.

Должен появиться хотя бы один MACVTAP-интерфейс, выполняющий бриджинг виртуального сетевого интерфейса VRR “e1000” в интерфейс Centos – “eno16777736” – и далее в LAN:

После окончания загрузки - заходим на консоль vrr20:

virsh console vrr20
login root 
cli
show interfaces terse

Должен быть виден (хотя бы) em0.

show interface terse

Назначаем на em0 адрес в нашей LAN, у меня это 172.24.224.26:

set interfaces em0 unit 0 family inet 172.24.224.26/27
set system host-name VRR20_LAB
commit

Должен запинговаться default GW в LAN:

Отл.
Отл.

Казалось-бы - ура, можно поднимать с RR OSPF и BGP, но, радоваться рано ----------> см. пункт 12

12. Мультикаст на MACVTAP-интерфейсах по-умолчанию выключен и его необходимо на них включить.

Здесь необходимо учесть, что KVM создает macvtap-интерфейсы только после старта машины! Поэтому нельзя просто так взять и сказать, например, crontab -e и положить туда что-то вроде @rebootmacvtap0 allmulti

Решением будет создать скрипт с именем "qemu", включающий мультикаст на возникающих при старте машины macvtap-интерфейсах, и положить его в /etc/libvirt/hooks

Cначала выключим машину:

virsh shutdown vrr20

Создаём скрипт:

nano /etc/libvirt/hooks/qemu

Добавляем следующий текст:

#!/bin/bash
for A in $(ifconfig | grep -E macvtap | cut -d: -f1)
do
ifconfig $A allmulti
done

Делаем скрипт исполняемым:

chmod +x /etc/libvirt/hooks/qemu

KVM при старте машины автоматически проверяет существование файла в директории /etc/libvirt/hooks/и запускает его при старте виртуальных машин.

Включаем машину:

virsh start vrr20

Смотрим, активировался ли мультикаст на macvtap-интерфейсах:

ip address | grep macvtap | grep ALLMULTI

Отл:

ip address | grep macvtap | grep ALLMULTI
ip address | grep macvtap | grep ALLMULTI

Проверяем show ospf neighbor:

Полезные команды VIRSH:

cd /etc/libvirt/qemu/

virsh list –all --inactive

virsh net-list –all --inactive

virsh pool-list

virsh pool-info images

virsh pool-dumpxml images

Найти файл нашего VRR:


Источники:

https://sites.google.com/site/wikapim/virtual/kvm/kvm_hooks

https://sites.google.com/site/wikapim/networks/juniper/juniper_vrr

https://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html


Большое спасибо Михаилу Шишкову за ценные консультации и помощь в подготовке скрипта "qemu"!

Источник: https://habr.com/ru/post/570752/


Интересные статьи

Интересные статьи

От переводчика:Когда-нибудь я подключу к одной сети VPN свою нынешнюю машину в Беларуси и машину в России. Пробовал на зуб ZeroTier, чтобы соединить их вообще, но сервис ...
В предыдущей статье была описана процедура установки Elasticsearch и настройка кластера. В этой статье будет рассмотрена процедура установки Kiba...
Если вы считаете, что умеете готовить, то может, вы знаете о том, как сделать суфле или пахлаву, а может — и не знаете. Но есть кое-что такое, чему вы, вероятно, научились, просто готовя ...
Я, исследуя устойчивость хранения данных в облачных системах, решил проверить себя, убедиться в том, что понимаю базовые вещи. Я начал с чтения спецификации NVMe для того чтобы разобратьс...
Данная заметка имеет собой цель продемонстрировать автоматический git bisect на примере ядра Linux. С последующим поиском официальной версии начиная с которой всё поломалось и последней хорошей в...