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

Kate

Administrator
Команда форума
Данная статья является пошаговым руководством по установке 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:​

[IMG alt="
"]https://habrastorage.org/r/w1560/ge...ab/af25cd6ab86e41f76365f324f6d0c997.png[/IMG]

Проверяем 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":

08f65247966eaabe19da70850102d460.png

Чтобы попасть в саму установку 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

ce7f6c42817cde3914a663d5d30aa5bf.png

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

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

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

05cce74acbf78668424603e66e4ebd2d.png

Заменяем весь этот блок - <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=”

38a4fea08cd27a71c50a2a48c4665128.png

Здесь видно, что для второго интерфейса можно взять, например, слот 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:

fa57ee51e061ba3e4f9bfaa23c548188.png

После окончания загрузки - заходим на консоль 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:

27ab854b50205f0897ddd501adcb5aeb.png

Полезные команды 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


 
Сверху